JD2022-TU1/main/tools/apps/JDSongConverter/Converters/JD2016ToJD5Downgrader.cs

98 lines
5.7 KiB
C#

using System.Collections.Generic;
using System.Text.RegularExpressions;
using JD.Serialization;
using JDSongConverter.Tasks;
using TeaBox.Macros;
namespace JDSongConverter.Converters
{
public partial class Jd2016ToJd5Downgrader : Converter
{
private readonly ConvertDtapeToTimelineTask _convertDtapeToCreatedTimeline = new ConvertDtapeToTimelineTask();
private readonly ConvertKtapeToTimelineTask _convertKtapeToTimeline = new ConvertKtapeToTimelineTask();
private readonly CopyDirectoryTask _copyDirectoryTask = new CopyDirectoryTask();
private readonly ReplaceInDirectoryFiles _replaceInDirectoryFiles = new ReplaceInDirectoryFiles();
private readonly ConvertTo2015SongDesc _convertToOldSongDesc = new ConvertTo2015SongDesc();
private readonly ExtractPreviewAndVolumeFromTrkTask _extractTask = new ExtractPreviewAndVolumeFromTrkTask();
private readonly Tasks.Jd2016ToJd5Downgrader.ConvertFilesForJd5 _convertFilesForJd5 = new Tasks.Jd2016ToJd5Downgrader.ConvertFilesForJd5();
public Jd2016ToJd5Downgrader()
{
Tasks.Add(_copyDirectoryTask);
Tasks.Add(_convertDtapeToCreatedTimeline);
Tasks.Add(_convertKtapeToTimeline);
Tasks.Add(_convertToOldSongDesc);
Tasks.Add(_extractTask);
Tasks.Add(_convertFilesForJd5);
Tasks.Add(_replaceInDirectoryFiles);
}
public override void Process(JDSong song, string outputDir, string mapPathRelative, IExecutionContext logger)
{
var dtapeFile = AppDefinitions.Default.AbsoluteMapPath(MapPathType.DanceTapeFile,song);
var tplFile = AppDefinitions.Default.AbsoluteMapPath(MapPathType.TimelineTpl, outputDir, song.Name, JDSongVersion.JD5, JDFolderLayout.Engine);
var ktapeFile = GetKtapeFilePath(song);
var replaceEntries = CreateReplaceEntires();
SpecifyFIlesToModifyForJd5(song, outputDir);
_copyDirectoryTask.Init(song.RootPath, outputDir, replacerelativePathInFiles: false);
_convertDtapeToCreatedTimeline.Init(tplFile,dtapeFile);
_convertKtapeToTimeline.Init(tplFile, ktapeFile);
_replaceInDirectoryFiles.Init(replaceEntries);
base.Process(song, outputDir, mapPathRelative, logger);
}
private string GetKtapeFilePath(JDSong song)
{
if (Regex.IsMatch(song.Name, @"ALT$"))
{
var songName = song.Name;
var songRootPath = song.RootPath;
songName = songName.Replace("ALT", "");
songRootPath = songRootPath.Replace("ALT", "");
return AppDefinitions.Default.AbsoluteMapPath(MapPathType.KaraokeTapeFile, songRootPath, songName, JDSongVersion.JD2016, JDFolderLayout.Engine);
}
else
{
return AppDefinitions.Default.AbsoluteMapPath(MapPathType.KaraokeTapeFile, song);
}
}
private void SpecifyFIlesToModifyForJd5(JDSong song, string outputDir)
{
_convertFilesForJd5.AudioSceneFilePath = new Path(outputDir + @"/Audio/" + song.Name + "_AUDIO.isc");
_convertFilesForJd5.TimelineSceneFilePath = new Path(outputDir + @"/Timeline/" + song.Name + "_TML.isc");
_convertFilesForJd5.CinematicTplFilePath = new Path(outputDir + @"/Cinematics/" + song.Name + "_MainSequence.tpl");
_convertFilesForJd5.SequenceTapeFilePath = new Path(outputDir + @"/Cinematics/" + song.Name + "_MainSequence.tape");
}
private List<ReplaceEntry> CreateReplaceEntires()
{
List<ReplaceEntry> replaceEntries = new List<ReplaceEntry>();
replaceEntries.Add(new ReplaceEntry { Pattern = @"world/maps/", Replacement = @"world/JD5/", RegexOptions = RegexOptions.IgnoreCase });
replaceEntries.Add(new ReplaceEntry { Pattern = @"world/ui/materials/", Replacement = @"World/JD5/_Common/MatShader/", RegexOptions = RegexOptions.IgnoreCase });
replaceEntries.Add(new ReplaceEntry { Pattern = @"world/_common/", Replacement = @"world/JD5/_common/", RegexOptions = RegexOptions.IgnoreCase });
replaceEntries.Add(new ReplaceEntry { Pattern = @"JDVersion = 2016", Replacement = @"JDVersion = 5", RegexOptions = RegexOptions.IgnoreCase });
replaceEntries.Add(new ReplaceEntry { Pattern = @"TapeCase_Component", Replacement = @"JD_Timeline_Component", RegexOptions = RegexOptions.IgnoreCase });
replaceEntries.Add(new ReplaceEntry { Pattern = @"world/ui/textures/", Replacement = @"world/JD5/_UI/UI_COMMON/Textures/", RegexOptions = RegexOptions.IgnoreCase });
replaceEntries.Add(new ReplaceEntry { Pattern = @"alpha_mul_b.msh", Replacement = @"MultiTexture_1Layer.msh", RegexOptions = RegexOptions.IgnoreCase });
replaceEntries.Add(new ReplaceEntry { Pattern = @"alpha.msh", Replacement = @"MultiTexture_1Layer.msh", RegexOptions = RegexOptions.IgnoreCase });
replaceEntries.Add(new ReplaceEntry { Pattern = @"<ParentBind />", Replacement = @"", RegexOptions = RegexOptions.IgnoreCase });
replaceEntries.Add(new ReplaceEntry { Pattern = @"AnimatedFramePath = ""invalid path""", Replacement = @"AnimatedFramePath = ""world/jd5/_ui/ui_menu/ui_menu_pag_recapautodance/animatedframes/JDJPN4_Frame.webm""", RegexOptions = RegexOptions.IgnoreCase });
replaceEntries.Add(new ReplaceEntry
{
Pattern = @"Mode = 0, -- SongGameMode_Classic",
Replacement = @"mode = GameMode.Classic,
flags = GameModeFlags.None,
status = GameModeStatus.Available,",
RegexOptions = RegexOptions.IgnoreCase
});
return replaceEntries;
}
}
}