Checkpoint 2:
- 调整 SimulationWorld 作为 GameFrameworkComponent 组件 - ProcedureGame 接入 SimulationWorld 生命周期(创建/清理)并在敌人 Show/Hide 时同步注册/反注册 - 增加 EnemySimData 构建与缓存去重移除,避免重复注册和悬空映射 - SimulationWorld 增加 UpsertEnemy/UpsertProjectile/UpsertPickup,支持幂等注册
This commit is contained in:
@@ -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))
|
||||
|
||||
Reference in New Issue
Block a user