From 96ce176e09a9d240d33fdbd2302b5a1ddca7525b Mon Sep 17 00:00:00 2001 From: NachoToast <32235595+NachoToast@users.noreply.github.com> Date: Wed, 12 Jul 2023 12:14:50 +1200 Subject: [PATCH] move `TryDiffuse` and `TryDissipate` to `Tick` --- 1.4/Assemblies/SCGF.dll | Bin 24064 -> 24064 bytes Source/SCGF1.4/ExtendedGasGrid.cs | 37 ++++++++++++++++++++-- Source/SCGF1.4/Patches/Patches_GasGrid.cs | 23 +++++++++----- 3 files changed, 50 insertions(+), 10 deletions(-) diff --git a/1.4/Assemblies/SCGF.dll b/1.4/Assemblies/SCGF.dll index 19bbb459e846bdb175ef1d3460bc0872081b54fd..fef7e58b218204fb5827d235da54b4a9ca9c5b4f 100644 GIT binary patch delta 7353 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 Uwb?uCJB3FEH3ur%SyP_zf7PHT5&!@I diff --git a/Source/SCGF1.4/ExtendedGasGrid.cs b/Source/SCGF1.4/ExtendedGasGrid.cs index a4c481d..8bd2ddd 100644 --- a/Source/SCGF1.4/ExtendedGasGrid.cs +++ b/Source/SCGF1.4/ExtendedGasGrid.cs @@ -205,7 +205,40 @@ private void Overflow(IntVec3 cell, GasDef gasDef, int amount) }, GenRadial.NumCellsInRadius(40f), rememberParents: true); } - public void TryDissipateGasses(int cellIndex) + public void Tick(List cardinalDirections, ref int cycleIndexDissipation, ref int cycleIndexDiffusion) + { + if (!CalculateGasEffects) + { + return; + } + + int area = map.Area; + int num = Mathf.CeilToInt((float)area * (1f / 64f)); + List cellsInRandomOrder = map.cellsInRandomOrder.GetAll(); + + for (int i = 0; i < num; i++) + { + if (cycleIndexDissipation >= area) + { + cycleIndexDissipation = 0; + } + TryDissipateGasses(CellIndicesUtility.CellToIndex(cellsInRandomOrder[cycleIndexDissipation], map.Size.x)); + cycleIndexDissipation++; + } + + num = Mathf.CeilToInt((float)area * (1f / 32f)); + for (int j = 0; j < num; j++) + { + if (cycleIndexDiffusion >= area) + { + cycleIndexDiffusion = 0; + } + TryDiffuseGasses(cellsInRandomOrder[cycleIndexDiffusion], cardinalDirections); + cycleIndexDiffusion++; + } + } + + private void TryDissipateGasses(int cellIndex) { if (!AnyGasAt(cellIndex)) { @@ -241,7 +274,7 @@ public void TryDissipateGasses(int cellIndex) } } - public void TryDiffuseGasses(IntVec3 cell, List cardinalDirections) + private void TryDiffuseGasses(IntVec3 cell, List cardinalDirections) { int sourceCellIndex = CellIndicesUtility.CellToIndex(cell, map.Size.x); diff --git a/Source/SCGF1.4/Patches/Patches_GasGrid.cs b/Source/SCGF1.4/Patches/Patches_GasGrid.cs index f673876..755f241 100644 --- a/Source/SCGF1.4/Patches/Patches_GasGrid.cs +++ b/Source/SCGF1.4/Patches/Patches_GasGrid.cs @@ -34,14 +34,16 @@ public static void PatchAll(Harmony harmony) harmony.Patch(AccessTools.Method(gasGrid, nameof(GasGrid.Notify_ThingSpawned)), postfix: new HarmonyMethod(patchType, nameof(Notify_ThingSpawned_Postfix))); - harmony.Patch(AccessTools.Method(gasGrid, "TryDissipateGasses"), // private method - postfix: new HarmonyMethod(patchType, nameof(TryDissipateGasses_Postfix))); + // harmony.Patch(AccessTools.Method(gasGrid, "TryDissipateGasses"), // private method + // postfix: new HarmonyMethod(patchType, nameof(TryDissipateGasses_Postfix))); harmony.Patch(AccessTools.Method(gasGrid, nameof(GasGrid.EqualizeGasThroughBuilding)), postfix: new HarmonyMethod(patchType, nameof(EqualizeGasThroughBuilding_Postfix))); - harmony.Patch(AccessTools.Method(gasGrid, "TryDiffuseGasses"), // private method - postfix: new HarmonyMethod(patchType, nameof(TryDiffuseGasses_Postfix))); + //harmony.Patch(AccessTools.Method(gasGrid, "TryDiffuseGasses"), // private method + // postfix: new HarmonyMethod(patchType, nameof(TryDiffuseGasses_Postfix))); + + harmony.Patch(AccessTools.Method(gasGrid, nameof(GasGrid.Tick)), postfix: new HarmonyMethod(patchType, nameof(Tick_Postfix))); harmony.Patch(AccessTools.Method(gasGrid, nameof(GasGrid.Debug_FillAll)), postfix: new HarmonyMethod(patchType, nameof(Debug_FillAll_Postfix))); @@ -130,13 +132,18 @@ public static void Notify_ThingSpawned_Postfix(ExtendedGasGrid __instance, Thing __instance.Notify_ThingSpawned(thing); } + public static void Tick_Postfix(ExtendedGasGrid __instance, List ___cardinalDirections, ref int ___cycleIndexDissipation, ref int ___cycleIndexDiffusion) + { + __instance.Tick(___cardinalDirections, ref ___cycleIndexDissipation, ref ___cycleIndexDiffusion); + } + /// /// A call to dissipate vanilla gases should also try to dissipate custom gases. /// - public static void TryDissipateGasses_Postfix(ExtendedGasGrid __instance, int index) + /*public static void TryDissipateGasses_Postfix(ExtendedGasGrid __instance, int index) { __instance.TryDissipateGasses(index); - } + }*/ /// /// A call to equalize vanilla gases should also try to equalize custom gases. @@ -149,10 +156,10 @@ public static void EqualizeGasThroughBuilding_Postfix(ExtendedGasGrid __instance /// /// A call to diffuse vanilla gases should also try to diffuse custom gases. /// - public static void TryDiffuseGasses_Postfix(ExtendedGasGrid __instance, IntVec3 cell, List ___cardinalDirections) + /*public static void TryDiffuseGasses_Postfix(ExtendedGasGrid __instance, IntVec3 cell, List ___cardinalDirections) { __instance.TryDiffuseGasses(cell, ___cardinalDirections); - } + }*/ /// /// The debug 'Fill All Gas' option should also fill cells with custom gases instead of just the vanilla ones.