|
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Reflection;
- using System.Text;
- using System.Threading.Tasks;
-
- using HarmonyLib;
- using RobocraftX;
- using Svelto.ECS;
-
- using GamecraftModdingAPI.Utility;
- using RobocraftX.CR.MainGame;
-
- namespace GamecraftModdingAPI.Events
- {
- /// <summary>
- /// Patch of RobocraftX.FullGameCompositionRoot.ActivateGame()
- /// </summary>
- [HarmonyPatch]
- class GameActivatedComposePatch
- {
- public static bool IsGameSwitching = false;
-
- public static bool IsGameReloading = false;
-
- public static void Postfix(ref object contextHolder, ref EnginesRoot enginesRoot)
- {
- // register custom game engines
- GameEngineManager.RegisterEngines(enginesRoot);
- // initialize AsyncUtils
- AsyncUtils.Setup(enginesRoot);
- // A new EnginesRoot is always created when ActivateGame is called
- // so all event emitters and handlers must be re-registered.
- EventManager.RegisterEngines(enginesRoot);
- Logging.Log("Dispatching Game Activated event");
- EventManager.GetEventEmitter("GamecraftModdingAPIGameActivatedEventEmitter").Emit();
- if (IsGameSwitching)
- {
- IsGameSwitching = false;
- Logging.Log("Dispatching Game Switched To event");
- EventManager.GetEventEmitter("GamecraftModdingAPIGameSwitchedToEventEmitter").Emit();
- }
- if (IsGameReloading)
- {
- IsGameReloading = false;
- Logging.Log("Dispatching Game Reloaded event");
- EventManager.GetEventEmitter("GamecraftModdingAPIGameReloadedEventEmitter").Emit();
- }
- }
-
- public static MethodBase TargetMethod()
- {
- return typeof(MainGameCompositionRoot).GetMethods().First(m => m.Name == "Compose")
- .MakeGenericMethod(typeof(object));
- }
- }
- }
|