Add quick interactions locally
This commit is contained in:
139
Quick Interactions/CSharp/Shared/Mod.cs
Normal file
139
Quick Interactions/CSharp/Shared/Mod.cs
Normal file
@@ -0,0 +1,139 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user