Lots of new optimizations utilizing prepatcher
To start, this mod now requires Prepatcher and Fishery. New optimizations include: gene ticking improvements, world object improvements, hediff optimizations, world pawn gc optimizations, better mothballing, dds support, ContentFinder caching, additions and changes to reflection caching, as well as various other additions. Multiplayer support has been improved too, but should be considered highly experimental. The WorkGiver_DoBill bug is fixed in this build. Multiple patches aiming to improve RimWorld's load time have been added too.
This commit is contained in:
@@ -0,0 +1,64 @@
|
||||
// Copyright (c) 2023 bradson
|
||||
// This Source Code Form is subject to the terms of the Mozilla Public
|
||||
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
// file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
|
||||
namespace PerformanceFish.ModCompatibility;
|
||||
|
||||
public static class PerformanceOptimizer
|
||||
{
|
||||
private const string ASSEMBLY_NAME = "PerformanceOptimizer";
|
||||
|
||||
public static bool Active => ActiveMods.PerformanceOptimizer;
|
||||
|
||||
public static ModContentPack? ModContentPack { get; }
|
||||
= ActiveMods.TryGetModContentPack(PackageIDs.PERFORMANCE_OPTIMIZER);
|
||||
|
||||
public static Type? OptimizationBaseType { get; }
|
||||
|
||||
public static Type[]? BlockedPatches { get; }
|
||||
|
||||
public static string[] BlockedPatchNames { get; }
|
||||
=
|
||||
{
|
||||
"PerformanceOptimizer.Optimization_FasterGetCompReplacement",
|
||||
"PerformanceOptimizer.Optimization_IdeoUtility_GetStyleDominance"
|
||||
};
|
||||
|
||||
static PerformanceOptimizer()
|
||||
{
|
||||
if (ModContentPack is null)
|
||||
return;
|
||||
|
||||
var assembly = ModContentPack.TryGetAssembly(ASSEMBLY_NAME);
|
||||
|
||||
if (assembly is null)
|
||||
{
|
||||
Log.Error("Performance Fish failed to find Performance Optimizer's assembly. "
|
||||
+ "This is likely to cause issues.");
|
||||
return;
|
||||
}
|
||||
|
||||
OptimizationBaseType = assembly.GetType("PerformanceOptimizer.Optimization");
|
||||
|
||||
BlockedPatches = Array.ConvertAll(BlockedPatchNames, name => assembly.GetType(name));
|
||||
}
|
||||
|
||||
public static bool TryPatch()
|
||||
{
|
||||
if (BlockedPatches.NullOrEmpty())
|
||||
return false;
|
||||
|
||||
foreach (var patch in BlockedPatches.Concat(OptimizationBaseType))
|
||||
{
|
||||
if (AccessTools.DeclaredPropertyGetter(patch, "IsEnabled") is { } isEnabledGetter)
|
||||
PerformanceFishMod.Harmony.Patch(isEnabledGetter, new(methodof(IsEnabledPatch)));
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public static bool IsEnabledPatch(object __instance, ref bool __result)
|
||||
=> !BlockedPatches!.Contains(__instance.GetType())
|
||||
|| (__result = false);
|
||||
}
|
||||
Reference in New Issue
Block a user