diff --git a/DSP_Mods.sln b/DSP_Mods.sln index f6f2f9a..f33bb42 100644 --- a/DSP_Mods.sln +++ b/DSP_Mods.sln @@ -27,6 +27,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LabOptPreloader", "LabOptPr EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DustbinPreloader", "DustbinPreloader\DustbinPreloader.csproj", "{B8EB3D8D-5613-42F0-9040-EAA11A38C6AC}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PoolOpt", "PoolOpt\PoolOpt.csproj", "{8BE61246-2C9D-4088-AA33-5AFF22C5046E}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -81,5 +83,9 @@ Global {B8EB3D8D-5613-42F0-9040-EAA11A38C6AC}.Debug|Any CPU.Build.0 = Debug|Any CPU {B8EB3D8D-5613-42F0-9040-EAA11A38C6AC}.Release|Any CPU.ActiveCfg = Release|Any CPU {B8EB3D8D-5613-42F0-9040-EAA11A38C6AC}.Release|Any CPU.Build.0 = Release|Any CPU + {8BE61246-2C9D-4088-AA33-5AFF22C5046E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8BE61246-2C9D-4088-AA33-5AFF22C5046E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8BE61246-2C9D-4088-AA33-5AFF22C5046E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8BE61246-2C9D-4088-AA33-5AFF22C5046E}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection EndGlobal diff --git a/PoolOpt/PoolOpt.cs b/PoolOpt/PoolOpt.cs new file mode 100644 index 0000000..01b72e3 --- /dev/null +++ b/PoolOpt/PoolOpt.cs @@ -0,0 +1,78 @@ +using BepInEx; +using HarmonyLib; + +namespace PoolOpt; + +[BepInPlugin(PluginInfo.PLUGIN_GUID, PluginInfo.PLUGIN_NAME, PluginInfo.PLUGIN_VERSION)] +public class PoolOptPatch : BaseUnityPlugin +{ + public new static readonly BepInEx.Logging.ManualLogSource Logger = + BepInEx.Logging.Logger.CreateLogSource(PluginInfo.PLUGIN_NAME); + + private void Awake() + { + Harmony.CreateAndPatchAll(typeof(PoolOptPatch)); + } + + [HarmonyPostfix] + [HarmonyPatch(typeof(GameSave), nameof(GameSave.LoadCurrentGame))] + private static void GameSave_LoadCurrentGame_Postfix() + { + DebugOutput(); + } + + private static void DebugOutput() + { + foreach (var planet in GameMain.data.factories) + { + if (planet == null) continue; + Logger.LogDebug($"Planet: {planet.planetId}"); + var cargoTraffic = planet.cargoTraffic; + if (cargoTraffic != null) + { + Logger.LogDebug($" Cargo: Belt=[{cargoTraffic.beltCursor},{cargoTraffic.beltCapacity},{cargoTraffic.beltRecycleCursor}]"); + Logger.LogDebug($" Path=[{cargoTraffic.pathCursor},{cargoTraffic.pathCapacity},{cargoTraffic.pathRecycleCursor}]"); + Logger.LogDebug($" Splitter=[{cargoTraffic.splitterCursor},{cargoTraffic.splitterCapacity},{cargoTraffic.splitterRecycleCursor}]"); + Logger.LogDebug($" Monitor=[{cargoTraffic.monitorCursor},{cargoTraffic.monitorCapacity},{cargoTraffic.monitorRecycleCursor}]"); + Logger.LogDebug($" Spraycoater=[{cargoTraffic.spraycoaterCursor},{cargoTraffic.spraycoaterCapacity},{cargoTraffic.spraycoaterRecycleCursor}]"); + Logger.LogDebug($" Piler=[{cargoTraffic.pilerCursor},{cargoTraffic.pilerCapacity},{cargoTraffic.pilerRecycleCursor}]"); + } + + var factoryStorage = planet.factoryStorage; + if (factoryStorage != null) + { + Logger.LogDebug($" Storage: Storage=[{factoryStorage.storageCursor},{factoryStorage.storageCapacity},{factoryStorage.storageRecycleCursor}]"); + Logger.LogDebug($" Tank=[{factoryStorage.tankCursor},{factoryStorage.tankCapacity},{factoryStorage.tankRecycleCursor}]"); + } + var factorySystem = planet.factorySystem; + if (factorySystem != null) + { + Logger.LogDebug($" Factory: Storage=[{factorySystem.minerCursor},{factorySystem.minerCapacity},{factorySystem.minerRecycleCursor}]"); + Logger.LogDebug($" Inserter=[{factorySystem.inserterCursor},{factorySystem.inserterCapacity},{factorySystem.inserterRecycleCursor}]"); + Logger.LogDebug($" Assembler=[{factorySystem.assemblerCursor},{factorySystem.assemblerCapacity},{factorySystem.assemblerRecycleCursor}]"); + Logger.LogDebug($" Fractionator=[{factorySystem.fractionatorCursor},{factorySystem.fractionatorCapacity},{factorySystem.fractionatorRecycleCursor}]"); + Logger.LogDebug($" Ejector=[{factorySystem.ejectorCursor},{factorySystem.ejectorCapacity},{factorySystem.ejectorRecycleCursor}]"); + Logger.LogDebug($" Silo=[{factorySystem.siloCursor},{factorySystem.siloCapacity},{factorySystem.siloRecycleCursor}]"); + Logger.LogDebug($" Lab=[{factorySystem.labCursor},{factorySystem.labCapacity},{factorySystem.labRecycleCursor}]"); + } + + var transport = planet.transport; + if (transport != null) + { + Logger.LogDebug($" Transport: Station=[{transport.stationCursor},{transport.stationCapacity},{transport.stationRecycleCursor}]"); + Logger.LogDebug($" Dispenser=[{transport.dispenserCursor},{transport.dispenserCapacity},{transport.dispenserRecycleCursor}]"); + } + + var powerSystem = planet.powerSystem; + if (powerSystem != null) + { + Logger.LogDebug($" Power: Gen=[{powerSystem.genCursor},{powerSystem.genCapacity},{powerSystem.genRecycleCursor}]"); + Logger.LogDebug($" Node=[{powerSystem.nodeCursor},{powerSystem.nodeCapacity},{powerSystem.nodeRecycleCursor}]"); + Logger.LogDebug($" consumer=[{powerSystem.consumerCursor},{powerSystem.consumerCapacity},{powerSystem.consumerRecycleCursor}]"); + Logger.LogDebug($" acc=[{powerSystem.accCursor},{powerSystem.accCapacity},{powerSystem.accRecycleCursor}]"); + Logger.LogDebug($" exc=[{powerSystem.excCursor},{powerSystem.excCapacity},{powerSystem.excRecycleCursor}]"); + Logger.LogDebug($" net=[{powerSystem.netCursor},{powerSystem.netCapacity},{powerSystem.netRecycleCursor}]"); + } + } + } +} diff --git a/PoolOpt/PoolOpt.csproj b/PoolOpt/PoolOpt.csproj new file mode 100644 index 0000000..27f7b05 --- /dev/null +++ b/PoolOpt/PoolOpt.csproj @@ -0,0 +1,27 @@ + + + + net472 + PoolOpt + org.soardev.poolopt + DSP MOD - PoolOpt + 0.1.0 + true + latest + + + + + + + + + + + + + + + + + diff --git a/PoolOpt/README.md b/PoolOpt/README.md new file mode 100644 index 0000000..c1879e5 --- /dev/null +++ b/PoolOpt/README.md @@ -0,0 +1,4 @@ +# PoolOpt + +#### Optimize memory pools on loading gamesaves +#### 加载游戏存档时优化内存池的使用 diff --git a/PoolOpt/package/icon.png b/PoolOpt/package/icon.png new file mode 100644 index 0000000..e197cee Binary files /dev/null and b/PoolOpt/package/icon.png differ diff --git a/PoolOpt/package/manifest.json b/PoolOpt/package/manifest.json new file mode 100644 index 0000000..9aa9711 --- /dev/null +++ b/PoolOpt/package/manifest.json @@ -0,0 +1,9 @@ +{ + "name": "PoolOpt", + "version_number": "0.1.0", + "website_url": "https://github.com/soarqin/DSP_Mods/tree/master/PoolOpt", + "description": "Optimize memory pools on loading gamesaves / 加载游戏存档时优化内存池的使用", + "dependencies": [ + "xiaoye97-BepInEx-5.4.17" + ] +}