From 884700d896ed616bb246cdff5264aeee9c0d459f Mon Sep 17 00:00:00 2001 From: Soar Qin Date: Wed, 30 Aug 2023 21:12:49 +0800 Subject: [PATCH] WIP --- DSP_Mods.sln | 6 +++ PoolOpt/PoolOpt.cs | 78 ++++++++++++++++++++++++++++++++++ PoolOpt/PoolOpt.csproj | 27 ++++++++++++ PoolOpt/README.md | 4 ++ PoolOpt/package/icon.png | Bin 0 -> 5785 bytes PoolOpt/package/manifest.json | 9 ++++ 6 files changed, 124 insertions(+) create mode 100644 PoolOpt/PoolOpt.cs create mode 100644 PoolOpt/PoolOpt.csproj create mode 100644 PoolOpt/README.md create mode 100644 PoolOpt/package/icon.png create mode 100644 PoolOpt/package/manifest.json 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 0000000000000000000000000000000000000000..e197cee6a9185620026b5cace587dd77301cc38d GIT binary patch literal 5785 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 EKS8bT!vFvP literal 0 HcmV?d00001 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" + ] +}