fix crashes, temp disable reflection caching, possibly reduce optimization in some areas, likely break 1.5

This commit is contained in:
localavaster
2026-04-14 00:12:50 -06:00
parent 9821c68999
commit 35187cf2d2
20 changed files with 275 additions and 107 deletions
@@ -4,7 +4,7 @@
// file, You can obtain one at https://mozilla.org/MPL/2.0/.
global using RimfactoryExtensionCache
= PerformanceFish.Cache.ByReference<Verse.Thing, PerformanceFish.Hauling.RimfactoryExtensionCacheValue>;
= PerformanceFish.Cache.ByReference<Verse.ThingDef, PerformanceFish.Hauling.RimfactoryExtensionCacheValue>;
using RimfactoryTypes = PerformanceFish.ModCompatibility.Types.Rimfactory;
namespace PerformanceFish.Hauling;
@@ -13,17 +13,17 @@ public record struct RimfactoryExtensionCacheValue
{
public DefModExtension? ModExtension;
public static DefModExtension? TryGetExtension(Thing slotGroupParent)
public static DefModExtension? TryGetExtension(ThingDef thingDef)
=> RimfactoryTypes.ModExtension != null
? slotGroupParent.def.modExtensions?.Find(_extensionPredicate)
? thingDef.modExtensions?.Find(_extensionPredicate)
: null;
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static bool HasExtension(Thing slotGroupParent)
=> RimfactoryTypes.ModExtension != null && TestExtension(slotGroupParent);
public static bool HasExtension(Thing thing)
=> RimfactoryTypes.ModExtension != null && TestExtension(thing.def);
[MethodImpl(MethodImplOptions.NoInlining)]
private static bool TestExtension(Thing slotGroupParent) => slotGroupParent.TryGetRimfactoryExtension() != null;
private static bool TestExtension(ThingDef thingDef) => TryGetExtension(thingDef) != null;
static RimfactoryExtensionCacheValue() => EnsureInitialized();
@@ -44,4 +44,4 @@ public record struct RimfactoryExtensionCacheValue
=> RimfactoryTypes.ModExtension is { } extensionType
? AccessTools.FieldRefAccess<DefModExtension, int>(AccessTools.Field(extensionType, name))
: null;
}
}