Fix patch for mining distance
This commit is contained in:
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user