From 4c3f52f75708919d72e9a52127a39b16ebd91380 Mon Sep 17 00:00:00 2001 From: Michael Millspaugh Date: Fri, 19 Apr 2024 18:31:57 -0400 Subject: [PATCH 1/4] update to 1.5, transpiler currently errors on load but pawns seems to follow paths with no issue without it --- 1.5/Assemblies/CleanPathfinding.dll | Bin 0 -> 47104 bytes 1.5/Assemblies/CleanPathfinding.pdb | Bin 0 -> 20508 bytes .../patch.owlchemist.cleanpathfinding.xml | 32 ++++++++++++++++++ About/About.xml | 1 + Source/CleanPathfinding.csproj | 17 +++++----- Source/CleanPathfinding.sln | 25 ++++++++++++++ Source/CleanPathfindingUtility.cs | 23 ++++++++----- Source/DoorPathingUtility.cs | 13 +++++++ 8 files changed, 94 insertions(+), 17 deletions(-) create mode 100644 1.5/Assemblies/CleanPathfinding.dll create mode 100644 1.5/Assemblies/CleanPathfinding.pdb create mode 100644 1.5/Patches/patch.owlchemist.cleanpathfinding.xml create mode 100644 Source/CleanPathfinding.sln diff --git a/1.5/Assemblies/CleanPathfinding.dll b/1.5/Assemblies/CleanPathfinding.dll new file mode 100644 index 0000000000000000000000000000000000000000..4a5e99b0ab7d581879620f0fdacafae6c3b9c55a GIT binary patch literal 47104 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 OhrSvAjw7)T;r{@#=R;rs literal 0 HcmV?d00001 diff --git a/1.5/Patches/patch.owlchemist.cleanpathfinding.xml b/1.5/Patches/patch.owlchemist.cleanpathfinding.xml new file mode 100644 index 0000000..c676457 --- /dev/null +++ b/1.5/Patches/patch.owlchemist.cleanpathfinding.xml @@ -0,0 +1,32 @@ + + + + +
  • + Defs/TerrainDef[tags]/tags[li/text()="Road" or li/text()="FineFloor"] + +
  • CleanPath
  • + + +
  • + Always + Defs/TerrainTemplateDef[tags]/tags[li/text()="FineFloor"] + +
  • CleanPath
  • + + +
  • + Defs/TerrainDef[defName="PavedTile" or defName="Concrete" or @Name="TileStoneBase"][not(tags)] + + + +
  • +
  • + Defs/TerrainDef[defName="PavedTile" or defName="Concrete" or @Name="TileStoneBase"]/tags + +
  • CleanPath
  • + + +
    +
    +
    \ No newline at end of file diff --git a/About/About.xml b/About/About.xml index ad75689..4d9e0de 100644 --- a/About/About.xml +++ b/About/About.xml @@ -6,6 +6,7 @@
  • 1.4
  • +
  • 1.5
  • When pathfinding costs are calculated, any terrain tiles that generate filth are taken into account and given some degree of avoidance. Also, roads can be given a bonus attraction, and the overall pathfinding range can be adjusted. Other features such as light attraction and extra range can also be enabled. diff --git a/Source/CleanPathfinding.csproj b/Source/CleanPathfinding.csproj index 3c44b8d..2e2f7b4 100644 --- a/Source/CleanPathfinding.csproj +++ b/Source/CleanPathfinding.csproj @@ -9,18 +9,17 @@ net48 preview false + 1.4;1.5 - - ..\..\..\Mods\$(Product)\$(Version)\Assemblies - TRACE;NDEBUG - 4 - false - None - - + ..\..\..\Mods\$(Product)\$(Version)\Assemblies TRACE;DEBUG;NETFRAMEWORK;NET48; + + ..\..\..\Mods\Clean Pathfinding\1.5\Assemblies + NETFRAMEWORK;NET48;v1_5 + true + runtime; build; native; contentfiles; analyzers; buildtransitive @@ -31,7 +30,7 @@ runtime; build; native; contentfiles; analyzers; buildtransitive all - + diff --git a/Source/CleanPathfinding.sln b/Source/CleanPathfinding.sln new file mode 100644 index 0000000..811372b --- /dev/null +++ b/Source/CleanPathfinding.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.34601.136 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CleanPathfinding", "CleanPathfinding.csproj", "{580CD268-7D44-402D-9FBE-76A743993959}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + 1.4|Any CPU = 1.4|Any CPU + 1.5|Any CPU = 1.5|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {580CD268-7D44-402D-9FBE-76A743993959}.1.4|Any CPU.ActiveCfg = 1.4|Any CPU + {580CD268-7D44-402D-9FBE-76A743993959}.1.4|Any CPU.Build.0 = 1.4|Any CPU + {580CD268-7D44-402D-9FBE-76A743993959}.1.5|Any CPU.ActiveCfg = 1.5|Any CPU + {580CD268-7D44-402D-9FBE-76A743993959}.1.5|Any CPU.Build.0 = 1.5|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {058A7526-2742-491F-B717-AC7BC5D88641} + EndGlobalSection +EndGlobal diff --git a/Source/CleanPathfindingUtility.cs b/Source/CleanPathfindingUtility.cs index dc09058..6419298 100644 --- a/Source/CleanPathfindingUtility.cs +++ b/Source/CleanPathfindingUtility.cs @@ -4,6 +4,7 @@ using Verse.AI; using System; using System.Collections.Generic; +using System.Reflection; using System.Reflection.Emit; using System.Linq; using static CleanPathfinding.ModSettings_CleanPathfinding; @@ -48,7 +49,7 @@ static IEnumerable Transpiler(IEnumerable inst if (searchForObjects && objectsFound < 3 && code.opcode == OpCodes.Ldloc_S) { objects[objectsFound++] = code.operand; - //As of 12/5, object 0 should be 48, object 1 should be 12, and object 2 should be 45 + //As of 4/2024, object 0 should be 46, object 1 should be 12, and object 2 should be 43 } if (offset == -1 && code.opcode == OpCodes.Ldfld && code.OperandIs(field_extraNonDraftedPerceivedPathCost)) @@ -56,21 +57,22 @@ static IEnumerable Transpiler(IEnumerable inst offset = 0; continue; } + if (offset > -1 && ++offset == 2) { - yield return new CodeInstruction(OpCodes.Ldloc_0); + yield return new CodeInstruction(OpCodes.Ldloc_0); //pawn yield return new CodeInstruction(OpCodes.Ldloc_S, objects[1]); //topGrid - yield return new CodeInstruction(OpCodes.Ldloc_S, objects[2]); //TerrainDef within the grid - yield return new CodeInstruction(OpCodes.Ldelem_Ref); - yield return new CodeInstruction(OpCodes.Ldloc_S, objects[0]); //Pathcost total - yield return new CodeInstruction(OpCodes.Ldarg_0); + yield return new CodeInstruction(OpCodes.Ldloc_S, objects[2]); //topGrid index number + yield return new CodeInstruction(OpCodes.Ldelem_Ref); //TerrainDef within the grid + yield return new CodeInstruction(OpCodes.Ldloc_S, objects[0]); //Pathcost total + yield return new CodeInstruction(OpCodes.Ldarg_0); //start position (not used by adjust cost?) yield return new CodeInstruction(OpCodes.Ldfld, AccessTools.Field(typeof(PathFinder), nameof(PathFinder.map))); yield return new CodeInstruction(OpCodes.Ldloc_S, objects[2]); //cell location yield return new CodeInstruction(OpCodes.Call, typeof(CleanPathfindingUtility).GetMethod(nameof(CleanPathfindingUtility.AdjustCosts))); yield return new CodeInstruction(OpCodes.Stloc_S, objects[0]); ran = true; - } + } } if (!ran) Log.Warning("[Clean Pathfinding] Transpiler could not find target. There may be a mod conflict, or RimWorld updated?"); @@ -267,13 +269,18 @@ float GameGlowAtFast(Map map, int index) daylight = map.skyManager.curSkyGlowInt; if (daylight == 1f) return 1f; } +#if v1_5 + +#else ColorInt color = map.glowGrid.glowGrid[index]; +#endif + UnityEngine.Color32 color = map.glowGrid.VisualGlowAt(index); if (color.a == 1) return 1; return (float)(color.r + color.g + color.b) * 0.0047058823529412f; //n / 3f / 255f * 3.6f pre-computed, since I guess the assembler doesn't optimize this } - #endregion +#endregion } } } \ No newline at end of file diff --git a/Source/DoorPathingUtility.cs b/Source/DoorPathingUtility.cs index a72cd3d..26f5ca0 100644 --- a/Source/DoorPathingUtility.cs +++ b/Source/DoorPathingUtility.cs @@ -13,6 +13,15 @@ namespace CleanPathfinding { + static class Area_Assit + { + public static void SetLabel(this Area_Allowed self, string label) + { + + } + } + + //Add gizmos to the doors [HarmonyPatch(typeof(Building_Door), nameof(Building_Door.GetGizmos))] static class Patch_Building_Door_GetGizmos @@ -81,6 +90,9 @@ public static void Prefix(Area __instance) } } +#if v1_5 + //SetLabel removed in 1.5 +#else [HarmonyPatch(typeof(Area_Allowed), nameof(Area_Allowed.SetLabel))] static class Patch_Area_Allowed_SetLabel { @@ -100,6 +112,7 @@ public static void Postfix(Area_Allowed __instance) else if (__instance.Label == "Avoid" && compCache.TryGetValue(__instance.Map.uniqueID, out MapComponent_DoorPathing mapComp)) mapComp.RegisterAvoidArea(__instance); } } +#endif [HarmonyPatch(typeof(World), nameof(World.FinalizeInit))] static class Patch_FinalizeInit From 37f6295a1609fabc51e1e26262bfba337b7f193b Mon Sep 17 00:00:00 2001 From: Michael Millspaugh Date: Sat, 20 Apr 2024 11:00:47 -0400 Subject: [PATCH 2/4] fix for transpiler (float instead of int) --- Source/CleanPathfindingUtility.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/CleanPathfindingUtility.cs b/Source/CleanPathfindingUtility.cs index 6419298..9d65c51 100644 --- a/Source/CleanPathfindingUtility.cs +++ b/Source/CleanPathfindingUtility.cs @@ -166,7 +166,7 @@ public static void UpdatePathCosts() Log.Error("[Clean Pathfinding] Error processing settings, skipping...\n" + ex); } } - static public int AdjustCosts(Pawn pawn, TerrainDef def, int cost, Map map, int index) + static public float AdjustCosts(Pawn pawn, TerrainDef def, float cost, Map map, int index) { if (pawn == null) goto skipAdjustment; From 05ca72d5a4dc7c6334aa606445f9fef88f6f17cf Mon Sep 17 00:00:00 2001 From: Michael Millspaugh Date: Sun, 21 Apr 2024 13:23:50 -0400 Subject: [PATCH 3/4] add assemblies --- 1.5/Assemblies/CleanPathfinding.dll | Bin 47104 -> 47616 bytes 1.5/Assemblies/CleanPathfinding.pdb | Bin 20508 -> 20508 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/1.5/Assemblies/CleanPathfinding.dll b/1.5/Assemblies/CleanPathfinding.dll index 4a5e99b0ab7d581879620f0fdacafae6c3b9c55a..c0389c141f0e351e777435217184c3525bfc6c17 100644 GIT binary patch delta 7980 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 delta 8038 zcmcIpd3+RAwmwx|UA>atmn@xhLP9FN5VEI(QP~s*H!v&;F38A$hy@jO&?eoTz<@gF zfOkYT1r%lw9R*uK92cBX98@5NubJhF@}5*}{NzBWRyPP!_asg8(+8LR6Js?_IiSJhz%~T%~^f9)LDd z%16jmT&4N=Q|J-I?`Coj7v`QOTe(VZD>=xOIlA|%lSkr#2R*D!JNTr|au-h_IQZC| zWR-raWg(gqDK^e73D)=qA*V@X> zC2v}Xalaw9euFPtjONAX190uwy=IeBIPLKQ6gmXyKE$Dc?Z3lAiY63#m~UT#po5a( zb<$ECvx_0xPZz%*0WTA>ykFgw58#-UOlXb01ytFl_-zQm(!Un!Kfv7 z0bZT30?qPDQk*A+S%6g(ucqQ56y|V)6QqZ6WHHD&r-97L>(8wr59Ix#B3qfnT6FVD z>!>t`BYfP2dBh(<7=M%qwn|YO*4V;h&ozl>E#vLO3nxqKQScI8u3`vWg9O0q0IYP= zP!pidrNh2@(pD0n8AuyYSPYR0HEDx-R(U+DM{I*eupIw@9`Qe-z|*&pdV8(mCebKA zhU0$fG!vU9Z$eGP&zt%vA1Bw@+lJG2_DTbgmanc*Nea15l6Zm{X(>X9KcRF>PonHD z#O+SPUD7OVMj>w@|FW0jKAGa*{V< z^6idcWi+*tJn30BC8~3WMPqy`onlju@onS-M{$x>fbMNN+#Udw?Z{l)*K}%BEr?l+ z8od2JUdaQrKZpJnF}@uS^7ANMLUS8#drm?6Ga^xb0VTbl-C@1-BDL!s`dBS`IP~&M zh+78Wm~FYqNHyDVBa)T^rGj2B<3ZkmLS^+zFDo>@LXCex;S!s13{Fw{D@6u}A%~N( z881R`8W|^tfst~V9H#iI=vz=HJ52Ixki>#aLmjP5{1;U0MByJema#i0In8++`l;l0 z_mVScq2$-m8ts>be?y2&cHyCA=9x2R4(2(Hr@ci0mO|Ny%8xLGH%P)&$n7F4UC|_M zLzmfUX15us1(7rug@N^_w`Q(Eev^7w!sDD4=`A|6sy*qj_I7I2)ko)(cV|QR>Wcc< z3goBJ#yhM9QU$hf5k}pEis&Oq)Nj+>P8`vcg>~cB7B9oV@7%Gq;c2 z;fa^Mjfw=GTfxNczNYvypz0nBW)IytZll%Y&yoC4E@Bm)=I|BJb6zw0O@TESc z_#iR)%95W@?I9EvgL1&o=UTlE*;hn;0}|Kb;Iw!>5@_#1&x#baB=Dg^@Sf({|APiQ zjKZK)8T$ml8My(b^ah|779i>C8)1Im2skA-!VSFRqC2Aur>Qlu!oadFlLXFrx7H^nrqf~aI z*6o(QMzud@zWm>)2w#(^MCy_8y#ZtzF*>4G;rqFWNq4s=vn4Bs=}PV2;C#1RK8l9{ z?C#sL4s+>!?qLhCC(&MAhILJr^|wF6TI|mH4OI;0YEvFJG+*W!^z!^SB!cmI!D?$1atYhyT$CJiz%IKtr}>t{s*@1ZbNof-wKnl zg_F5s)*>w}5>&dx&%#HS#}EByd9zETVD*SL}TXOH!@UY{}KphNTUf zxVfWxYAC@}lf%gUatVG(-DJQ}b( z#krY`944!)Qmv>A%FCsdlu)TG&ghh5nUSQU3)yMZOr2Sayi;6V!s`5zEmMr0nNjAH zm6iltG;#X&AkZ+3+mB>SiI+P~rk4y(()J3uaI1Tr1HjG1(f%{dEM0)!{(%jm(oI*& zmNZ#Txfj`Ub-7$|R@f&hO2&az%uQ=_9To`@HqQS~x0B9bzS@nFBU7bpy|gMJyJP`t zl!4SIo0a?{=?Qup)KgZ#PT68~P_pxLM$epG`ABIXnG*@uz-}nSAoODSZWxL?hilzH zwd!?FUl0tS;F+Kwb|xzR_m_V1T-SbuGS-=!WU`c=x+nVRkX&{rLgE#Q-PLCb+6Co? zKDwVwdC3I>W-Cs2rs%yJi#MaoH0i9eGHxMRQdUlXKgqV}%Vo4h_m`EZEsFPHEKNBN zfICjMN&io`MNvs1wVW+b4i^@ z_75fXcn!|PyFr1c&qC7>s{8NFnGt(3h+36`O!Tl9->yWQuPD@qEoh*Z^jZ5*SJs-l z58;zLb{<(-ZpNZ+D6g%`5>8govpLY4iFx)ubALst;RNP{9h#OZZsmQqBgp)cLZ5jU zQ~B5Fbmb#lA$>Vij?rL2#^$>#*<%2iU6s#0mAa&u$}w>&*0 z8m6jQ)l(7dtM1{rog`fo!rvhd){Mg6A*9+$Za2B2wgfe^YuzG!b;Xy)dun5%ng-cb z8)83ru>GxLFfNU+&y#TR(_$NYmQ360uHd=lWJ<%WxYGWHW|X$Z`%wO_$xpU6266O$ z<2Ht4$Z}WH3O$0Ut&5P-7p)V7^vIzFoFGDlDSiF0+x5xd0D6%u^-u7GL<0sf-{kDT9GhE8hQh48V8E1t%G+S%nGm{m%a%_39ShF<-zBA*Ma}ZJ*8mgaQE`^gCYVvc?AC};|9-a5R=~{Dta92~*2|B~I z<_cKC&_WpP|CPBC2H}HjhG-QGuLrvRQnbVnk2F7v`cuPauyc|Sed5qfBeu}_)h6t4DZZSvT_pQ`MU@Ak?@g|Jx z6WGe&KQ2^_rx@}Nqev}V1m+E=h?1d8EMO?JglPn|Erq47+i;1XhG<(3gpnG0)3C@q z5XNb!HBgS|W`>e<;ug~&n3prL1~xK8Tkl?T4OCvlmSERNElgo(K9aFREzDquQqw~n zEMTaIJ8j~i9(HKxL{S*g7By! z5G~Pcx4T!M=Q|oQdB&jaLx$AK)Wczh=EEiYqv&}eYtusm*e{{WtJE6d5)CCOw?_E# z(q3+jV7!dEGHQ)rR}rJu2tLh5sWn1Svr%e|FjYg8S|iM4NTt>Y?F`L_w{V+pgvA+K z63f;I8?}kFY)x=TLzG$*3?I`=tqHDYsK-PKH<_DYx{4UJCXh87rPc&;hUP;BGHrq{G$i6#Yl3ezWW-0lCiq@M4=|*|mu0m{ z^=Jz+q?WrGCTfVL)C@buXH!Zd{D{FGR_XU1oMTGq8gz}NEjQ1b=)cO z0-;8j=@~A>gjvp!!Vtl1yjmE=t@6$lMhVl4I)rzjxu}SH7cQ~~x%IFnP=)d$do`CY z9KkqaghjR`!W3bn{sH0ca&Vc}2tC|Q-alfvN?Q@SUT!}LN4ZbEZ}W467d$TsL&)}V zH*%e%WPC%(QsL9QvE1kUSN{3>7`NKBMqdx3#glM=|I&65w~n-rAHqFGo*iGE+#;N| zAJK0Y9?G|guLx^BF7YuT;tYxTJl*3LFhUF1TDyc#3@u^}FWN?lJ;E4IA=L0-YZDh> zwXmCbDnAz{1lq-;!hCy&7~|K83viq=-G}lfeC{jdivv2bl>a5lQ^K}uf!n7J3Ei!fx`otxaKy2b98ZJ-x6~=n-cz%K2klRBhLncqq8*6(bb{;8G|}Urz6jr zCkAy^{D^=Fb{LK9fSyj!_wh#~Iq=9A+>G>VkABA)jn34coT-P5>DM>>(_GVS9s4YB zmtKJ{JkWvPlY8)s|8>cH=sThdzw|lqw!QczUv2JhA7g#*iaCj*i=Jqzyx8IRVHOE) znH|-X%f8f<7`j3H@%s&TzVM{}*ohD3yo%E^pM&JZErnb+Ik06^I`5fpb*3HcpH=Y9 L1!>3AC%AtDwECYO diff --git a/1.5/Assemblies/CleanPathfinding.pdb b/1.5/Assemblies/CleanPathfinding.pdb index 394932acb50b59e82b6cc11c20779d5cd1848a57..4e146b087475ed2282d379bfc35211f3c09445b1 100644 GIT binary patch delta 196 zcmbQUfN{5`!c|!zMNcS*HE| sT$7a@jpR8PI2mNv8T6P^g&EA47~~kt8SoBzX2y=moGkK!(F_a>%s|M? zz{qflk%3{`W=obfZiNTg63_BI^3E-Lzc+$$<%R>Oxfxs86+5TI2jn27}VHgc^PCG{Je6oB#j- From 6669b9eb83b0663d90f3241b27afece2d360896f Mon Sep 17 00:00:00 2001 From: Michael Millspaugh Date: Mon, 22 Apr 2024 12:22:36 -0400 Subject: [PATCH 4/4] temp fix for mem issues --- 1.5/Assemblies/CleanPathfinding.dll | Bin 47616 -> 48640 bytes 1.5/Assemblies/CleanPathfinding.pdb | Bin 20508 -> 20748 bytes Source/CleanPathfindingUtility.cs | 103 +++++++++++++++++++++++++--- Source/Mod_CleanPathfinding.cs | 5 +- 4 files changed, 98 insertions(+), 10 deletions(-) diff --git a/1.5/Assemblies/CleanPathfinding.dll b/1.5/Assemblies/CleanPathfinding.dll index c0389c141f0e351e777435217184c3525bfc6c17..e4294c14d473accd19c193336aecdcd19b0824d6 100644 GIT binary patch literal 48640 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 delta 3415 zcmZ9Od2Ccw6voee@6Faur+aB>=?-lvw51y@Oxu|*w1t9IDB!|UR1l$5D}JtTyNhG_}U0x1nRuDd;Qc2k1BGGL&0u z(s-yIYJz&9RnP;_rdqDaKa+NVpM!pZa_USfhC+`(CgFrq3{R!>ZYfIZaScBW-px%dg)Bi zM}G$er8KdRvoQMHCVAG#Nit|dbJWXSk2EW%Nog&k&YTt*HuH1PuNI58Lr+5ct|z$Y zRh3}j;UQ!exyVDmhPaR|P*bQ?AWB3aGZm&Zs`2z{S9D0 zI91o4qgk+bMOiWXTq+7@)0jk^)dhVI~=^eyh#d>P^de= z8>P^}D>WA(&ZFnUS%mm_oxkY@UZA-Iaqd8i=2CDDuRpID7bt_{R@enlF?gabxDGtt z!Al&>%fVAR0r7I3pJD!=kKFo3zr!4hWi&{u0xzR_$kfxBy9CTI08p05*l;?UNh!KFc-K@ z^E5DT$Zn_%@##9BXJMj)d0EOG{4P2)3EZUfx#ncWc>nS5ag2f;%}C%+RvyIM0$z<6 za|Jl03-G3_bnto1YZbUv$4{Z`6mXm7A#k;Wi&3)%++pj4g-EDlhh~0#*5g$ZV; zie6Rzeb;Rw_C#AjHz~UTE&ey5HFcD2p=?9tn8Y;&mYbii`iRw6F5Vah4X|5{NvJUy zD#s-LT3BiX20lUj`w|lLGTLZ&UBrjkLqDSRsSmWDUVxpT$L*Xg43fY9JUJG5EOF<1@hNVO_*`_c`PVoX4YYjdcg53|P=2C|ZVwa5#R>iL zvxI8t4HV0&z$3{k*W7jY23mFZFx}HXG%&bkc;u(RI+5?Q&t;tU{5&-K+$-Mjd(C|` z+&255IXvk?OWUz?)n&^^29r)!dfOuxFdJoe%4b98-B_RG$eVI!_-x)7boZ9|W*mAK zIT%NU-V?XF@n-Itf!A0=TbU$yoJmWh!eapY4mvem3L+htQ*S+6%#Jz{FXwbD6n^;{>;!qHW4#E-c{3)8#1VT&s_&J=4Y7AEo({^%JeHn}l0`B2X!FK?S!l$bSgyr)mNA{Q&}&6Fu~_KR$JXwG9| ToNT=5lE{;#z1^^fdiVVYH^X3z diff --git a/Source/CleanPathfindingUtility.cs b/Source/CleanPathfindingUtility.cs index 9d65c51..8f56e5b 100644 --- a/Source/CleanPathfindingUtility.cs +++ b/Source/CleanPathfindingUtility.cs @@ -12,15 +12,100 @@ namespace CleanPathfinding { #region Harmony - [HarmonyPatch(typeof(PathFinder), nameof(PathFinder.FindPath), new Type[] { - typeof(IntVec3), - typeof(LocalTargetInfo), - typeof(TraverseParms), - typeof(PathEndMode), - typeof(PathFinderCostTuning) })] - static class Patch_PathFinder - { - static IEnumerable Transpiler(IEnumerable instructions) + + + [HarmonyPatch(typeof(PathFinder))] + + static class Patch_PathFinder_Finalize + { + /* here to trouble shoot memory leaks + * Soyuz caught this error. Please don't report this to the RocketMan team unless you're certain RocketMan caused this error. with error System.OutOfMemoryException: Out of memory +[Ref 3B9F4383] + at (wrapper managed-to-native) System.Object.__icall_wrapper_ves_icall_array_new_specific(intptr,int) + at System.Collections.Generic.List`1[T].set_Capacity (System.Int32 value) [0x00021] in :0 + at System.Collections.Generic.List`1[T].EnsureCapacity (System.Int32 min) [0x00036] in :0 + at System.Collections.Generic.List`1[T].Add (T item) [0x00010] in :0 + at Verse.AI.PawnPath.AddNode (Verse.IntVec3 nodePosition) [0x00000] in <957a20e0be784a65bc32cf449445b937>:0 + at Verse.AI.PathFinder.FinalizedPath (System.Int32 finalIndex, System.Boolean usedRegionHeuristics) [0x00036] in <957a20e0be784a65bc32cf449445b937>:0 + at Verse.AI.PathFinder.FindPath (Verse.IntVec3 start, Verse.LocalTargetInfo dest, Verse.TraverseParms traverseParms, Verse.AI.PathEndMode peMode, Verse.AI.PathFinderCostTuning tuning) [0x005a5] in <957a20e0be784a65bc32cf449445b937>:0 + - TRANSPILER Owlchemist.CleanPathfinding.tmp: IEnumerable`1 CleanPathfinding.Patch_PathFinder:Transpiler(IEnumerable`1 instructions) + - TRANSPILER OskarPotocki.VanillaFurnitureExpanded.Security: IEnumerable`1 VFESecurity.Patch_PathFinder+FindPath:Transpiler(IEnumerable`1 instructions) + at Verse.AI.PathFinder.FindPath (Verse.IntVec3 start, Verse.LocalTargetInfo dest, Verse.Pawn pawn, Verse.AI.PathEndMode peMode, Verse.AI.PathFinderCostTuning tuning) [0x0003e] in <957a20e0be784a65bc32cf449445b937>:0 + at Verse.AI.Pawn_PathFollower.GenerateNewPath () [0x0005e] in <957a20e0be784a65bc32cf449445b937>:0 + - PREFIX OskarPotocki.VFECore: Boolean VFECore.PhasingPatches:GenerateNewPath_Prefix(Pawn_PathFollower __instance, Pawn ___pawn, LocalTargetInfo ___destination, PathEndMode ___peMode, PawnPath& __result) + at Verse.AI.Pawn_PathFollower.TrySetNewPath () [0x00000] in <957a20e0be784a65bc32cf449445b937>:0 + at Verse.AI.Pawn_PathFollower.TryEnterNextPathCell () [0x00303] in <957a20e0be784a65bc32cf449445b937>:0 + - PREFIX juanlopez2008.LightsOut: Void LightsOut.Patches.Lights.DetectPawnRoomChange:Prefix(Pawn ___pawn, Room& __state) + - POSTFIX OskarPotocki.VFECore: Void VFECore.PhasingPatches:UnfogEnteredCells(Pawn_PathFollower __instance, Pawn ___pawn) + - POSTFIX juanlopez2008.LightsOut: Void LightsOut.Patches.Lights.DetectPawnRoomChange:Postfix(Pawn ___pawn, Room& __state) + at Verse.AI.Pawn_PathFollower.PatherTick () [0x00404] in <957a20e0be784a65bc32cf449445b937>:0 + - PREFIX Krkr.RocketMan.Soyuz: Void Soyuz.Patches.Pawn_PathFollower_Patch+Pawn_PathFollower_PatherTick:Prefix(Pawn_PathFollower __instance) + - POSTFIX Krkr.RocketMan.Soyuz: Void Soyuz.Patches.Pawn_PathFollower_Patch+Pawn_PathFollower_PatherTick:Postfix(Pawn_PathFollower __instance) + - FINALIZER Krkr.RocketMan.Soyuz: Void Soyuz.Patches.Pawn_PathFollower_Patch+Pawn_PathFollower_PatherTick:Finalizer(Exception __exception) + at Verse.Pawn.Tick () [0x000d8] in <957a20e0be784a65bc32cf449445b937>:0 + - TRANSPILER Krkr.RocketMan.Soyuz: IEnumerable`1 Soyuz.Patches.Pawn_Tick_Patch:Transpiler(IEnumerable`1 instructions, ILGenerator generator) + - POSTFIX Roolo.DualWield: Void DualWield.HarmonyInstance.Pawn_Tick:Postfix(Pawn __instance) + - FINALIZER Krkr.RocketMan.Soyuz: Void Soyuz.Patches.Pawn_Tick_Patch:Finalizer(Pawn __instance, Exception __exception) +UnityEngine.StackTraceUtility:ExtractStackTrace () +(wrapper dynamic-method) MonoMod.Utils.DynamicMethodDefinition:Verse.Log.Error_Patch7 (string) +RocketMan.Logger:Debug (string,System.Exception,string) +Soyuz.Patches.Pawn_Tick_Patch:Finalizer (Verse.Pawn,System.Exception) +(wrapper dynamic-method) MonoMod.Utils.DynamicMethodDefinition:Verse.Pawn.Tick_Patch2 (Verse.Pawn) +(wrapper dynamic-method) MonoMod.Utils.DynamicMethodDefinition:Verse.TickList.Tick_Patch2 (Verse.TickList) +(wrapper dynamic-method) MonoMod.Utils.DynamicMethodDefinition:Verse.TickManager.DoSingleTick_Patch4 (Verse.TickManager) +Verse.TickManager:TickManagerUpdate () +(wrapper dynamic-method) MonoMod.Utils.DynamicMethodDefinition:Verse.Game.UpdatePlay_Patch2 (Verse.Game) +Verse.Root_Play:Update () + */ + static MethodBase TargetMethod() + { + return typeof(PathFinder).GetMethod("FinalizedPath", BindingFlags.NonPublic | BindingFlags.Instance); + } + + [HarmonyPrefix] + static bool FinalizedPath_Prefix(ref PathFinder __instance, ref PawnPath __result, int finalIndex, bool usedRegionHeuristics) + { + PawnPath emptyPawnPath = __instance.map.pawnPathPool.GetEmptyPawnPath(); + int num = finalIndex; + + int max = 0; + for (; ; ) + { + int parentIndex = PathFinder.calcGrid[num].parentIndex; + emptyPawnPath.AddNode(__instance.map.cellIndices.IndexToCell(num)); + if (num == parentIndex) + { + break; + } + if (max>1000) + { + + TraverseParms traverse = __instance.traverseParms; + Log.Warning("bailing out of path calculation for "+traverse.pawn+" with "+traverse.pawn.TicksPerMoveCardinal+"/"+traverse.pawn.TicksPerMoveDiagonal+" TicksPerMoveCardinal/Diagonal after 1000 path nodes added to prevent mem leaks, on num " + num + " aiming for " + parentIndex); + __result = PawnPath.NotFound; + + return false; + } + num = parentIndex; + max++; + } + emptyPawnPath.SetupFound((float)PathFinder.calcGrid[finalIndex].knownCost, usedRegionHeuristics); + __result = emptyPawnPath; + + return false; + } + + } + [HarmonyPatch(typeof(PathFinder), nameof(PathFinder.FindPath), new Type[] { + typeof(IntVec3), + typeof(LocalTargetInfo), + typeof(TraverseParms), + typeof(PathEndMode), + typeof(PathFinderCostTuning) })] + static class Patch_PathFinder + { + + static IEnumerable Transpiler(IEnumerable instructions) { int offset = -1, objectsFound = 0; bool ran = false, searchForObjects = false, thresholdReplaced = false; diff --git a/Source/Mod_CleanPathfinding.cs b/Source/Mod_CleanPathfinding.cs index d5a827c..5d9a400 100644 --- a/Source/Mod_CleanPathfinding.cs +++ b/Source/Mod_CleanPathfinding.cs @@ -86,7 +86,10 @@ public class Mod_CleanPathfinding : Mod public Mod_CleanPathfinding(ModContentPack content) : base(content) { base.GetSettings(); - new Harmony(this.Content.PackageIdPlayerFacing).PatchAll(); + + Harmony harmony = new Harmony(this.Content.PackageIdPlayerFacing); + Harmony.DEBUG = true; + harmony.PatchAll(); } public override void DoSettingsWindowContents(Rect inRect)