|
- using System.Reflection;
- using HarmonyLib;
- using RobocraftX;
- using RobocraftX.CR.MainGame;
- using RobocraftX.FrontEnd;
- using RobocraftX.StateSync;
- using Svelto.ECS;
- using TechbloxModdingAPI.Commands;
- using TechbloxModdingAPI.Utility;
- using GameState = TechbloxModdingAPI.Client.App.GameState;
-
- namespace TechbloxModdingAPI.Common.Engines
- {
- [HarmonyPatch]
- static class GameLoadedTimeStoppedEnginePatch
- {
- public static void Postfix(StateSyncRegistrationHelper stateSyncReg)
- {
- Client.App.GameClient.CurrentState = GameState.InMachineEditor; // TODO: World editor
- // register all game engines, including deterministic
- EngineManager.RegisterEngines(stateSyncReg, stateSyncReg.enginesRoot, ApiEngineType.Build);
- // register command engines
- 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)
- {
- Client.App.GameClient.CurrentState = GameState.InTestMode; // TODO: Client/server
- EngineManager.RegisterEngines(stateSyncReg, stateSyncReg.enginesRoot, ApiEngineType.PlayClient); // TODO: Client/server
- 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;
- Client.App.GameClient.CurrentState = GameState.Loading;
- }
-
- public static MethodBase TargetMethod() => AccessTools.Method(typeof(FullGameCompositionRoot), "ReloadGame");
- }
-
- [HarmonyPatch]
- static class GameSwitchedToPatch
- {
- public static void Prefix()
- {
- GameReloadedPatch.IsReload = false;
- Client.App.GameClient.CurrentState = GameState.Loading;
- }
-
- public static MethodBase TargetMethod() => AccessTools.Method(typeof(FullGameCompositionRoot), "SwitchToGame");
- }
-
- [HarmonyPatch]
- static class MenuSwitchedToPatch
- {
- public static void Prefix()
- {
- GameReloadedPatch.IsReload = false;
- Client.App.GameClient.CurrentState = GameState.Loading;
- }
-
- public static MethodBase TargetMethod() => AccessTools.Method(typeof(FullGameCompositionRoot), "SwitchToMenu");
- }
-
- [HarmonyPatch]
- class MenuLoadedEnginePatch
- {
- public static void Postfix(EnginesRoot enginesRoot)
- {
- Client.App.GameClient.CurrentState = GameState.InMenu; // TODO: Loaded states
- // register menu engines
- EngineManager.RegisterEngines(null, enginesRoot, ApiEngineType.Menu);
- }
-
- public static MethodBase TargetMethod()
- {
- return AccessTools.Method(typeof(FrontEndCompositionRoot), "Compose").MakeGenericMethod(typeof(object));
- }
- }
-
- [HarmonyPatch]
- class FullGameCreatedEnginePatch
- {
- public static void Postfix(FullGameCompositionRoot __instance)
- {
- Client.App.GameClient.CurrentState = GameState.Loading;
- FullGameFields.Init(__instance);
- }
-
- public static MethodBase TargetMethod()
- {
- return AccessTools.DeclaredConstructor(typeof(FullGameCompositionRoot));
- }
- }
- }
|