Stabilize RimWorld 1.6 caches and tick optimizations
This commit is contained in:
@@ -61,7 +61,15 @@ public sealed class GeneTrackerOptimization : ClassWithFishPrepatches
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public static bool Dirty(Pawn_GeneTracker instance, List<Gene> genesToTick)
|
||||
#if V1_6
|
||||
{
|
||||
ref var versions = ref instance.GeneListVersions();
|
||||
return !versions.Initialized || versions.Xenogenes != instance.xenogenes._version
|
||||
|| versions.Endogenes != instance.endogenes._version;
|
||||
}
|
||||
#else
|
||||
=> GetListVersion(instance) != genesToTick._version;
|
||||
#endif
|
||||
|
||||
[MethodImpl(MethodImplOptions.NoInlining)]
|
||||
public static void Update(Pawn_GeneTracker instance, List<Gene> genesToTick)
|
||||
@@ -71,12 +79,21 @@ public sealed class GeneTrackerOptimization : ClassWithFishPrepatches
|
||||
AddTickableGenes(genesToTick, instance.xenogenes);
|
||||
AddTickableGenes(genesToTick, instance.endogenes);
|
||||
|
||||
#if V1_6
|
||||
ref var versions = ref instance.GeneListVersions();
|
||||
versions.Xenogenes = instance.xenogenes._version;
|
||||
versions.Endogenes = instance.endogenes._version;
|
||||
versions.Initialized = true;
|
||||
#else
|
||||
genesToTick._version = GetListVersion(instance);
|
||||
#endif
|
||||
}
|
||||
|
||||
#if !V1_6
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
private static int GetListVersion(Pawn_GeneTracker instance)
|
||||
=> (instance.xenogenes._version << 16) | (instance.endogenes._version & 0b1111_1111_1111_1111);
|
||||
#endif
|
||||
|
||||
private static void AddTickableGenes(List<Gene> genesToTick, List<Gene> genes)
|
||||
{
|
||||
@@ -115,6 +132,15 @@ public sealed class GeneTrackerOptimization : ClassWithFishPrepatches
|
||||
}
|
||||
}
|
||||
|
||||
#if V1_6
|
||||
public struct GeneListVersionState
|
||||
{
|
||||
public int Xenogenes;
|
||||
public int Endogenes;
|
||||
public bool Initialized;
|
||||
}
|
||||
#endif
|
||||
|
||||
public sealed class GeneTrackerTickIntervalPatch : FishPrepatch
|
||||
{
|
||||
// i am iffy about this
|
||||
|
||||
Reference in New Issue
Block a user