139 lines
3.6 KiB
C#
139 lines
3.6 KiB
C#
using System;
|
|
using System.Reflection;
|
|
using System.Diagnostics;
|
|
using System.Collections.Generic;
|
|
using System.Collections.Immutable;
|
|
using System.Linq;
|
|
using System.IO;
|
|
|
|
using Barotrauma;
|
|
using HarmonyLib;
|
|
using Microsoft.Xna.Framework;
|
|
using QIDependencyInjection;
|
|
|
|
#if CLIENT
|
|
using QICrabUI;
|
|
#endif
|
|
|
|
namespace QuickInteractions
|
|
{
|
|
public class PatchClassAttribute : System.Attribute { }
|
|
public partial class Mod : IAssemblyPlugin
|
|
{
|
|
public static string Name = "Quick Interactions";
|
|
public static Harmony Harmony = new Harmony("quick.interactions");
|
|
|
|
[EntryPoint] public static Mod Instance { get; set; }
|
|
|
|
[Singleton] public Debugger Debugger { get; set; }
|
|
[Singleton] public Logger Logger { get; set; }
|
|
[Singleton] public LogicLayer Logic { get; set; }
|
|
[Singleton] public Debouncer Debouncer { get; set; }
|
|
|
|
[Dependency] public GameStageTracker GameStageTracker { get; set; }
|
|
|
|
public ModPaths Paths { get; set; }
|
|
public bool Disposed { get; set; }
|
|
|
|
public event Action OnPluginLoad;
|
|
public event Action OnPluginUnload;
|
|
|
|
public ServiceCollection Services = new ServiceCollection() { Debug = false };
|
|
|
|
public void SetupDependencies()
|
|
{
|
|
|
|
}
|
|
|
|
public void Initialize()
|
|
{
|
|
Stopwatch sw1 = Stopwatch.StartNew();
|
|
Instance = this;
|
|
AddCommands();
|
|
|
|
Paths = new ModPaths(Name);
|
|
sw1.Stop();
|
|
|
|
Stopwatch sw2 = Stopwatch.StartNew();
|
|
#if CLIENT
|
|
//CUI.Debug = Paths.IsInLocalMods;
|
|
CUI.ModDir = Paths.ModDir;
|
|
CUI.AssetsPath = Paths.AssetsFolder;
|
|
CUI.HookIdentifier = Name;
|
|
//CUI.UseCursedPatches = true;
|
|
CUI.UseLua = false;
|
|
CUI.Initialize();
|
|
#endif
|
|
sw2.Stop();
|
|
|
|
Stopwatch sw3 = Stopwatch.StartNew();
|
|
SetupDependencies();
|
|
Services.InjectEverything();
|
|
sw3.Stop();
|
|
|
|
Debugger.Debug = Paths.IsInLocalMods;
|
|
//Debugger.CurrentLevel = DebugLevel.ButtonColor;
|
|
|
|
Debugger.Log($"AddCommands took {sw1.ElapsedMilliseconds}ms", DebugLevel.Performance);
|
|
Debugger.Log($"CUI.Initialize() took {sw2.ElapsedMilliseconds}ms", DebugLevel.Performance);
|
|
Debugger.Log($"InjectEverything took {sw3.ElapsedMilliseconds}ms", DebugLevel.Performance);
|
|
|
|
Stopwatch sw = Stopwatch.StartNew();
|
|
PatchAll();
|
|
Debugger.Log($"PatchAll took {sw.ElapsedMilliseconds}ms", DebugLevel.Performance);
|
|
|
|
#if CLIENT
|
|
InitializeClient();
|
|
#endif
|
|
|
|
sw.Restart();
|
|
OnPluginLoad?.Invoke();
|
|
if (Utils.RoundIsLive)
|
|
{
|
|
GameStageTracker.InvokeOnRoundStartOrInitialize();
|
|
}
|
|
Debugger.Log($"Hooks took {sw.ElapsedMilliseconds}ms", DebugLevel.Performance);
|
|
|
|
Logger.Info($"{Name} initialized");
|
|
}
|
|
|
|
public void PatchAll()
|
|
{
|
|
Assembly CallingAssembly = Assembly.GetCallingAssembly();
|
|
|
|
foreach (Type type in CallingAssembly.GetTypes())
|
|
{
|
|
if (Attribute.IsDefined(type, typeof(PatchClassAttribute)))
|
|
{
|
|
MethodInfo init = type.GetMethod("Initialize", AccessTools.all);
|
|
if (init != null)
|
|
{
|
|
init.Invoke(null, new object[] { });
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void Log(object msg, Color? color = null)
|
|
{
|
|
color ??= Color.Cyan;
|
|
LuaCsLogger.LogMessage($"{msg ?? "null"}", color * 0.8f, color);
|
|
}
|
|
|
|
public void OnLoadCompleted() { }
|
|
public void PreInitPatching() { }
|
|
public void Dispose()
|
|
{
|
|
OnPluginUnload?.Invoke();
|
|
#if CLIENT
|
|
CUI.Dispose();
|
|
#endif
|
|
RemoveCommands();
|
|
Debouncer.Dispose();
|
|
|
|
Mod.Harmony.UnpatchAll(Mod.Harmony.Id);
|
|
Disposed = true;
|
|
//Instance = null;
|
|
}
|
|
}
|
|
} |