From d173d23343c5afa73e97278cbb41c5e294b4d51a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Majdand=C5=BEi=C4=87?= Date: Fri, 19 Apr 2024 11:24:53 +0200 Subject: [PATCH] Add excavator range patches --- .../CaptainOfIndustry/Class1.cs | 4 ++ .../CaptainOfIndustry/Patches.cs | 46 +++++++++++++++---- 2 files changed, 40 insertions(+), 10 deletions(-) diff --git a/Projects/CaptainOfIndustry/CaptainOfIndustry/Class1.cs b/Projects/CaptainOfIndustry/CaptainOfIndustry/Class1.cs index 6be68f6..7b8c5a1 100644 --- a/Projects/CaptainOfIndustry/CaptainOfIndustry/Class1.cs +++ b/Projects/CaptainOfIndustry/CaptainOfIndustry/Class1.cs @@ -17,6 +17,8 @@ namespace CaptainOfIndustry { public static ConfigEntry truckCapacityMultiplier; public static ConfigEntry cargoShipCapacityMultiplier; public static ConfigEntry excavatorMiningAreaMultiplier; + public static ConfigEntry excavatorMinReachMultiplier; + public static ConfigEntry excavatorMaxReachMultiplier; public static ConfigEntry bufferCapacityMultiplier; public static ConfigEntry unityGenerationMultiplier; public static ConfigEntry depotTransferSpeedMultiplier; @@ -28,6 +30,8 @@ namespace CaptainOfIndustry { truckCapacityMultiplier = Config.Bind("General", "Truck Capacity Multiplier", 1, new ConfigDescription("Truck Capacity Multiplier")); cargoShipCapacityMultiplier = Config.Bind("General", "Cargo Ship Capacity Multiplier", 1, new ConfigDescription("Cargo Ship Capacity Multiplier")); excavatorMiningAreaMultiplier = Config.Bind("General", "Excavator Mining Area Multiplier", 1f, new ConfigDescription("Excavator Mining Area Multiplier")); + excavatorMinReachMultiplier = Config.Bind("General", "Excavator Min Reach Multiplier", 1f, new ConfigDescription("Excavator Min Reach Multiplier")); + excavatorMaxReachMultiplier = Config.Bind("General", "Excavator Max Reach Multiplier", 1f, new ConfigDescription("Excavator Max Reach Multiplier")); bufferCapacityMultiplier = Config.Bind("General", "Buffer Capacity Multiplier", 1f, new ConfigDescription("Buffer Capacity Multiplier")); storageCapacityMultiplier = Config.Bind("General", "Storage Capacity Multiplier", 1f, new ConfigDescription("Storage Capacity Multiplier")); unityGenerationMultiplier = Config.Bind("General", "Unity Generation Multiplier", 1f, new ConfigDescription("Unity Generation Multiplier")); diff --git a/Projects/CaptainOfIndustry/CaptainOfIndustry/Patches.cs b/Projects/CaptainOfIndustry/CaptainOfIndustry/Patches.cs index 64b26e1..1ca461d 100644 --- a/Projects/CaptainOfIndustry/CaptainOfIndustry/Patches.cs +++ b/Projects/CaptainOfIndustry/CaptainOfIndustry/Patches.cs @@ -31,6 +31,42 @@ namespace CaptainOfIndustry { // Console.WriteLine("IndustrialCyka: Old excavator capacity: {0}", quantity); } + [HarmonyPrefix] + [HarmonyPatch(typeof(ExcavatorProtoBuilder.ExcavatorProtoBuilderState), "SetMinedThicknessByDistanceMeters")] + static void excavatorMiningAreaMultiplier(ref float[] thicknessMeters) { + for (int i = 0; i < thicknessMeters.Length; i++) { +// Console.WriteLine("IndustrialCyka: Old mining area: {0}", thicknessMeters[i]); + thicknessMeters[i] *= Main.excavatorMiningAreaMultiplier.Value; +// Console.WriteLine("IndustrialCyka: New mining area: {0}", thicknessMeters[i]); + } + } + + [HarmonyPrefix] + [HarmonyPatch(typeof(ExcavatorProtoBuilder.ExcavatorProtoBuilderState), "SetMaxMiningDistance")] + static void excavatorReachMultiplier(ref RelTile1i minMiningDistance, ref RelTile1i maxMiningDistance) { + Console.WriteLine("Min distance: {0}, max distance: {1}", minMiningDistance, maxMiningDistance); + minMiningDistance = new RelTile1i((int)(minMiningDistance.Value * Main.excavatorMinReachMultiplier.Value)); + maxMiningDistance = new RelTile1i((int)(maxMiningDistance.Value * Main.excavatorMaxReachMultiplier.Value)); + Console.WriteLine("Min distance: {0}, max distance: {1}", minMiningDistance, maxMiningDistance); + } + + static void excavatorPatch(WorldMapMineProto __instance) { + Traverse traverse = Traverse.Create(__instance); + + // int level = traverse.Field("Level").GetValue(); + int maxLevel = traverse.Field("MaxLevel").GetValue(); + // int levelsPerUpgrade = traverse.Field("LevelsPerUpgrade").GetValue(); + + int newLevelsPerUpgrade = 10; + int newMaxLevel = (int)Math.Ceiling((double)maxLevel / newLevelsPerUpgrade) * newLevelsPerUpgrade; + + // Console.WriteLine("Level: {0}, MaxLevel: {1}, LevelsPerUpgrade: {2}", level, maxLevel, levelsPerUpgrade); + // Console.WriteLine("NewMaxLevel: {0}", newMaxLevel); + + traverse.Field("MaxLevel").SetValue(newMaxLevel); + traverse.Field("LevelsPerUpgrade").SetValue(newLevelsPerUpgrade); + } + [HarmonyPrefix] [HarmonyPatch(typeof(TruckProtoBuilder.TruckProtoBuilderState), "SetCapacity")] static void truckCapacityMultiplier(ref int quantity) { @@ -59,16 +95,6 @@ namespace CaptainOfIndustry { // Console.WriteLine("IndustrialCyka: New ship capacity: {0}", __instance.Capacity.Value); } - [HarmonyPrefix] - [HarmonyPatch(typeof(ExcavatorProtoBuilder.ExcavatorProtoBuilderState), "SetMinedThicknessByDistanceMeters")] - static void excavatorMiningAreaMultiplier(ref float[] thicknessMeters) { - for (int i = 0; i < thicknessMeters.Length; i++) { -// Console.WriteLine("IndustrialCyka: Old mining area: {0}", thicknessMeters[i]); - thicknessMeters[i] *= Main.excavatorMiningAreaMultiplier.Value; -// Console.WriteLine("IndustrialCyka: New mining area: {0}", thicknessMeters[i]); - } - } - // No workey... idk how it's supposed to work, speed is always 1 or 100% // [HarmonyPrefix] // [HarmonyPatch(typeof(DrivingEntity), "SetSpeedFactor")]