Checkpoint 3 & Checkpoint 4:

- GameStateBattle 接入 Simulation 主更新入口
- SimulationWorld 增加开关 UseSimulationMovement(默认 false)
- SimulationWorld.Tick(...) 现在在开关开启时执行敌人追踪/移动模拟,基本还原 MovementComponent 功能(敌人互斥)
- 调整 IEnemySeparationSolver 系列方法,不再依赖 MovementComponent
This commit is contained in:
SepComet
2026-02-20 19:54:44 +08:00
parent 83f8a356f7
commit 6494ebc5fd
15 changed files with 229 additions and 87 deletions
@@ -18,6 +18,9 @@ namespace Components
[SerializeField] private int _separationIterations = 2;
public float Speed => (_speedBase + _movementStat.Value) * _movementStat.Percent;
public bool AvoidEnemyOverlap => _avoidEnemyOverlap;
public float EnemyBodyRadius => _enemyBodyRadius;
public int SeparationIterations => _separationIterations;
[SerializeField] private float _speedBase;
private StatComponent _statComponent;
@@ -61,6 +64,8 @@ namespace Components
public void OnReset()
{
Transform transformToUnregister = _cachedTransform;
_speedBase = 0;
_cachedTransform = null;
_direction = Vector3.zero;
@@ -77,7 +82,7 @@ namespace Components
_statComponent = null;
UnregisterEnemyMover();
UnregisterEnemyMover(transformToUnregister);
}
private void Move(float deltaTime = 0)
@@ -91,7 +96,7 @@ namespace Components
if (_avoidEnemyOverlap)
{
nextPosition = EnemySeparationSolverProvider.Resolve(
this,
_cachedTransform,
nextPosition,
_direction,
_separationIterations);
@@ -108,12 +113,12 @@ namespace Components
{
UnregisterEnemyMover();
if (!_avoidEnemyOverlap) return;
EnemySeparationSolverProvider.Register(this, _cachedTransform, _enemyBodyRadius);
EnemySeparationSolverProvider.Register(_cachedTransform, _enemyBodyRadius);
}
private void UnregisterEnemyMover()
private void UnregisterEnemyMover(Transform transform = null)
{
EnemySeparationSolverProvider.Unregister(this);
EnemySeparationSolverProvider.Unregister(transform ?? _cachedTransform);
}
}
}