JD2022-TU1/main/tools/apps/Packager/Tasks/MergeContainers.cs

74 lines
2.7 KiB
C#

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.IO;
using System.Linq;
using JD.Core.ProjectManaging;
using Packager.Parameters;
namespace Packager.Tasks
{
[DisplayName("Merge Containers")]
public class MergeContainers: Task
{
[Input("Directory List", IOCardinality.Multi, IOType.Directory)]
public List<string> Directories { get; set; }
[Input("Map List", IOCardinality.Multi, IOType.File)]
public List<string> MapList { get; set; }
[Input("Map File Name", IOCardinality.Single, IOType.String)]
public List<string> MapFileName { get; set; }
[Output("Merged Map List", IOType.File)]
public List<string> MergedMapList = new List<string>();
[Output("Common List", IOType.File)]
public List<string> CommonList = new List<string>();
public MergeContainers()
{
Directories = new List<string>();
MapList = new List<string>();
MapFileName = new List<string>();
}
public override bool NeedCooker => true;
protected override void StartInternal(BuildConfiguration profile, cookerWrapper cooker, TaskIO inputs, string outputFolder)
{
var directories = inputs["Directories"];
string platform = profile.PlatformList.First();
string atlasContainer = null;
string sgsContainer = null;
cooker.getCookedNamePlatform("atlascontainer", platform, ref atlasContainer);
cooker.getCookedNamePlatform("sgscontainer", platform, ref sgsContainer);
var atlasFiles = directories.Select(dir => Path.Combine(dir, atlasContainer)).Union(new[] { Path.Combine(DataPath.Value, atlasContainer) });
var sgsFiles = directories.Select(dir => Path.Combine(dir, sgsContainer)).Union(new[] { Path.Combine(DataPath.Value, sgsContainer) });
cooker.mergeAtlasContainer(atlasContainer, atlasFiles.ToList());
cooker.mergeSgsContainer(sgsContainer, profile.CookLogicToBinary, sgsFiles.ToList());
// merge map list
var mapFileName = inputs["MapFileName"].First();
var maps = new List<string>(inputs["MapList"]);
foreach (var dir in directories)
{
var mapfile = Path.Combine(dir, mapFileName);
var commonFile = Path.Combine(dir, "common.txt");
if(File.Exists(mapfile))
maps.AddRange(File.ReadAllLines(mapfile));
if (File.Exists(commonFile))
CommonList.Add(commonFile);
}
MergedMapList.AddRange(maps);
//OnFinished(0);
}
}
}