|
using System;
|
|
using System.IO;
|
|
using System.Reflection;
|
|
|
|
namespace IPA
|
|
{
|
|
public class PatchContext
|
|
{
|
|
/// <summary>
|
|
/// Gets the filename of the executable.
|
|
/// </summary>
|
|
public string Executable { get; private set; }
|
|
|
|
public string DataPathSrc { get; private set; }
|
|
public string LibsPathSrc { get; private set; }
|
|
public string PluginsFolder { get; private set; }
|
|
public string ProjectName { get; private set; }
|
|
public string DataPathDst { get; private set; }
|
|
public string LibsPathDst { get; private set; }
|
|
public string ManagedPath { get; private set; }
|
|
public string EngineFile { get; private set; }
|
|
public string AssemblyFile { get; private set; }
|
|
public string ProjectRoot { get; private set; }
|
|
public string IPARoot { get; private set; }
|
|
public string ShortcutPath { get; private set; }
|
|
public string IPA { get; private set; }
|
|
public string BackupPath { get; private set; }
|
|
|
|
// This is only created by us; and all are assigned
|
|
#pragma warning disable CS8618 // Non-nullable field must contain a non-null value when exiting constructor. Consider declaring as nullable.
|
|
private PatchContext() { }
|
|
#pragma warning restore CS8618 // Non-nullable field must contain a non-null value when exiting constructor. Consider declaring as nullable.
|
|
|
|
public static PatchContext Create(string exe)
|
|
{
|
|
var context = new PatchContext
|
|
{
|
|
Executable = exe
|
|
};
|
|
context.ProjectRoot = new FileInfo(context.Executable).Directory?.FullName ?? throw new Exception();
|
|
context.IPARoot = Path.Combine(Path.GetDirectoryName(Assembly.GetEntryAssembly()!.Location) ?? throw new InvalidOperationException(), "IPA");
|
|
context.IPA = Assembly.GetExecutingAssembly().Location;
|
|
context.DataPathSrc = Path.Combine(context.IPARoot, "Data");
|
|
context.LibsPathSrc = Path.Combine(context.IPARoot, "Libs");
|
|
context.PluginsFolder = Path.Combine(context.ProjectRoot ?? throw new InvalidOperationException(), "Plugins");
|
|
context.ProjectName = Path.GetFileNameWithoutExtension(context.Executable);
|
|
context.DataPathDst = Path.Combine(context.ProjectRoot, context.ProjectName + "_Data");
|
|
context.LibsPathDst = Path.Combine(context.ProjectRoot, "Libs");
|
|
context.ManagedPath = Path.Combine(context.DataPathDst, "Managed");
|
|
context.EngineFile = Path.Combine(context.ManagedPath, "UnityEngine.CoreModule.dll");
|
|
context.AssemblyFile = Path.Combine(context.ManagedPath, "Assembly-CSharp.dll");
|
|
context.BackupPath = Path.Combine(context.IPARoot, "Backups", context.ProjectName);
|
|
string shortcutName = $"{context.ProjectName} (Patch & Launch)";
|
|
context.ShortcutPath = Path.Combine(context.ProjectRoot, shortcutName) + ".lnk";
|
|
|
|
_ = Directory.CreateDirectory(context.BackupPath);
|
|
|
|
return context;
|
|
}
|
|
}
|
|
}
|