Fix patch for mining distance

This commit is contained in:
2024-10-19 14:58:40 +02:00
parent d0b0a45f3a
commit fcf24a7cbe

View File

@@ -508,38 +508,52 @@ namespace CykaOfIndustry {
[HarmonyPatch(typeof(Excavator), "MineMixedAt")] [HarmonyPatch(typeof(Excavator), "MineMixedAt")]
public class MineMixedAtPatch { public class MineMixedAtPatch {
public static Dictionary<Excavator, Quantity> originalCapacity = new Dictionary<Excavator, Quantity>(); public static Dictionary<ExcavatorProto, Quantity> originalCapacity = new Dictionary<ExcavatorProto, Quantity>();
public static Dictionary<Excavator, ImmutableArray<ThicknessTilesF>> originalMinedThicknessByDistance = public static Dictionary<ExcavatorProto, ImmutableArray<ThicknessTilesF>> originalMinedThicknessByDistance =
new Dictionary<Excavator, ImmutableArray<ThicknessTilesF>>(); new Dictionary<ExcavatorProto, ImmutableArray<ThicknessTilesF>>();
public static Dictionary<ExcavatorProto.Timings, int> originalMineTileIterations = public static Dictionary<ExcavatorProto.Timings, int> originalMineTileIterations =
new Dictionary<ExcavatorProto.Timings, int>(); new Dictionary<ExcavatorProto.Timings, int>();
public static Dictionary<ExcavatorProto, RelTile1i> originalMaxMiningDistance =
new Dictionary<ExcavatorProto, RelTile1i>();
static void Prefix(ref Excavator __instance) { static void Prefix(ref Excavator __instance) {
if (!originalCapacity.ContainsKey(__instance)) { if (!originalCapacity.ContainsKey(__instance.Prototype)) {
originalCapacity.Add(__instance, __instance.Prototype.Capacity); originalCapacity.Add(__instance.Prototype, __instance.Prototype.Capacity);
} }
var trav = Traverse.Create(__instance.Prototype); var trav = Traverse.Create(__instance.Prototype);
trav.Field("Capacity") trav.Field("Capacity")
.SetValue(new Quantity(originalCapacity[__instance].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);
if (!originalMinedThicknessByDistance.ContainsKey(__instance)) { if (!originalMinedThicknessByDistance.ContainsKey(__instance.Prototype)) {
originalMinedThicknessByDistance.Add(__instance, originalMinedThicknessByDistance.Add(__instance.Prototype,
trav.Field("MinedThicknessByDistance").GetValue<ImmutableArray<ThicknessTilesF>>()); trav.Field("MinedThicknessByDistance").GetValue<ImmutableArray<ThicknessTilesF>>());
} }
trav.Field("MinedThicknessByDistance") trav.Field("MinedThicknessByDistance")
.SetValue(originalMinedThicknessByDistance[__instance].Select(t => .SetValue(originalMinedThicknessByDistance[__instance.Prototype].Select(t =>
new ThicknessTilesF((int)(t.Value.ToFloat() * Main.excavatorMiningAreaMultiplier.Value))) new ThicknessTilesF((int)(t.Value.ToFloat() * Main.excavatorMiningAreaMultiplier.Value)))
.ToImmutableArray()); .ToImmutableArray());
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)) {
originalMaxMiningDistance.Add(__instance.Prototype, trav.Field("MaxMiningDistance").GetValue<RelTile1i>());
}
var value = originalMaxMiningDistance[__instance.Prototype];
var newValueMiningDistance = new RelTile1i((int)(value.Value * Main.excavatorMaxReachMultiplier.Value));
trav.Field("MaxMiningDistance")
.SetValue(newValueMiningDistance);
if (Main.debugMode.Value)
Console.WriteLine("IndustrialCyka: Excavator max mining distance: {0}",
__instance.Prototype.MaxMiningDistance);
var trav2 = Traverse.Create(__instance.Prototype.MineTimings); var trav2 = Traverse.Create(__instance.Prototype.MineTimings);
if (!originalMineTileIterations.ContainsKey(__instance.Prototype.MineTimings)) { if (!originalMineTileIterations.ContainsKey(__instance.Prototype.MineTimings)) {
originalMineTileIterations.Add(__instance.Prototype.MineTimings, originalMineTileIterations.Add(__instance.Prototype.MineTimings,