1
0
mirror of https://github.com/soarqin/DSP_Mods.git synced 2025-12-09 02:53:29 +08:00

LabOpt: v0.3.4

This commit is contained in:
2023-07-31 23:56:23 +08:00
parent 08beb04e8c
commit 7dcd7b56a3
5 changed files with 38 additions and 8 deletions

View File

@@ -348,7 +348,35 @@ public static class LabOptPatchFunctions
return (uint)(lab.products[0] - LabComponent.matrixIds[0] + 1);
}
public static void SetFunctionNew(ref LabComponent lab, bool researchMode, int recpId, int techId, SignData[] signPool, LabComponent[] labPool)
public static void SetFunctionManually(ref LabComponent lab, bool researchMode, int recpId, int techId, SignData[] signPool, LabComponent[] labPool)
{
var rootLabId = (int)RootLabIdField.GetValue(lab);
if (rootLabId > 0)
{
ref var rootLab = ref labPool[rootLabId];
if (researchMode != rootLab.researchMode)
{
SetFunctionInternal(ref rootLab, researchMode, recpId, techId, signPool, labPool);
}
else if (researchMode)
{
if (rootLab.techId != techId)
{
SetFunctionInternal(ref rootLab, true, recpId, techId, signPool, labPool);
}
}
else
{
if (rootLab.recipeId != recpId)
{
SetFunctionInternal(ref rootLab, false, recpId, techId, signPool, labPool);
}
}
}
SetFunctionInternal(ref lab, researchMode, recpId, techId, signPool, labPool);
}
private static void SetFunctionInternal(ref LabComponent lab, bool researchMode, int recpId, int techId, SignData[] signPool, LabComponent[] labPool)
{
// LabOptPatch.Logger.LogDebug($"SetFunctionNew: {lab.id} {(int)RootLabIdField.GetValue(lab)} {researchMode} {recpId} {techId}");
lab.replicating = false;

View File

@@ -172,7 +172,7 @@ public class LabOptPatch : BaseUnityPlugin
return matcher.InstructionEnumeration();
}
// Redirect call of LabComponent.SetFunction() to SetFunctionNew()
// Redirect call of LabComponent.SetFunction() to SetFunctionManually()
[HarmonyTranspiler]
[HarmonyPatch(typeof(BuildingParameters), nameof(BuildingParameters.ApplyPrebuildParametersToEntity))]
private static IEnumerable<CodeInstruction> BuildingParameters_ApplyPrebuildParametersToEntity_Transpiler(IEnumerable<CodeInstruction> instructions, ILGenerator generator)
@@ -186,7 +186,7 @@ public class LabOptPatch : BaseUnityPlugin
new CodeInstruction(OpCodes.Ldloc_2),
new CodeInstruction(OpCodes.Ldfld, AccessTools.Field(typeof(FactorySystem), nameof(FactorySystem.labPool)))
).SetInstructionAndAdvance(
new CodeInstruction(OpCodes.Call, AccessTools.Method(typeof(LabOptPatchFunctions), nameof(LabOptPatchFunctions.SetFunctionNew)))
new CodeInstruction(OpCodes.Call, AccessTools.Method(typeof(LabOptPatchFunctions), nameof(LabOptPatchFunctions.SetFunctionManually)))
);
});
return matcher.InstructionEnumeration();
@@ -205,7 +205,7 @@ public class LabOptPatch : BaseUnityPlugin
new CodeInstruction(OpCodes.Ldfld, AccessTools.Field(typeof(PlanetFactory), nameof(PlanetFactory.factorySystem))),
new CodeInstruction(OpCodes.Ldfld, AccessTools.Field(typeof(FactorySystem), nameof(FactorySystem.labPool)))
).SetInstructionAndAdvance(
new CodeInstruction(OpCodes.Call, AccessTools.Method(typeof(LabOptPatchFunctions), nameof(LabOptPatchFunctions.SetFunctionNew)))
new CodeInstruction(OpCodes.Call, AccessTools.Method(typeof(LabOptPatchFunctions), nameof(LabOptPatchFunctions.SetFunctionManually)))
);
});
return matcher.InstructionEnumeration();
@@ -227,7 +227,7 @@ public class LabOptPatch : BaseUnityPlugin
new CodeInstruction(OpCodes.Ldarg_0),
new CodeInstruction(OpCodes.Ldfld, AccessTools.Field(typeof(FactorySystem), nameof(FactorySystem.labPool)))
).SetInstructionAndAdvance(
new CodeInstruction(OpCodes.Call, AccessTools.Method(typeof(LabOptPatchFunctions), nameof(LabOptPatchFunctions.SetFunctionNew)))
new CodeInstruction(OpCodes.Call, AccessTools.Method(typeof(LabOptPatchFunctions), nameof(LabOptPatchFunctions.SetFunctionManually)))
);
});
return matcher.InstructionEnumeration();
@@ -247,7 +247,7 @@ public class LabOptPatch : BaseUnityPlugin
new CodeInstruction(OpCodes.Ldfld, AccessTools.Field(typeof(UILabWindow), nameof(UILabWindow.factorySystem))),
new CodeInstruction(OpCodes.Ldfld, AccessTools.Field(typeof(FactorySystem), nameof(FactorySystem.labPool)))
).SetInstructionAndAdvance(
new CodeInstruction(OpCodes.Call, AccessTools.Method(typeof(LabOptPatchFunctions), nameof(LabOptPatchFunctions.SetFunctionNew)))
new CodeInstruction(OpCodes.Call, AccessTools.Method(typeof(LabOptPatchFunctions), nameof(LabOptPatchFunctions.SetFunctionManually)))
);
});
return matcher.InstructionEnumeration();

View File

@@ -5,7 +5,7 @@
<AssemblyName>LabOpt</AssemblyName>
<BepInExPluginGuid>org.soardev.labopt</BepInExPluginGuid>
<Description>DSP MOD - LabOpt</Description>
<Version>0.3.3</Version>
<Version>0.3.4</Version>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<LangVersion>latest</LangVersion>
</PropertyGroup>

View File

@@ -4,6 +4,8 @@
#### 优化研究站性能
## Updates
* 0.3.4
* Fix various crashes on recipe/research mode changing on labs that are not base level.
* 0.3.3
* Add a lock to `PlanetFactory.PickFrom()` to avoid thread-conflicts.
* 0.3.2

View File

@@ -1,6 +1,6 @@
{
"name": "LabOpt",
"version_number": "0.3.3",
"version_number": "0.3.4",
"website_url": "https://github.com/soarqin/DSP_Mods/tree/master/LabOpt",
"description": "Optimize Lab performance / 优化研究站性能",
"dependencies": [