Checkpoint 2:

- 调整 SimulationWorld 作为 GameFrameworkComponent 组件
- ProcedureGame 接入 SimulationWorld 生命周期(创建/清理)并在敌人 Show/Hide 时同步注册/反注册
- 增加 EnemySimData 构建与缓存去重移除,避免重复注册和悬空映射
- SimulationWorld 增加 UpsertEnemy/UpsertProjectile/UpsertPickup,支持幂等注册
This commit is contained in:
SepComet
2026-02-20 18:47:00 +08:00
parent 3b8e0731f0
commit 83f8a356f7
6 changed files with 187 additions and 20 deletions
@@ -1,8 +1,9 @@
using System.Collections.Generic;
using UnityGameFramework.Runtime;
namespace Simulation
{
public sealed class SimulationWorld
public sealed class SimulationWorld : GameFrameworkComponent
{
private readonly List<EnemySimData> _enemies = new List<EnemySimData>();
private readonly List<ProjectileSimData> _projectiles = new List<ProjectileSimData>();
@@ -24,6 +25,17 @@ namespace Simulation
return simulationIndex;
}
public int UpsertEnemy(in EnemySimData simData)
{
if (EnemyBinding.TryGetSimulationIndex(simData.EntityId, out int simulationIndex))
{
_enemies[simulationIndex] = simData;
return simulationIndex;
}
return AddEnemy(simData);
}
public bool RemoveEnemyByEntityId(int entityId)
{
if (!EnemyBinding.TryGetSimulationIndex(entityId, out int simulationIndex))
@@ -52,6 +64,17 @@ namespace Simulation
return simulationIndex;
}
public int UpsertProjectile(in ProjectileSimData simData)
{
if (ProjectileBinding.TryGetSimulationIndex(simData.EntityId, out int simulationIndex))
{
_projectiles[simulationIndex] = simData;
return simulationIndex;
}
return AddProjectile(simData);
}
public bool RemoveProjectileByEntityId(int entityId)
{
if (!ProjectileBinding.TryGetSimulationIndex(entityId, out int simulationIndex))
@@ -80,6 +103,17 @@ namespace Simulation
return simulationIndex;
}
public int UpsertPickup(in PickupSimData simData)
{
if (PickupBinding.TryGetSimulationIndex(simData.EntityId, out int simulationIndex))
{
_pickups[simulationIndex] = simData;
return simulationIndex;
}
return AddPickup(simData);
}
public bool RemovePickupByEntityId(int entityId)
{
if (!PickupBinding.TryGetSimulationIndex(entityId, out int simulationIndex))