A stable modding interface between Techblox and mods https://mod.exmods.org/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

107 lines
6.8KB

  1. using System;
  2. using System.Reflection;
  3. using HarmonyLib;
  4. using Svelto.ECS;
  5. using RobocraftX.CR.MainGame;
  6. using RobocraftX.Multiplayer;
  7. using RobocraftX.StateSync;
  8. using TechbloxModdingAPI.Utility;
  9. namespace TechbloxModdingAPI.Commands
  10. {
  11. /// <summary>
  12. /// Patch of RobocraftX.CR.MainGame.MainGameCompositionRoot.DeterministicCompose<T>()
  13. /// Initializes existing and custom commands
  14. /// </summary>
  15. [HarmonyPatch]
  16. static class CommandPatch
  17. {
  18. public static void Postfix(Action reloadGame, MultiplayerInitParameters multiplayerParameters,
  19. StateSyncRegistrationHelper stateSyncReg)
  20. {
  21. /*CommandLineCompositionRoot.Compose(contextHolder, stateSyncReg.enginesRoot, reloadGame, multiplayerParameters,
  22. stateSyncReg); - uREPL C# compilation not supported anymore */
  23. var enginesRoot = stateSyncReg.enginesRoot;
  24. var entityFunctions = enginesRoot.GenerateEntityFunctions();
  25. var entityFactory = enginesRoot.GenerateEntityFactory();
  26. var entitySerializer = enginesRoot.GenerateEntitySerializer();
  27. Logging.MetaDebugLog("Adding existing command engines");
  28. enginesRoot.AddEngine((IEngine) Activator.CreateInstance(
  29. AccessTools.TypeByName("RobocraftX.GUI.CommandLine.ExecuteSetGravityCommandEngine")));
  30. enginesRoot.AddEngine((IEngine) Activator.CreateInstance(
  31. AccessTools.TypeByName("RobocraftX.GUI.CommandLine.ExecuteSetPhysicsPrecisionCommandEngine")));
  32. enginesRoot.AddEngine((IEngine) Activator.CreateInstance(
  33. AccessTools.TypeByName("RobocraftX.GUI.CommandLine.ExecuteSetPhysicsFrequencyCommandEngine")));
  34. enginesRoot.AddEngine((IEngine) Activator.CreateInstance(
  35. AccessTools.TypeByName(
  36. "RobocraftX.GUI.CommandLine.ExecuteClearAllPartsCommandEngine"),
  37. entityFunctions));
  38. enginesRoot.AddEngine((IEngine) Activator.CreateInstance(
  39. AccessTools.TypeByName("RobocraftX.GUI.CommandLine.ExecuteHelpCommandEngine")));
  40. enginesRoot.AddEngine((IEngine) Activator.CreateInstance(
  41. AccessTools.TypeByName(
  42. "RobocraftX.GUI.CommandLine.ExecuteSetLinearRestingThresholdCommandEngine")));
  43. enginesRoot.AddEngine((IEngine) Activator.CreateInstance(
  44. AccessTools.TypeByName(
  45. "RobocraftX.GUI.CommandLine.ExecuteSetAngularRestingThresholdCommandEngine")));
  46. enginesRoot.AddEngine((IEngine) Activator.CreateInstance(
  47. AccessTools.TypeByName("RobocraftX.GUI.CommandLine.ExecuteEnableVisualProfilerCommandEngine")));
  48. enginesRoot.AddEngine((IEngine) Activator.CreateInstance(
  49. AccessTools.TypeByName("RobocraftX.GUI.CommandLine.ExecuteSetNetworkJitterFramesEngine")));
  50. enginesRoot.AddEngine((IEngine) Activator.CreateInstance(
  51. AccessTools.TypeByName("RobocraftX.GUI.CommandLine.ExecuteSetSendConnectedEntitiesCommandEngine")));
  52. enginesRoot.AddEngine((IEngine) Activator.CreateInstance(
  53. AccessTools.TypeByName("RobocraftX.GUI.CommandLine.ExecuteSetMaxSimFramesEngine")));
  54. enginesRoot.AddEngine((IEngine) Activator.CreateInstance(
  55. AccessTools.TypeByName("RobocraftX.GUI.CommandLine.SetDebugDisplayExtraInfoCommandEngine")));
  56. enginesRoot.AddEngine((IEngine) Activator.CreateInstance(
  57. AccessTools.TypeByName("RobocraftX.GUI.CommandLine.SetNetSyncBandwidthLimitCommandEngine")));
  58. enginesRoot.AddEngine((IEngine) Activator.CreateInstance(
  59. AccessTools.TypeByName("RobocraftX.GUI.CommandLine.ThrowExceptionCommandEngine")));
  60. enginesRoot.AddEngine((IEngine) Activator.CreateInstance(
  61. AccessTools.TypeByName("RobocraftX.GUI.CommandLine.SetPriorityCommandEngine")));
  62. enginesRoot.AddEngine((IEngine) Activator.CreateInstance(
  63. AccessTools.TypeByName("RobocraftX.GUI.CommandLine.TeleportCharacterCommandEngine"),
  64. entityFactory));
  65. enginesRoot.AddEngine((IEngine) Activator.CreateInstance(
  66. AccessTools.TypeByName("RobocraftX.GUI.CommandLine.ChangeTextBlockTextCommandEngine")));
  67. enginesRoot.AddEngine((IEngine) Activator.CreateInstance(
  68. AccessTools.TypeByName("RobocraftX.GUI.CommandLine.SetCharacterRunSpeedCommandEngine")));
  69. enginesRoot.AddEngine((IEngine) Activator.CreateInstance(
  70. AccessTools.TypeByName("RobocraftX.GUI.CommandLine.SetCameraZoomDistanceCommandEngine")));
  71. enginesRoot.AddEngine((IEngine) Activator.CreateInstance(
  72. AccessTools.TypeByName("RobocraftX.GUI.CommandLine.EditLightingSettingsCommandEngine")));
  73. enginesRoot.AddEngine((IEngine) Activator.CreateInstance(
  74. AccessTools.TypeByName("RobocraftX.GUI.CommandLine.EditSkySettingsCommandEngine")));
  75. enginesRoot.AddEngine((IEngine) Activator.CreateInstance(
  76. AccessTools.TypeByName("RobocraftX.GUI.CommandLine.EditFogSettingsCommandEngine")));
  77. enginesRoot.AddEngine((IEngine) Activator.CreateInstance(
  78. AccessTools.TypeByName("RobocraftX.GUI.CommandLine.TeleportCharacterImplementationEngine"),
  79. entityFunctions));
  80. enginesRoot.AddEngine((IEngine) Activator.CreateInstance(
  81. AccessTools.TypeByName("RobocraftX.GUI.CommandLine.ExecuteConnectToServerCommandEngine"),
  82. entityFunctions, entitySerializer, reloadGame, multiplayerParameters));
  83. enginesRoot.AddEngine((IEngine) Activator.CreateInstance(
  84. AccessTools.TypeByName("RobocraftX.GUI.CommandLine.SetInputBroadcastCommandEngine")));
  85. enginesRoot.AddEngine((IEngine) Activator.CreateInstance(
  86. AccessTools.TypeByName("RobocraftX.GUI.CommandLine.ExecuteSetJointInertiaTensorCommandEngine")));
  87. enginesRoot.AddEngine(
  88. (IEngine) Activator.CreateInstance(
  89. AccessTools.TypeByName("RobocraftX.GUI.CommandLine.ChangeTeamCommandEngine")));
  90. enginesRoot.AddEngine((IEngine) Activator.CreateInstance(
  91. AccessTools.TypeByName("RobocraftX.GUI.CommandLine.DamageCharacterCommandEngine"), entityFactory));
  92. enginesRoot.AddEngine((IEngine) Activator.CreateInstance(
  93. AccessTools.TypeByName("RobocraftX.GUI.CommandLine.DisableCharacterDamageCommandEngine")));
  94. Logging.MetaDebugLog("Existing command engines added");
  95. CommandManager.RegisterEngines(enginesRoot);
  96. }
  97. public static MethodInfo TargetMethod()
  98. {
  99. return AccessTools.Method(typeof(MainGameCompositionRoot), "DeterministicCompose")
  100. .MakeGenericMethod(typeof(object));
  101. }
  102. }
  103. }