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")]
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 =
new Dictionary<Excavator, ImmutableArray<ThicknessTilesF>>();
public static Dictionary<ExcavatorProto, ImmutableArray<ThicknessTilesF>> originalMinedThicknessByDistance =
new Dictionary<ExcavatorProto, ImmutableArray<ThicknessTilesF>>();
public static Dictionary<ExcavatorProto.Timings, int> originalMineTileIterations =
new Dictionary<ExcavatorProto.Timings, int>();
public static Dictionary<ExcavatorProto, RelTile1i> originalMaxMiningDistance =
new Dictionary<ExcavatorProto, RelTile1i>();
static void Prefix(ref Excavator __instance) {
if (!originalCapacity.ContainsKey(__instance)) {
originalCapacity.Add(__instance, __instance.Prototype.Capacity);
if (!originalCapacity.ContainsKey(__instance.Prototype)) {
originalCapacity.Add(__instance.Prototype, __instance.Prototype.Capacity);
}
var trav = Traverse.Create(__instance.Prototype);
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)
Console.WriteLine("IndustrialCyka: Excavator capacity: {0}", __instance.Prototype.Capacity.Value);
if (!originalMinedThicknessByDistance.ContainsKey(__instance)) {
originalMinedThicknessByDistance.Add(__instance,
if (!originalMinedThicknessByDistance.ContainsKey(__instance.Prototype)) {
originalMinedThicknessByDistance.Add(__instance.Prototype,
trav.Field("MinedThicknessByDistance").GetValue<ImmutableArray<ThicknessTilesF>>());
}
trav.Field("MinedThicknessByDistance")
.SetValue(originalMinedThicknessByDistance[__instance].Select(t =>
.SetValue(originalMinedThicknessByDistance[__instance.Prototype].Select(t =>
new ThicknessTilesF((int)(t.Value.ToFloat() * Main.excavatorMiningAreaMultiplier.Value)))
.ToImmutableArray());
if (Main.debugMode.Value)
Console.WriteLine("IndustrialCyka: Excavator mined thickness: {0}",
__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);
if (!originalMineTileIterations.ContainsKey(__instance.Prototype.MineTimings)) {
originalMineTileIterations.Add(__instance.Prototype.MineTimings,