using System; using System.Reflection; using HarmonyLib; using Svelto.ECS; using RobocraftX.CR.MainGame; using RobocraftX.Multiplayer; using RobocraftX.StateSync; using TechbloxModdingAPI.Utility; namespace TechbloxModdingAPI.Commands { /// /// Patch of RobocraftX.CR.MainGame.MainGameCompositionRoot.DeterministicCompose() /// Initializes existing and custom commands /// [HarmonyPatch] static class CommandPatch { public static void Postfix(Action reloadGame, MultiplayerInitParameters multiplayerParameters, StateSyncRegistrationHelper stateSyncReg) { /*CommandLineCompositionRoot.Compose(contextHolder, stateSyncReg.enginesRoot, reloadGame, multiplayerParameters, stateSyncReg); - uREPL C# compilation not supported anymore */ var enginesRoot = stateSyncReg.enginesRoot; var entityFunctions = enginesRoot.GenerateEntityFunctions(); var entityFactory = enginesRoot.GenerateEntityFactory(); var entitySerializer = enginesRoot.GenerateEntitySerializer(); Logging.MetaDebugLog("Adding existing command engines"); enginesRoot.AddEngine((IEngine) Activator.CreateInstance( AccessTools.TypeByName("RobocraftX.GUI.CommandLine.ExecuteSetGravityCommandEngine"))); enginesRoot.AddEngine((IEngine) Activator.CreateInstance( AccessTools.TypeByName("RobocraftX.GUI.CommandLine.ExecuteSetPhysicsPrecisionCommandEngine"))); enginesRoot.AddEngine((IEngine) Activator.CreateInstance( AccessTools.TypeByName("RobocraftX.GUI.CommandLine.ExecuteSetPhysicsFrequencyCommandEngine"))); enginesRoot.AddEngine((IEngine) Activator.CreateInstance( AccessTools.TypeByName( "RobocraftX.GUI.CommandLine.ExecuteClearAllPartsCommandEngine"), entityFunctions)); enginesRoot.AddEngine((IEngine) Activator.CreateInstance( AccessTools.TypeByName("RobocraftX.GUI.CommandLine.ExecuteHelpCommandEngine"))); enginesRoot.AddEngine((IEngine) Activator.CreateInstance( AccessTools.TypeByName( "RobocraftX.GUI.CommandLine.ExecuteSetLinearRestingThresholdCommandEngine"))); enginesRoot.AddEngine((IEngine) Activator.CreateInstance( AccessTools.TypeByName( "RobocraftX.GUI.CommandLine.ExecuteSetAngularRestingThresholdCommandEngine"))); enginesRoot.AddEngine((IEngine) Activator.CreateInstance( AccessTools.TypeByName("RobocraftX.GUI.CommandLine.ExecuteEnableVisualProfilerCommandEngine"))); enginesRoot.AddEngine((IEngine) Activator.CreateInstance( AccessTools.TypeByName("RobocraftX.GUI.CommandLine.ExecuteSetNetworkJitterFramesEngine"))); enginesRoot.AddEngine((IEngine) Activator.CreateInstance( AccessTools.TypeByName("RobocraftX.GUI.CommandLine.ExecuteSetSendConnectedEntitiesCommandEngine"))); enginesRoot.AddEngine((IEngine) Activator.CreateInstance( AccessTools.TypeByName("RobocraftX.GUI.CommandLine.ExecuteSetMaxSimFramesEngine"))); enginesRoot.AddEngine((IEngine) Activator.CreateInstance( AccessTools.TypeByName("RobocraftX.GUI.CommandLine.SetDebugDisplayExtraInfoCommandEngine"))); enginesRoot.AddEngine((IEngine) Activator.CreateInstance( AccessTools.TypeByName("RobocraftX.GUI.CommandLine.SetNetSyncBandwidthLimitCommandEngine"))); enginesRoot.AddEngine((IEngine) Activator.CreateInstance( AccessTools.TypeByName("RobocraftX.GUI.CommandLine.ThrowExceptionCommandEngine"))); enginesRoot.AddEngine((IEngine) Activator.CreateInstance( AccessTools.TypeByName("RobocraftX.GUI.CommandLine.SetPriorityCommandEngine"))); enginesRoot.AddEngine((IEngine) Activator.CreateInstance( AccessTools.TypeByName("RobocraftX.GUI.CommandLine.TeleportCharacterCommandEngine"), entityFactory)); enginesRoot.AddEngine((IEngine) Activator.CreateInstance( AccessTools.TypeByName("RobocraftX.GUI.CommandLine.ChangeTextBlockTextCommandEngine"))); enginesRoot.AddEngine((IEngine) Activator.CreateInstance( AccessTools.TypeByName("RobocraftX.GUI.CommandLine.SetCharacterRunSpeedCommandEngine"))); enginesRoot.AddEngine((IEngine) Activator.CreateInstance( AccessTools.TypeByName("RobocraftX.GUI.CommandLine.SetCameraZoomDistanceCommandEngine"))); enginesRoot.AddEngine((IEngine) Activator.CreateInstance( AccessTools.TypeByName("RobocraftX.GUI.CommandLine.EditLightingSettingsCommandEngine"))); enginesRoot.AddEngine((IEngine) Activator.CreateInstance( AccessTools.TypeByName("RobocraftX.GUI.CommandLine.EditSkySettingsCommandEngine"))); enginesRoot.AddEngine((IEngine) Activator.CreateInstance( AccessTools.TypeByName("RobocraftX.GUI.CommandLine.EditFogSettingsCommandEngine"))); enginesRoot.AddEngine((IEngine) Activator.CreateInstance( AccessTools.TypeByName("RobocraftX.GUI.CommandLine.TeleportCharacterImplementationEngine"), entityFunctions)); enginesRoot.AddEngine((IEngine) Activator.CreateInstance( AccessTools.TypeByName("RobocraftX.GUI.CommandLine.ExecuteConnectToServerCommandEngine"), entityFunctions, entitySerializer, reloadGame, multiplayerParameters)); enginesRoot.AddEngine((IEngine) Activator.CreateInstance( AccessTools.TypeByName("RobocraftX.GUI.CommandLine.SetInputBroadcastCommandEngine"))); enginesRoot.AddEngine((IEngine) Activator.CreateInstance( AccessTools.TypeByName("RobocraftX.GUI.CommandLine.ExecuteSetJointInertiaTensorCommandEngine"))); enginesRoot.AddEngine( (IEngine) Activator.CreateInstance( AccessTools.TypeByName("RobocraftX.GUI.CommandLine.ChangeTeamCommandEngine"))); enginesRoot.AddEngine((IEngine) Activator.CreateInstance( AccessTools.TypeByName("RobocraftX.GUI.CommandLine.DamageCharacterCommandEngine"), entityFactory)); enginesRoot.AddEngine((IEngine) Activator.CreateInstance( AccessTools.TypeByName("RobocraftX.GUI.CommandLine.DisableCharacterDamageCommandEngine"))); Logging.MetaDebugLog("Existing command engines added"); CommandManager.RegisterEngines(enginesRoot); } public static MethodInfo TargetMethod() { return AccessTools.Method(typeof(MainGameCompositionRoot), "DeterministicCompose") .MakeGenericMethod(typeof(object)); } } }