Implement actual excavator mining area multiplier

This commit is contained in:
2024-10-19 22:24:34 +02:00
parent b786897b9f
commit a95bf892ab
2 changed files with 23 additions and 9 deletions

View File

@@ -17,7 +17,8 @@ namespace CykaOfIndustry {
public static ConfigEntry<float> excavatorMineTileIterationsMultiplier; public static ConfigEntry<float> excavatorMineTileIterationsMultiplier;
public static ConfigEntry<int> truckCapacityMultiplier; public static ConfigEntry<int> truckCapacityMultiplier;
public static ConfigEntry<int> cargoShipCapacityMultiplier; public static ConfigEntry<int> cargoShipCapacityMultiplier;
public static ConfigEntry<float> excavatorMiningAreaMultiplier; public static ConfigEntry<float> excavatorMiningCapacityMultiplier;
public static ConfigEntry<int> excavatorMiningAreaMultiplier;
public static ConfigEntry<float> excavatorMinReachMultiplier; public static ConfigEntry<float> excavatorMinReachMultiplier;
public static ConfigEntry<float> excavatorMaxReachMultiplier; public static ConfigEntry<float> excavatorMaxReachMultiplier;
public static ConfigEntry<float> bufferCapacityMultiplier; public static ConfigEntry<float> bufferCapacityMultiplier;
@@ -29,6 +30,7 @@ namespace CykaOfIndustry {
public static ConfigEntry<float> transportSpeedMultiplier; public static ConfigEntry<float> transportSpeedMultiplier;
public static ConfigEntry<float> shipyardCargoMultiplier; public static ConfigEntry<float> shipyardCargoMultiplier;
public static ConfigEntry<int> autosaveInterval; public static ConfigEntry<int> autosaveInterval;
public static ConfigEntry<bool> debugMode; public static ConfigEntry<bool> debugMode;
public void Awake() { public void Awake() {
@@ -41,8 +43,10 @@ namespace CykaOfIndustry {
new ConfigDescription("Truck Capacity Multiplier")); new ConfigDescription("Truck Capacity Multiplier"));
cargoShipCapacityMultiplier = Config.Bind("General", "Cargo Ship Capacity Multiplier", 1, cargoShipCapacityMultiplier = Config.Bind("General", "Cargo Ship Capacity Multiplier", 1,
new ConfigDescription("Cargo Ship Capacity Multiplier")); new ConfigDescription("Cargo Ship Capacity Multiplier"));
excavatorMiningAreaMultiplier = Config.Bind("General", "Excavator Mining Area Multiplier", 1f, excavatorMiningAreaMultiplier = Config.Bind("General", "Excavator Mining Area Multiplier", 1,
new ConfigDescription("Excavator Mining Area Multiplier")); new ConfigDescription("Excavator Mining Area Multiplier"));
excavatorMiningCapacityMultiplier = Config.Bind("General", "Excavator Mining Capacity Multiplier", 1f,
new ConfigDescription("Excavator Mining Capacity Multiplier"));
excavatorMinReachMultiplier = Config.Bind("General", "Excavator Min Reach Multiplier", 1f, excavatorMinReachMultiplier = Config.Bind("General", "Excavator Min Reach Multiplier", 1f,
new ConfigDescription("Excavator Min Reach Multiplier")); new ConfigDescription("Excavator Min Reach Multiplier"));
excavatorMaxReachMultiplier = Config.Bind("General", "Excavator Max Reach Multiplier", 1f, excavatorMaxReachMultiplier = Config.Bind("General", "Excavator Max Reach Multiplier", 1f,
@@ -67,6 +71,7 @@ namespace CykaOfIndustry {
new ConfigDescription("Shipyard Cargo Multiplier")); new ConfigDescription("Shipyard Cargo Multiplier"));
autosaveInterval = Config.Bind("General", "Autosave Interval", 1, autosaveInterval = Config.Bind("General", "Autosave Interval", 1,
new ConfigDescription("Autosave Interval in minutes")); new ConfigDescription("Autosave Interval in minutes"));
debugMode = Config.Bind("General", "Debug Mode", false, new ConfigDescription("Debug Mode")); debugMode = Config.Bind("General", "Debug Mode", false, new ConfigDescription("Debug Mode"));
// shootingSpeedMultiplier.SettingChanged += (sender, args) => WeaponPropertiesManager.DoPatch(); // shootingSpeedMultiplier.SettingChanged += (sender, args) => WeaponPropertiesManager.DoPatch();

View File

@@ -45,7 +45,7 @@ namespace CykaOfIndustry {
for (int i = 0; i < thicknessMeters.Length; i++) { for (int i = 0; i < thicknessMeters.Length; i++) {
if (Main.debugMode.Value) if (Main.debugMode.Value)
Console.WriteLine("IndustrialCyka: Old mining area {0}", thicknessMeters[i]); Console.WriteLine("IndustrialCyka: Old mining area {0}", thicknessMeters[i]);
thicknessMeters[i] *= Main.excavatorMiningAreaMultiplier.Value; thicknessMeters[i] *= Main.excavatorMiningCapacityMultiplier.Value;
if (Main.debugMode.Value) if (Main.debugMode.Value)
Console.WriteLine("IndustrialCyka: New mining area {0}", thicknessMeters[i]); Console.WriteLine("IndustrialCyka: New mining area {0}", thicknessMeters[i]);
} }
@@ -505,6 +505,7 @@ namespace CykaOfIndustry {
Traverse.Create(__instance).Field("CargoCapacity").SetValue(new Quantity( Traverse.Create(__instance).Field("CargoCapacity").SetValue(new Quantity(
(int)(__instance.CargoCapacity.Value * Main.shipyardCargoMultiplier.Value))); (int)(__instance.CargoCapacity.Value * Main.shipyardCargoMultiplier.Value)));
} }
[HarmonyPostfix] [HarmonyPostfix]
[HarmonyPatch(typeof(SaveManager), "isTimeForAutoSave")] [HarmonyPatch(typeof(SaveManager), "isTimeForAutoSave")]
static void autosaveInterval(ref bool __result, SaveManager __instance) { static void autosaveInterval(ref bool __result, SaveManager __instance) {
@@ -524,7 +525,8 @@ namespace CykaOfIndustry {
[HarmonyPatch(typeof(Excavator), "MineMixedAt")] [HarmonyPatch(typeof(Excavator), "MineMixedAt")]
public class MineMixedAtPatch { public class MineMixedAtPatch {
public static Dictionary<ExcavatorProto, Quantity> originalCapacity = new Dictionary<ExcavatorProto, Quantity>(); public static Dictionary<ExcavatorProto, Quantity>
originalCapacity = new Dictionary<ExcavatorProto, Quantity>();
public static Dictionary<ExcavatorProto, ImmutableArray<ThicknessTilesF>> originalMinedThicknessByDistance = public static Dictionary<ExcavatorProto, ImmutableArray<ThicknessTilesF>> originalMinedThicknessByDistance =
new Dictionary<ExcavatorProto, ImmutableArray<ThicknessTilesF>>(); new Dictionary<ExcavatorProto, ImmutableArray<ThicknessTilesF>>();
@@ -542,7 +544,8 @@ namespace CykaOfIndustry {
var trav = Traverse.Create(__instance.Prototype); var trav = Traverse.Create(__instance.Prototype);
trav.Field("Capacity") trav.Field("Capacity")
.SetValue(new Quantity(originalCapacity[__instance.Prototype].Value * Main.excavatorCapacityMultiplier.Value)); .SetValue(new Quantity(originalCapacity[__instance.Prototype].Value *
Main.excavatorCapacityMultiplier.Value));
if (Main.debugMode.Value) if (Main.debugMode.Value)
Console.WriteLine("IndustrialCyka: Excavator capacity: {0}", __instance.Prototype.Capacity.Value); Console.WriteLine("IndustrialCyka: Excavator capacity: {0}", __instance.Prototype.Capacity.Value);
@@ -552,16 +555,22 @@ namespace CykaOfIndustry {
} }
trav.Field("MinedThicknessByDistance") trav.Field("MinedThicknessByDistance")
.SetValue(originalMinedThicknessByDistance[__instance.Prototype].Select(t => .SetValue(originalMinedThicknessByDistance[__instance.Prototype]
new ThicknessTilesF((int)(t.Value.ToFloat() * Main.excavatorMiningAreaMultiplier.Value))) .SelectMany(t => Enumerable.Repeat(t, Main.excavatorMiningAreaMultiplier.Value))
.Select(t =>
new ThicknessTilesF((int)(t.Value.ToFloat() * Main.excavatorMiningCapacityMultiplier.Value)))
.ToImmutableArray()); .ToImmutableArray());
if (Main.debugMode.Value)
originalMinedThicknessByDistance[__instance.Prototype].ForEach(t => Console.WriteLine(t.Value));
if (Main.debugMode.Value) if (Main.debugMode.Value)
Console.WriteLine("IndustrialCyka: Excavator mined thickness: {0}", Console.WriteLine("IndustrialCyka: Excavator mined thickness: {0}",
__instance.Prototype.MinedThicknessByDistance); __instance.Prototype.MinedThicknessByDistance);
if (!originalMaxMiningDistance.ContainsKey(__instance.Prototype)) { if (!originalMaxMiningDistance.ContainsKey(__instance.Prototype)) {
originalMaxMiningDistance.Add(__instance.Prototype, trav.Field("MaxMiningDistance").GetValue<RelTile1i>()); originalMaxMiningDistance.Add(__instance.Prototype,
trav.Field("MaxMiningDistance").GetValue<RelTile1i>());
} }
var value = originalMaxMiningDistance[__instance.Prototype]; var value = originalMaxMiningDistance[__instance.Prototype];
var newValueMiningDistance = new RelTile1i((int)(value.Value * Main.excavatorMaxReachMultiplier.Value)); var newValueMiningDistance = new RelTile1i((int)(value.Value * Main.excavatorMaxReachMultiplier.Value));
trav.Field("MaxMiningDistance") trav.Field("MaxMiningDistance")