|
- using System.Reflection;
- using HarmonyLib;
- using RobocraftX;
- using RobocraftX.CR.MainGame;
- using RobocraftX.FrontEnd;
- using RobocraftX.StateSync;
- using Svelto.ECS;
- using Svelto.ECS.Schedulers;
- using TechbloxModdingAPI.Commands;
- using TechbloxModdingAPI.Utility;
-
- namespace TechbloxModdingAPI.Engines
- {
- [HarmonyPatch]
- static class GameLoadedTimeStoppedEnginePatch
- {
- public static void Postfix(StateSyncRegistrationHelper stateSyncReg)
- {
- // register all game engines, including deterministic
- GameEngineManager.RegisterEngines(stateSyncReg);
- // register command engines
- /*CommandLineCompositionRoot.Compose(contextHolder, stateSyncReg.enginesRoot, reloadGame, multiplayerParameters,
- stateSyncReg); - uREPL C# compilation not supported anymore */
- CommandManager.RegisterEngines(stateSyncReg.enginesRoot);
- }
-
- public static MethodBase TargetMethod()
- {
- return AccessTools.Method(typeof(MainGameCompositionRoot), "DeterministicTimeStoppedCompose").MakeGenericMethod(typeof(object));
- }
- }
-
- [HarmonyPatch]
- static class GameLoadedTimeRunningEnginePatch
- {
- public static void Postfix(StateSyncRegistrationHelper stateSyncReg)
- {
- GameEngineManager.RegisterEngines(stateSyncReg);
- CommandManager.RegisterEngines(stateSyncReg.enginesRoot);
- }
-
- public static MethodBase TargetMethod()
- {
- return AccessTools.Method(typeof(MainGameCompositionRoot), "DeterministicTimeRunningCompose").MakeGenericMethod(typeof(object));
- }
- }
-
- [HarmonyPatch]
- static class GameReloadedPatch
- {
- internal static bool IsReload;
- public static void Prefix() => IsReload = true;
- public static MethodBase TargetMethod() => AccessTools.Method(typeof(FullGameCompositionRoot), "ReloadGame");
- }
-
- [HarmonyPatch]
- static class GameSwitchedToPatch
- {
- public static void Prefix() => GameReloadedPatch.IsReload = false;
- public static MethodBase TargetMethod() => AccessTools.Method(typeof(FullGameCompositionRoot), "SwitchToGame");
- }
-
- [HarmonyPatch]
- static class MenuSwitchedToPatch
- {
- public static void Prefix() => GameReloadedPatch.IsReload = false;
- public static MethodBase TargetMethod() => AccessTools.Method(typeof(FullGameCompositionRoot), "SwitchToMenu");
- }
-
- [HarmonyPatch]
- class MenuLoadedEnginePatch
- {
- public static void Postfix(EnginesRoot enginesRoot)
- {
- // register menu engines
- MenuEngineManager.RegisterEngines(enginesRoot);
- }
-
- public static MethodBase TargetMethod()
- {
- return AccessTools.Method(typeof(FrontEndCompositionRoot), "Compose").MakeGenericMethod(typeof(object));
- }
- }
-
- [HarmonyPatch]
- class FullGameCreatedEnginePatch
- {
- public static void Postfix(FullGameCompositionRoot __instance)
- {
- FullGameFields.Init(__instance);
- }
-
- public static MethodBase TargetMethod()
- {
- return AccessTools.DeclaredConstructor(typeof(FullGameCompositionRoot));
- }
- }
- }
|