64 lines
1.8 KiB
C#
64 lines
1.8 KiB
C#
// 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);
|
|
} |