diff --git a/Projects/TerraTech/TerraTech/Class1.cs b/Projects/TerraTech/TerraTech/Class1.cs index 0e9ba2a..727e754 100644 --- a/Projects/TerraTech/TerraTech/Class1.cs +++ b/Projects/TerraTech/TerraTech/Class1.cs @@ -1,6 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; +using System.Linq; using BepInEx; using BepInEx.Configuration; using HarmonyLib; @@ -45,6 +43,7 @@ namespace TerraTech { ModuleWeaponManager.Setup(Config); ModuleHeartManager.Setup(Config); ModuleFuelTankManager.Setup(Config); + TankManager.Setup(Config); xpMultiplier = Config.Bind("General", "XP Multiplier", 1f, diff --git a/Projects/TerraTech/TerraTech/TankManager.cs b/Projects/TerraTech/TerraTech/TankManager.cs new file mode 100644 index 0000000..620a677 --- /dev/null +++ b/Projects/TerraTech/TerraTech/TankManager.cs @@ -0,0 +1,53 @@ +using System; +using System.Collections.Generic; +using BepInEx.Configuration; +using HarmonyLib; +using UnityEngine; + +namespace TerraTech { + [HarmonyPatch] + public class TankManager { + public static ConfigEntry recheck; + public static Dictionary> moduleManagerMapper = + new Dictionary>(); + + public static void Setup(ConfigFile config) { + recheck = config.Bind("Tank", "Recheck", false, new ConfigDescription("Recheck")); + moduleManagerMapper.Add(typeof(ModuleBooster), ModuleBoosterManager.Register); + moduleManagerMapper.Add(typeof(ModuleEnergy), ModuleEnergyManager.Register); + moduleManagerMapper.Add(typeof(ModuleEnergyStore), ModuleEnergyStoreManager.Register); + moduleManagerMapper.Add(typeof(ModuleFuelTank), ModuleFuelTankManager.Register); + moduleManagerMapper.Add(typeof(ModuleGyro), ModuleGyroManager.Register); + moduleManagerMapper.Add(typeof(ModuleHeart), ModuleHeartManager.Register); + moduleManagerMapper.Add(typeof(ModuleItemHolder), ModuleItemHolderManager.Register); + moduleManagerMapper.Add(typeof(ModuleItemProducer), ModuleItemProducerManager.Register); + moduleManagerMapper.Add(typeof(ModuleRemoteCharger), ModuleRemoteChargerManager.Register); + moduleManagerMapper.Add(typeof(ModuleShieldGenerator), ModuleShieldGeneratorManager.Register); + moduleManagerMapper.Add(typeof(ModuleWeaponGun), ModuleWeaponGunManager.Register); + moduleManagerMapper.Add(typeof(ModuleWeapon), ModuleWeaponManager.Register); + moduleManagerMapper.Add(typeof(ModuleWheels), ModuleWheelsManager.Register); + moduleManagerMapper.Add(typeof(ModuleWing), ModuleWingManager.Register); + } + + [HarmonyPrefix] + [HarmonyPatch(typeof(Tank), "NotifyAnchor")] + public static void PostfixCreate(Tank __instance, ModuleAnchor anchor, bool anchored) { + if (Main.debug.Value) + Console.WriteLine("TankManager.NotifyAnchor: {0}", __instance); + if (!__instance.ControllableByLocalPlayer) + return; + if (!recheck.Value) + return; + + foreach (Transform child in __instance.transform) { + GameObject childObj = child.gameObject; + Component[] components = childObj.GetComponents(); + foreach (Component component in components) { + Func manager; + if (moduleManagerMapper.TryGetValue(component.GetType(), out manager)) + manager(component as Module); + } + } + } + } +} diff --git a/Projects/TerraTech/TerraTech/TerraTech.csproj b/Projects/TerraTech/TerraTech/TerraTech.csproj index 29556f0..b97f258 100644 --- a/Projects/TerraTech/TerraTech/TerraTech.csproj +++ b/Projects/TerraTech/TerraTech/TerraTech.csproj @@ -59,6 +59,7 @@ +