1
0
mirror of https://github.com/soarqin/DSP_Mods.git synced 2025-12-11 06:43:29 +08:00

PoolOpt 0.9.3

This commit is contained in:
2023-09-05 18:28:43 +08:00
parent d7943f1751
commit a54ea58d71
5 changed files with 172 additions and 51 deletions

View File

@@ -24,60 +24,76 @@ public class PoolOptPatch : BaseUnityPlugin
foreach (var planet in GameMain.data.factories) foreach (var planet in GameMain.data.factories)
{ {
if (planet == null) continue; if (planet == null) continue;
var oldLen = planet.entityPool.Length; if (OptimizePool((in EntityData n) => n.id, () =>
if (OptimizePool((in EntityData n) => n.id, () => { planet.SetEntityCapacity(1024); }, {
planet.entityCapacity = 0;
planet.SetEntityCapacity(1024);
},
ref planet.entityPool, ref planet.entityCursor, ref planet.entityCapacity, ref planet.entityPool, ref planet.entityCursor, ref planet.entityCapacity,
ref planet.entityRecycle, ref planet.entityRecycleCursor)) ref planet.entityRecycle, ref planet.entityRecycleCursor))
{ {
if (oldLen != planet.entityPool.Length)
{
var newLen = planet.entityPool.Length;
planet.entityAnimPool = new AnimData[newLen];
planet.entitySignPool = new SignData[newLen];
planet.entityConnPool = new int[newLen];
planet.entityMutexs = new Mutex[newLen];
planet.entityNeeds = new int[newLen][];
}
Logger.LogDebug($"Optimized `{nameof(planet.entityPool)}` on Planet {planet.planetId}"); Logger.LogDebug($"Optimized `{nameof(planet.entityPool)}` on Planet {planet.planetId}");
} }
oldLen = planet.prebuildPool.Length; if (OptimizePool((in PrebuildData n) => n.id, () =>
if (OptimizePool((in PrebuildData n) => n.id, () => { planet.SetPrebuildCapacity(256); }, {
planet.prebuildCapacity = 0;
planet.SetPrebuildCapacity(256);
},
ref planet.prebuildPool, ref planet.prebuildCursor, ref planet.prebuildCapacity, ref planet.prebuildPool, ref planet.prebuildCursor, ref planet.prebuildCapacity,
ref planet.prebuildRecycle, ref planet.prebuildRecycleCursor)) ref planet.prebuildRecycle, ref planet.prebuildRecycleCursor))
{ {
Logger.LogDebug($"Optimized `{nameof(planet.prebuildPool)}` on Planet {planet.planetId}"); Logger.LogDebug($"Optimized `{nameof(planet.prebuildPool)}` on Planet {planet.planetId}");
if (oldLen != planet.prebuildPool.Length)
{
var newLen = planet.prebuildPool.Length;
planet.prebuildConnPool = new int[newLen];
}
} }
var cargoTraffic = planet.cargoTraffic; var cargoTraffic = planet.cargoTraffic;
if (cargoTraffic != null) if (cargoTraffic != null)
{ {
if (OptimizePool((in BeltComponent n) => n.id, () => { cargoTraffic.SetBeltCapacity(16); }, if (OptimizePool((in BeltComponent n) => n.id, () =>
{
cargoTraffic.beltCapacity = 0;
cargoTraffic.SetBeltCapacity(16);
},
ref cargoTraffic.beltPool, ref cargoTraffic.beltCursor, ref cargoTraffic.beltCapacity, ref cargoTraffic.beltPool, ref cargoTraffic.beltCursor, ref cargoTraffic.beltCapacity,
ref cargoTraffic.beltRecycle, ref cargoTraffic.beltRecycleCursor)) ref cargoTraffic.beltRecycle, ref cargoTraffic.beltRecycleCursor))
Logger.LogDebug($"Optimized `{nameof(cargoTraffic.beltPool)}` on Planet {planet.planetId}"); Logger.LogDebug($"Optimized `{nameof(cargoTraffic.beltPool)}` on Planet {planet.planetId}");
if (OptimizePool((in CargoPath n) => n?.id ?? 0, () => { cargoTraffic.SetPathCapacity(16); }, if (OptimizePool((in CargoPath n) => n?.id ?? 0, () =>
{
cargoTraffic.pathCapacity = 0;
cargoTraffic.SetPathCapacity(16);
},
ref cargoTraffic.pathPool, ref cargoTraffic.pathCursor, ref cargoTraffic.pathCapacity, ref cargoTraffic.pathPool, ref cargoTraffic.pathCursor, ref cargoTraffic.pathCapacity,
ref cargoTraffic.pathRecycle, ref cargoTraffic.pathRecycleCursor)) ref cargoTraffic.pathRecycle, ref cargoTraffic.pathRecycleCursor))
Logger.LogDebug($"Optimized `{nameof(cargoTraffic.pathPool)}` on Planet {planet.planetId}"); Logger.LogDebug($"Optimized `{nameof(cargoTraffic.pathPool)}` on Planet {planet.planetId}");
if (OptimizePool((in SplitterComponent n) => n.id, () => { cargoTraffic.SetSplitterCapacity(16); }, if (OptimizePool((in SplitterComponent n) => n.id, () =>
{
cargoTraffic.splitterCapacity = 0;
cargoTraffic.SetSplitterCapacity(16);
},
ref cargoTraffic.splitterPool, ref cargoTraffic.splitterCursor, ref cargoTraffic.splitterCapacity, ref cargoTraffic.splitterPool, ref cargoTraffic.splitterCursor, ref cargoTraffic.splitterCapacity,
ref cargoTraffic.splitterRecycle, ref cargoTraffic.splitterRecycleCursor)) ref cargoTraffic.splitterRecycle, ref cargoTraffic.splitterRecycleCursor))
Logger.LogDebug($"Optimized `{nameof(cargoTraffic.splitterPool)}` on Planet {planet.planetId}"); Logger.LogDebug($"Optimized `{nameof(cargoTraffic.splitterPool)}` on Planet {planet.planetId}");
if (OptimizePool((in MonitorComponent n) => n.id, () => { cargoTraffic.SetMonitorCapacity(16); }, if (OptimizePool((in MonitorComponent n) => n.id, () =>
{
cargoTraffic.monitorCapacity = 0;
cargoTraffic.SetMonitorCapacity(16);
},
ref cargoTraffic.monitorPool, ref cargoTraffic.monitorCursor, ref cargoTraffic.monitorCapacity, ref cargoTraffic.monitorPool, ref cargoTraffic.monitorCursor, ref cargoTraffic.monitorCapacity,
ref cargoTraffic.monitorRecycle, ref cargoTraffic.monitorRecycleCursor)) ref cargoTraffic.monitorRecycle, ref cargoTraffic.monitorRecycleCursor))
Logger.LogDebug($"Optimized `{nameof(cargoTraffic.monitorPool)}` on Planet {planet.planetId}"); Logger.LogDebug($"Optimized `{nameof(cargoTraffic.monitorPool)}` on Planet {planet.planetId}");
if (OptimizePool((in SpraycoaterComponent n) => n.id, () => { cargoTraffic.SetSpraycoaterCapacity(16); }, if (OptimizePool((in SpraycoaterComponent n) => n.id, () =>
{
cargoTraffic.spraycoaterCapacity = 0;
cargoTraffic.SetSpraycoaterCapacity(16);
},
ref cargoTraffic.spraycoaterPool, ref cargoTraffic.spraycoaterCursor, ref cargoTraffic.spraycoaterCapacity, ref cargoTraffic.spraycoaterPool, ref cargoTraffic.spraycoaterCursor, ref cargoTraffic.spraycoaterCapacity,
ref cargoTraffic.spraycoaterRecycle, ref cargoTraffic.spraycoaterRecycleCursor)) ref cargoTraffic.spraycoaterRecycle, ref cargoTraffic.spraycoaterRecycleCursor))
Logger.LogDebug($"Optimized `{nameof(cargoTraffic.spraycoaterPool)}` on Planet {planet.planetId}"); Logger.LogDebug($"Optimized `{nameof(cargoTraffic.spraycoaterPool)}` on Planet {planet.planetId}");
if (OptimizePool((in PilerComponent n) => n.id, () => { cargoTraffic.SetPilerCapacity(16); }, if (OptimizePool((in PilerComponent n) => n.id, () =>
{
cargoTraffic.pilerCapacity = 0;
cargoTraffic.SetPilerCapacity(16);
},
ref cargoTraffic.pilerPool, ref cargoTraffic.pilerCursor, ref cargoTraffic.pilerCapacity, ref cargoTraffic.pilerPool, ref cargoTraffic.pilerCursor, ref cargoTraffic.pilerCapacity,
ref cargoTraffic.pilerRecycle, ref cargoTraffic.pilerRecycleCursor)) ref cargoTraffic.pilerRecycle, ref cargoTraffic.pilerRecycleCursor))
Logger.LogDebug($"Optimized `{nameof(cargoTraffic.pilerPool)}` on Planet {planet.planetId}"); Logger.LogDebug($"Optimized `{nameof(cargoTraffic.pilerPool)}` on Planet {planet.planetId}");
@@ -85,11 +101,19 @@ public class PoolOptPatch : BaseUnityPlugin
var factoryStorage = planet.factoryStorage; var factoryStorage = planet.factoryStorage;
if (factoryStorage != null) if (factoryStorage != null)
{ {
if (OptimizePool((in StorageComponent n) => n?.id ?? 0, () => { factoryStorage.SetStorageCapacity(64); }, if (OptimizePool((in StorageComponent n) => n?.id ?? 0, () =>
{
factoryStorage.storageCapacity = 0;
factoryStorage.SetStorageCapacity(64);
},
ref factoryStorage.storagePool, ref factoryStorage.storageCursor, ref factoryStorage.storageCapacity, ref factoryStorage.storagePool, ref factoryStorage.storageCursor, ref factoryStorage.storageCapacity,
ref factoryStorage.storageRecycle, ref factoryStorage.storageRecycleCursor)) ref factoryStorage.storageRecycle, ref factoryStorage.storageRecycleCursor))
Logger.LogDebug($"Optimized `{nameof(factoryStorage.storagePool)}` on Planet {planet.planetId}"); Logger.LogDebug($"Optimized `{nameof(factoryStorage.storagePool)}` on Planet {planet.planetId}");
if (OptimizePool((in TankComponent n) => n.id, () => { factoryStorage.SetTankCapacity(256); }, if (OptimizePool((in TankComponent n) => n.id, () =>
{
factoryStorage.tankCapacity = 0;
factoryStorage.SetTankCapacity(256);
},
ref factoryStorage.tankPool, ref factoryStorage.tankCursor, ref factoryStorage.tankCapacity, ref factoryStorage.tankPool, ref factoryStorage.tankCursor, ref factoryStorage.tankCapacity,
ref factoryStorage.tankRecycle, ref factoryStorage.tankRecycleCursor)) ref factoryStorage.tankRecycle, ref factoryStorage.tankRecycleCursor))
Logger.LogDebug($"Optimized `{nameof(factoryStorage.tankPool)}` on Planet {planet.planetId}"); Logger.LogDebug($"Optimized `{nameof(factoryStorage.tankPool)}` on Planet {planet.planetId}");
@@ -97,31 +121,59 @@ public class PoolOptPatch : BaseUnityPlugin
var factorySystem = planet.factorySystem; var factorySystem = planet.factorySystem;
if (factorySystem != null) if (factorySystem != null)
{ {
if (OptimizePool((in MinerComponent n) => n.id, () => { factorySystem.SetMinerCapacity(256); }, if (OptimizePool((in MinerComponent n) => n.id, () =>
{
factorySystem.minerCapacity = 0;
factorySystem.SetMinerCapacity(256);
},
ref factorySystem.minerPool, ref factorySystem.minerCursor, ref factorySystem.minerCapacity, ref factorySystem.minerPool, ref factorySystem.minerCursor, ref factorySystem.minerCapacity,
ref factorySystem.minerRecycle, ref factorySystem.minerRecycleCursor)) ref factorySystem.minerRecycle, ref factorySystem.minerRecycleCursor))
Logger.LogDebug($"Optimized `{nameof(factorySystem.minerPool)}` on Planet {planet.planetId}"); Logger.LogDebug($"Optimized `{nameof(factorySystem.minerPool)}` on Planet {planet.planetId}");
if (OptimizePool((in InserterComponent n) => n.id, () => { factorySystem.SetInserterCapacity(256); }, if (OptimizePool((in InserterComponent n) => n.id, () =>
{
factorySystem.inserterCapacity = 0;
factorySystem.SetInserterCapacity(256);
},
ref factorySystem.inserterPool, ref factorySystem.inserterCursor, ref factorySystem.inserterCapacity, ref factorySystem.inserterPool, ref factorySystem.inserterCursor, ref factorySystem.inserterCapacity,
ref factorySystem.inserterRecycle, ref factorySystem.inserterRecycleCursor)) ref factorySystem.inserterRecycle, ref factorySystem.inserterRecycleCursor))
Logger.LogDebug($"Optimized `{nameof(factorySystem.inserterPool)}` on Planet {planet.planetId}"); Logger.LogDebug($"Optimized `{nameof(factorySystem.inserterPool)}` on Planet {planet.planetId}");
if (OptimizePool((in AssemblerComponent n) => n.id, () => { factorySystem.SetAssemblerCapacity(256); }, if (OptimizePool((in AssemblerComponent n) => n.id, () =>
{
factorySystem.assemblerCapacity = 0;
factorySystem.SetAssemblerCapacity(256);
},
ref factorySystem.assemblerPool, ref factorySystem.assemblerCursor, ref factorySystem.assemblerCapacity, ref factorySystem.assemblerPool, ref factorySystem.assemblerCursor, ref factorySystem.assemblerCapacity,
ref factorySystem.assemblerRecycle, ref factorySystem.assemblerRecycleCursor)) ref factorySystem.assemblerRecycle, ref factorySystem.assemblerRecycleCursor))
Logger.LogDebug($"Optimized `{nameof(factorySystem.assemblerPool)}` on Planet {planet.planetId}"); Logger.LogDebug($"Optimized `{nameof(factorySystem.assemblerPool)}` on Planet {planet.planetId}");
if (OptimizePool((in FractionatorComponent n) => n.id, () => { factorySystem.SetFractionatorCapacity(32); }, if (OptimizePool((in FractionatorComponent n) => n.id, () =>
{
factorySystem.fractionatorCapacity = 0;
factorySystem.SetFractionatorCapacity(32);
},
ref factorySystem.fractionatorPool, ref factorySystem.fractionatorCursor, ref factorySystem.fractionatorCapacity, ref factorySystem.fractionatorPool, ref factorySystem.fractionatorCursor, ref factorySystem.fractionatorCapacity,
ref factorySystem.fractionatorRecycle, ref factorySystem.fractionatorRecycleCursor)) ref factorySystem.fractionatorRecycle, ref factorySystem.fractionatorRecycleCursor))
Logger.LogDebug($"Optimized `{nameof(factorySystem.fractionatorPool)}` on Planet {planet.planetId}"); Logger.LogDebug($"Optimized `{nameof(factorySystem.fractionatorPool)}` on Planet {planet.planetId}");
if (OptimizePool((in EjectorComponent n) => n.id, () => { factorySystem.SetEjectorCapacity(32); }, if (OptimizePool((in EjectorComponent n) => n.id, () =>
{
factorySystem.ejectorCapacity = 0;
factorySystem.SetEjectorCapacity(32);
},
ref factorySystem.ejectorPool, ref factorySystem.ejectorCursor, ref factorySystem.ejectorCapacity, ref factorySystem.ejectorPool, ref factorySystem.ejectorCursor, ref factorySystem.ejectorCapacity,
ref factorySystem.ejectorRecycle, ref factorySystem.ejectorRecycleCursor)) ref factorySystem.ejectorRecycle, ref factorySystem.ejectorRecycleCursor))
Logger.LogDebug($"Optimized `{nameof(factorySystem.ejectorPool)}` on Planet {planet.planetId}"); Logger.LogDebug($"Optimized `{nameof(factorySystem.ejectorPool)}` on Planet {planet.planetId}");
if (OptimizePool((in SiloComponent n) => n.id, () => { factorySystem.SetSiloCapacity(32); }, if (OptimizePool((in SiloComponent n) => n.id, () =>
{
factorySystem.siloCapacity = 0;
factorySystem.SetSiloCapacity(32);
},
ref factorySystem.siloPool, ref factorySystem.siloCursor, ref factorySystem.siloCapacity, ref factorySystem.siloPool, ref factorySystem.siloCursor, ref factorySystem.siloCapacity,
ref factorySystem.siloRecycle, ref factorySystem.siloRecycleCursor)) ref factorySystem.siloRecycle, ref factorySystem.siloRecycleCursor))
Logger.LogDebug($"Optimized `{nameof(factorySystem.siloPool)}` on Planet {planet.planetId}"); Logger.LogDebug($"Optimized `{nameof(factorySystem.siloPool)}` on Planet {planet.planetId}");
if (OptimizePool((in LabComponent n) => n.id, () => { factorySystem.SetLabCapacity(256); }, if (OptimizePool((in LabComponent n) => n.id, () =>
{
factorySystem.labCapacity = 0;
factorySystem.SetLabCapacity(256);
},
ref factorySystem.labPool, ref factorySystem.labCursor, ref factorySystem.labCapacity, ref factorySystem.labPool, ref factorySystem.labCursor, ref factorySystem.labCapacity,
ref factorySystem.labRecycle, ref factorySystem.labRecycleCursor)) ref factorySystem.labRecycle, ref factorySystem.labRecycleCursor))
Logger.LogDebug($"Optimized `{nameof(factorySystem.labPool)}` on Planet {planet.planetId}"); Logger.LogDebug($"Optimized `{nameof(factorySystem.labPool)}` on Planet {planet.planetId}");
@@ -129,11 +181,19 @@ public class PoolOptPatch : BaseUnityPlugin
var transport = planet.transport; var transport = planet.transport;
if (transport != null) if (transport != null)
{ {
if (OptimizePool((in StationComponent n) => n?.id ?? 0, () => { transport.SetStationCapacity(16); }, if (OptimizePool((in StationComponent n) => n?.id ?? 0, () =>
{
transport.stationCapacity = 0;
transport.SetStationCapacity(16);
},
ref transport.stationPool, ref transport.stationCursor, ref transport.stationCapacity, ref transport.stationPool, ref transport.stationCursor, ref transport.stationCapacity,
ref transport.stationRecycle, ref transport.stationRecycleCursor)) ref transport.stationRecycle, ref transport.stationRecycleCursor))
Logger.LogDebug($"Optimized `{nameof(transport.stationPool)}` on Planet {planet.planetId}"); Logger.LogDebug($"Optimized `{nameof(transport.stationPool)}` on Planet {planet.planetId}");
if (OptimizePool((in DispenserComponent n) => n?.id ?? 0, () => { transport.SetDispenserCapacity(8); }, if (OptimizePool((in DispenserComponent n) => n?.id ?? 0, () =>
{
transport.dispenserCapacity = 0;
transport.SetDispenserCapacity(8);
},
ref transport.dispenserPool, ref transport.dispenserCursor, ref transport.dispenserCapacity, ref transport.dispenserPool, ref transport.dispenserCursor, ref transport.dispenserCapacity,
ref transport.dispenserRecycle, ref transport.dispenserRecycleCursor)) ref transport.dispenserRecycle, ref transport.dispenserRecycleCursor))
Logger.LogDebug($"Optimized `{nameof(transport.dispenserPool)}` on Planet {planet.planetId}"); Logger.LogDebug($"Optimized `{nameof(transport.dispenserPool)}` on Planet {planet.planetId}");
@@ -142,27 +202,53 @@ public class PoolOptPatch : BaseUnityPlugin
var powerSystem = planet.powerSystem; var powerSystem = planet.powerSystem;
if (powerSystem != null) if (powerSystem != null)
{ {
if (OptimizePool((in PowerGeneratorComponent n) => n.id, () => { powerSystem.SetGeneratorCapacity(8); }, if (OptimizePool((in PowerGeneratorComponent n) => n.id, () =>
{
powerSystem.genCapacity = 0;
powerSystem.SetGeneratorCapacity(8);
},
ref powerSystem.genPool, ref powerSystem.genCursor, ref powerSystem.genCapacity, ref powerSystem.genPool, ref powerSystem.genCursor, ref powerSystem.genCapacity,
ref powerSystem.genRecycle, ref powerSystem.genRecycleCursor)) ref powerSystem.genRecycle, ref powerSystem.genRecycleCursor))
Logger.LogDebug($"Optimized `{nameof(powerSystem.genPool)}` on Planet {planet.planetId}"); Logger.LogDebug($"Optimized `{nameof(powerSystem.genPool)}` on Planet {planet.planetId}");
if (OptimizePool((in PowerNodeComponent n) => n.id, () => { powerSystem.SetNodeCapacity(8); }, if (OptimizePool((in PowerNodeComponent n) => n.id, () =>
{
powerSystem.nodeCapacity = 0;
powerSystem.SetNodeCapacity(8);
},
ref powerSystem.nodePool, ref powerSystem.nodeCursor, ref powerSystem.nodeCapacity, ref powerSystem.nodePool, ref powerSystem.nodeCursor, ref powerSystem.nodeCapacity,
ref powerSystem.nodeRecycle, ref powerSystem.nodeRecycleCursor)) ref powerSystem.nodeRecycle, ref powerSystem.nodeRecycleCursor))
Logger.LogDebug($"Optimized `{nameof(powerSystem.nodePool)}` on Planet {planet.planetId}"); Logger.LogDebug($"Optimized `{nameof(powerSystem.nodePool)}` on Planet {planet.planetId}");
if (OptimizePool((in PowerConsumerComponent n) => n.id, () => { powerSystem.SetConsumerCapacity(8); }, if (OptimizePool((in PowerConsumerComponent n) => n.id, () =>
{
powerSystem.consumerCapacity = 0;
powerSystem.SetConsumerCapacity(8);
},
ref powerSystem.consumerPool, ref powerSystem.consumerCursor, ref powerSystem.consumerCapacity, ref powerSystem.consumerPool, ref powerSystem.consumerCursor, ref powerSystem.consumerCapacity,
ref powerSystem.consumerRecycle, ref powerSystem.consumerRecycleCursor)) ref powerSystem.consumerRecycle, ref powerSystem.consumerRecycleCursor))
Logger.LogDebug($"Optimized `{nameof(powerSystem.consumerPool)}` on Planet {planet.planetId}"); Logger.LogDebug($"Optimized `{nameof(powerSystem.consumerPool)}` on Planet {planet.planetId}");
if (OptimizePool((in PowerAccumulatorComponent n) => n.id, () => { powerSystem.SetAccumulatorCapacity(8); }, if (OptimizePool((in PowerAccumulatorComponent n) => n.id, () =>
{
powerSystem.accCapacity = 0;
powerSystem.SetAccumulatorCapacity(8);
},
ref powerSystem.accPool, ref powerSystem.accCursor, ref powerSystem.accCapacity, ref powerSystem.accPool, ref powerSystem.accCursor, ref powerSystem.accCapacity,
ref powerSystem.accRecycle, ref powerSystem.accRecycleCursor)) ref powerSystem.accRecycle, ref powerSystem.accRecycleCursor))
Logger.LogDebug($"Optimized `{nameof(powerSystem.accPool)}` on Planet {planet.planetId}"); Logger.LogDebug($"Optimized `{nameof(powerSystem.accPool)}` on Planet {planet.planetId}");
if (OptimizePool((in PowerExchangerComponent n) => n.id, () => { powerSystem.SetExchangerCapacity(8); }, if (OptimizePool((in PowerExchangerComponent n) => n.id, () =>
{
powerSystem.excCapacity = 0;
powerSystem.SetExchangerCapacity(8);
},
ref powerSystem.excPool, ref powerSystem.excCursor, ref powerSystem.excCapacity, ref powerSystem.excPool, ref powerSystem.excCursor, ref powerSystem.excCapacity,
ref powerSystem.excRecycle, ref powerSystem.excRecycleCursor)) ref powerSystem.excRecycle, ref powerSystem.excRecycleCursor))
Logger.LogDebug($"Optimized `{nameof(powerSystem.excPool)}` on Planet {planet.planetId}"); Logger.LogDebug($"Optimized `{nameof(powerSystem.excPool)}` on Planet {planet.planetId}");
if (OptimizePool((in PowerNetwork n) => n?.id ?? 0, () => { powerSystem.SetNetworkCapacity(8); }, if (OptimizePool((in PowerNetwork n) => n?.id ?? 0, () =>
{
powerSystem.netCapacity = 0;
powerSystem.SetNetworkCapacity(8);
powerSystem.netPool[0] = new PowerNetwork();
powerSystem.netPool[0].Reset(0);
},
ref powerSystem.netPool, ref powerSystem.netCursor, ref powerSystem.netCapacity, ref powerSystem.netPool, ref powerSystem.netCursor, ref powerSystem.netCapacity,
ref powerSystem.netRecycle, ref powerSystem.netRecycleCursor)) ref powerSystem.netRecycle, ref powerSystem.netRecycleCursor))
Logger.LogDebug($"Optimized `{nameof(powerSystem.netPool)}` on Planet {planet.planetId}"); Logger.LogDebug($"Optimized `{nameof(powerSystem.netPool)}` on Planet {planet.planetId}");
@@ -171,7 +257,11 @@ public class PoolOptPatch : BaseUnityPlugin
var trashContainer = GameMain.data.trashSystem?.container; var trashContainer = GameMain.data.trashSystem?.container;
if (trashContainer != null) if (trashContainer != null)
{ {
if (OptimizePool((in TrashObject n) => n.item == 0, () => { trashContainer.SetTrashCapacity(16); }, if (OptimizePool((in TrashObject n) => n.item == 0, () =>
{
trashContainer.trashCapacity = 0;
trashContainer.SetTrashCapacity(16);
},
ref trashContainer.trashObjPool, ref trashContainer.trashCursor, ref trashContainer.trashCapacity, ref trashContainer.trashObjPool, ref trashContainer.trashCursor, ref trashContainer.trashCapacity,
ref trashContainer.trashRecycle, ref trashContainer.trashRecycleCursor)) ref trashContainer.trashRecycle, ref trashContainer.trashRecycleCursor))
{ {
@@ -181,7 +271,11 @@ public class PoolOptPatch : BaseUnityPlugin
var warningSystem = GameMain.data.warningSystem; var warningSystem = GameMain.data.warningSystem;
if (warningSystem != null) if (warningSystem != null)
{ {
if (OptimizePool((in WarningData n) => n.id, () => { warningSystem.SetWarningCapacity(32); }, if (OptimizePool((in WarningData n) => n.id, () =>
{
warningSystem.warningCapacity = 0;
warningSystem.SetWarningCapacity(32);
},
ref warningSystem.warningPool, ref warningSystem.warningCursor, ref warningSystem.warningCapacity, ref warningSystem.warningPool, ref warningSystem.warningCursor, ref warningSystem.warningCapacity,
ref warningSystem.warningRecycle, ref warningSystem.warningRecycleCursor)) ref warningSystem.warningRecycle, ref warningSystem.warningRecycleCursor))
Logger.LogDebug($"Optimized `{nameof(warningSystem.warningPool)}`"); Logger.LogDebug($"Optimized `{nameof(warningSystem.warningPool)}`");
@@ -192,11 +286,19 @@ public class PoolOptPatch : BaseUnityPlugin
foreach (var dysonSphere in dysonSpheres) foreach (var dysonSphere in dysonSpheres)
{ {
if (dysonSphere == null) continue; if (dysonSphere == null) continue;
if (OptimizePool((in DysonRocket n) => n.id, () => { dysonSphere.SetRocketCapacity(256); }, if (OptimizePool((in DysonRocket n) => n.id, () =>
{
dysonSphere.rocketCapacity = 0;
dysonSphere.SetRocketCapacity(256);
},
ref dysonSphere.rocketPool, ref dysonSphere.rocketCursor, ref dysonSphere.rocketCapacity, ref dysonSphere.rocketPool, ref dysonSphere.rocketCursor, ref dysonSphere.rocketCapacity,
ref dysonSphere.rocketRecycle, ref dysonSphere.rocketRecycleCursor)) ref dysonSphere.rocketRecycle, ref dysonSphere.rocketRecycleCursor))
Logger.LogDebug($"Optimized `{nameof(dysonSphere.rocketPool)}` on Star {dysonSphere.starData.id}"); Logger.LogDebug($"Optimized `{nameof(dysonSphere.rocketPool)}` on Star {dysonSphere.starData.id}");
if (OptimizePool((in DysonNodeRData n) => n.id, () => { dysonSphere.SetNrdCapacity(128); }, if (OptimizePool((in DysonNodeRData n) => n.id, () =>
{
dysonSphere.nrdCapacity = 0;
dysonSphere.SetNrdCapacity(128);
},
ref dysonSphere.nrdPool, ref dysonSphere.nrdCursor, ref dysonSphere.nrdCapacity, ref dysonSphere.nrdPool, ref dysonSphere.nrdCursor, ref dysonSphere.nrdCapacity,
ref dysonSphere.nrdRecycle, ref dysonSphere.nrdRecycleCursor)) ref dysonSphere.nrdRecycle, ref dysonSphere.nrdRecycleCursor))
Logger.LogDebug($"Optimized `{nameof(dysonSphere.nrdPool)}` on Star {dysonSphere.starData.id}"); Logger.LogDebug($"Optimized `{nameof(dysonSphere.nrdPool)}` on Star {dysonSphere.starData.id}");
@@ -204,15 +306,27 @@ public class PoolOptPatch : BaseUnityPlugin
foreach (var layer in dysonSphere.layersSorted) foreach (var layer in dysonSphere.layersSorted)
{ {
if (layer == null) continue; if (layer == null) continue;
if (OptimizePool((in DysonNode n) => n?.id ?? 0, () => { layer.SetNodeCapacity(64); }, if (OptimizePool((in DysonNode n) => n?.id ?? 0, () =>
{
layer.nodeCapacity = 64;
layer.SetNodeCapacity(64);
},
ref layer.nodePool, ref layer.nodeCursor, ref layer.nodeCapacity, ref layer.nodePool, ref layer.nodeCursor, ref layer.nodeCapacity,
ref layer.nodeRecycle, ref layer.nodeRecycleCursor)) ref layer.nodeRecycle, ref layer.nodeRecycleCursor))
Logger.LogDebug($"Optimized `{nameof(layer.nodePool)}` on Star {dysonSphere.starData.id} layer {layer.id}"); Logger.LogDebug($"Optimized `{nameof(layer.nodePool)}` on Star {dysonSphere.starData.id} layer {layer.id}");
if (OptimizePool((in DysonFrame n) => n?.id ?? 0, () => { layer.SetFrameCapacity(64); }, if (OptimizePool((in DysonFrame n) => n?.id ?? 0, () =>
{
layer.frameCapacity = 64;
layer.SetFrameCapacity(64);
},
ref layer.framePool, ref layer.frameCursor, ref layer.frameCapacity, ref layer.framePool, ref layer.frameCursor, ref layer.frameCapacity,
ref layer.frameRecycle, ref layer.frameRecycleCursor)) ref layer.frameRecycle, ref layer.frameRecycleCursor))
Logger.LogDebug($"Optimized `{nameof(layer.framePool)}` on Star {dysonSphere.starData.id} layer {layer.id}"); Logger.LogDebug($"Optimized `{nameof(layer.framePool)}` on Star {dysonSphere.starData.id} layer {layer.id}");
if (OptimizePool((in DysonShell n) => n?.id ?? 0, () => { layer.SetShellCapacity(64); }, if (OptimizePool((in DysonShell n) => n?.id ?? 0, () =>
{
layer.shellCapacity = 64;
layer.SetShellCapacity(64);
},
ref layer.shellPool, ref layer.shellCursor, ref layer.shellCapacity, ref layer.shellPool, ref layer.shellCursor, ref layer.shellCapacity,
ref layer.shellRecycle, ref layer.shellRecycleCursor)) ref layer.shellRecycle, ref layer.shellRecycleCursor))
Logger.LogDebug($"Optimized `{nameof(layer.shellPool)}` on Star {dysonSphere.starData.id} layer {layer.id}"); Logger.LogDebug($"Optimized `{nameof(layer.shellPool)}` on Star {dysonSphere.starData.id} layer {layer.id}");
@@ -221,7 +335,11 @@ public class PoolOptPatch : BaseUnityPlugin
var swarm = dysonSphere.swarm; var swarm = dysonSphere.swarm;
if (swarm != null) if (swarm != null)
{ {
if (OptimizePool((in SailBullet n) => n.id, () => { swarm.SetBulletCapacity(128); }, if (OptimizePool((in SailBullet n) => n.id, () =>
{
swarm.bulletCapacity = 0;
swarm.SetBulletCapacity(128);
},
ref swarm.bulletPool, ref swarm.bulletCursor, ref swarm.bulletCapacity, ref swarm.bulletPool, ref swarm.bulletCursor, ref swarm.bulletCapacity,
ref swarm.bulletRecycle, ref swarm.bulletRecycleCursor)) ref swarm.bulletRecycle, ref swarm.bulletRecycleCursor))
Logger.LogDebug($"Optimized `{nameof(swarm.bulletPool)}` on Star {dysonSphere.starData.id}"); Logger.LogDebug($"Optimized `{nameof(swarm.bulletPool)}` on Star {dysonSphere.starData.id}");

View File

@@ -5,7 +5,7 @@
<AssemblyName>PoolOpt</AssemblyName> <AssemblyName>PoolOpt</AssemblyName>
<BepInExPluginGuid>org.soardev.poolopt</BepInExPluginGuid> <BepInExPluginGuid>org.soardev.poolopt</BepInExPluginGuid>
<Description>DSP MOD - PoolOpt</Description> <Description>DSP MOD - PoolOpt</Description>
<Version>0.9.2</Version> <Version>0.9.3</Version>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks> <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<LangVersion>latest</LangVersion> <LangVersion>latest</LangVersion>
</PropertyGroup> </PropertyGroup>

View File

@@ -4,6 +4,9 @@
#### 加载游戏存档时优化内存池的使用 #### 加载游戏存档时优化内存池的使用
# Changelog # Changelog
* 0.9.3
+ Fix crash on calling `PlanetFactory.SetEntityCapacity()`
+ Reduce copies of Lists to improve performance
* 0.9.2 * 0.9.2
+ Fix a issue that may delete used slots in trash pool + Fix a issue that may delete used slots in trash pool
+ Fix compatibility issue with other mods (expecially [DSPOptimizations](https://dsp.thunderstore.io/package/Selsion/DSPOptimizations/)) by calling `SetXXXCapacity()` on shrinking capacity of pools + Fix compatibility issue with other mods (expecially [DSPOptimizations](https://dsp.thunderstore.io/package/Selsion/DSPOptimizations/)) by calling `SetXXXCapacity()` on shrinking capacity of pools

View File

@@ -1,6 +1,6 @@
{ {
"name": "PoolOpt", "name": "PoolOpt",
"version_number": "0.9.2", "version_number": "0.9.3",
"website_url": "https://github.com/soarqin/DSP_Mods/tree/master/PoolOpt", "website_url": "https://github.com/soarqin/DSP_Mods/tree/master/PoolOpt",
"description": "Optimize memory pools on loading gamesaves / 加载游戏存档时优化内存池的使用", "description": "Optimize memory pools on loading gamesaves / 加载游戏存档时优化内存池的使用",
"dependencies": [ "dependencies": [