- [Core] Project restructure
This commit is contained in:
130
AssetStudio.CLI/Program.cs
Normal file
130
AssetStudio.CLI/Program.cs
Normal file
@@ -0,0 +1,130 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Threading;
|
||||
using AssetStudio.CLI.Properties;
|
||||
using static AssetStudio.CLI.Studio;
|
||||
|
||||
namespace AssetStudio.CLI
|
||||
{
|
||||
public class Program
|
||||
{
|
||||
public static void Main(string[] args) => CommandLine.Init(args);
|
||||
|
||||
public static void Run(Options o)
|
||||
{
|
||||
try
|
||||
{
|
||||
var game = GameManager.GetGame(o.GameName);
|
||||
|
||||
if (game == null)
|
||||
{
|
||||
Console.WriteLine("Invalid Game !!");
|
||||
Console.WriteLine(GameManager.SupportedGames());
|
||||
return;
|
||||
}
|
||||
|
||||
if (game.Type.IsUnityCN())
|
||||
{
|
||||
if (!UnityCNManager.TryGetEntry(o.KeyIndex, out var unityCN))
|
||||
{
|
||||
Console.WriteLine("Invalid key index !!");
|
||||
Console.WriteLine($"Available Options: \n{UnityCNManager.ToString()}");
|
||||
return;
|
||||
}
|
||||
|
||||
UnityCN.SetKey(unityCN);
|
||||
Logger.Info($"[UnityCN] Selected Key is {unityCN}");
|
||||
}
|
||||
|
||||
Studio.Game = game;
|
||||
Logger.LogVerbose = o.Verbose;
|
||||
Logger.Default = new ConsoleLogger();
|
||||
Logger.FileLogging = Settings.Default.enableFileLogging;
|
||||
AssetsHelper.Minimal = Settings.Default.minimalAssetMap;
|
||||
Shader.Parsable = !Settings.Default.disableShader;
|
||||
Renderer.Parsable = !Settings.Default.disableRenderer;
|
||||
AnimationClip.Parsable = !Settings.Default.disableAnimationClip;
|
||||
AssetsHelper.SetUnityVersion(o.UnityVersion);
|
||||
|
||||
assetsManager.Silent = o.Silent;
|
||||
assetsManager.Game = game;
|
||||
assetsManager.SpecifyUnityVersion = o.UnityVersion;
|
||||
ModelOnly = o.Model;
|
||||
o.Output.Create();
|
||||
|
||||
if (o.Key != default)
|
||||
{
|
||||
MiHoYoBinData.Encrypted = true;
|
||||
MiHoYoBinData.Key = o.Key;
|
||||
}
|
||||
|
||||
if (o.AIFile != null && game.Type.IsGISubGroup())
|
||||
{
|
||||
ResourceIndex.FromFile(o.AIFile.FullName);
|
||||
}
|
||||
|
||||
if (o.DummyDllFolder != null)
|
||||
{
|
||||
assemblyLoader.Load(o.DummyDllFolder.FullName);
|
||||
}
|
||||
|
||||
Logger.Info("Scanning for files...");
|
||||
var files = o.Input.Attributes.HasFlag(FileAttributes.Directory) ? Directory.GetFiles(o.Input.FullName, "*.*", SearchOption.AllDirectories).OrderBy(x => x.Length).ToArray() : new string[] { o.Input.FullName };
|
||||
Logger.Info($"Found {files.Length} files");
|
||||
|
||||
if (o.MapOp.HasFlag(MapOpType.CABMap))
|
||||
{
|
||||
AssetsHelper.BuildCABMap(files, o.MapName, o.Input.FullName, game);
|
||||
}
|
||||
if (o.MapOp.HasFlag(MapOpType.Load))
|
||||
{
|
||||
AssetsHelper.LoadCABMap(o.MapName);
|
||||
assetsManager.ResolveDependencies = true;
|
||||
}
|
||||
if (o.MapOp.HasFlag(MapOpType.AssetMap))
|
||||
{
|
||||
if (files.Length == 1)
|
||||
{
|
||||
throw new Exception("Unable to build AssetMap with input_path as a file !!");
|
||||
}
|
||||
var resetEvent = new ManualResetEvent(false);
|
||||
AssetsHelper.BuildAssetMap(files, o.MapName, game, o.Output.FullName, o.MapType, resetEvent, o.TypeFilter, o.NameFilter, o.ContainerFilter);
|
||||
resetEvent.WaitOne();
|
||||
}
|
||||
if (o.MapOp.HasFlag(MapOpType.Both))
|
||||
{
|
||||
var resetEvent = new ManualResetEvent(false);
|
||||
AssetsHelper.BuildBoth(files, o.MapName, o.Input.FullName, game, o.Output.FullName, o.MapType, resetEvent, o.TypeFilter, o.NameFilter, o.ContainerFilter);
|
||||
resetEvent.WaitOne();
|
||||
}
|
||||
if (o.MapOp.Equals(MapOpType.None) || o.MapOp.HasFlag(MapOpType.Load))
|
||||
{
|
||||
var i = 0;
|
||||
|
||||
var path = Path.GetDirectoryName(Path.GetFullPath(files[0]));
|
||||
ImportHelper.MergeSplitAssets(path);
|
||||
var toReadFile = ImportHelper.ProcessingSplitFiles(files.ToList());
|
||||
|
||||
var fileList = new List<string>(toReadFile);
|
||||
foreach (var file in fileList)
|
||||
{
|
||||
assetsManager.LoadFiles(file);
|
||||
if (assetsManager.assetsFileList.Count > 0)
|
||||
{
|
||||
BuildAssetData(o.TypeFilter, o.NameFilter, o.ContainerFilter, ref i);
|
||||
ExportAssets(o.Output.FullName, exportableAssets, o.GroupAssetsType);
|
||||
}
|
||||
exportableAssets.Clear();
|
||||
assetsManager.Clear();
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Console.WriteLine(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user