清理各个 Component 里的判断以及调用规范
This commit is contained in:
+22
-16
@@ -13,7 +13,7 @@ namespace SepCore.EnemyManager
|
||||
{
|
||||
public class EnemyManagerComponent : GameFrameworkComponent
|
||||
{
|
||||
private const string EnemyGroupName = "Enemy";
|
||||
private string EnemyGroupName => GameEntry.Luban.Global.EnemyGroupName;
|
||||
|
||||
private EntityComponent _entity;
|
||||
private EnemyRegistry _enemyRegistry;
|
||||
@@ -21,8 +21,8 @@ namespace SepCore.EnemyManager
|
||||
|
||||
public IReadOnlyCollection<EntityBase> Enemies => _enemyRegistry.Enemies;
|
||||
|
||||
[SerializeField] private int _spawnEnemyMaxCount = 5000;
|
||||
[SerializeField] private int _spawnDistanceFromPlayer = 20;
|
||||
private int _spawnEnemyMaxCount;
|
||||
private int _spawnDistanceFromPlayer;
|
||||
|
||||
private int _currentSpawnEnemyId;
|
||||
private int _currentLevel;
|
||||
@@ -61,12 +61,8 @@ namespace SepCore.EnemyManager
|
||||
GameEntry.Event.Unsubscribe(HideEntityCompleteEventArgs.EventId, OnHideEntityComplete);
|
||||
GameEntry.Event.Unsubscribe(ShowEntitySuccessEventArgs.EventId, OnShowEntitySuccess);
|
||||
|
||||
_spawnCts?.Dispose();
|
||||
_spawnCts = null;
|
||||
_enemyRegistry = null;
|
||||
_spawnScheduler?.Reset();
|
||||
_spawnScheduler = null;
|
||||
_entity = null;
|
||||
_spawnCts.Dispose();
|
||||
_spawnScheduler.Reset();
|
||||
}
|
||||
|
||||
public void OnInit(LevelConfig level, Player player)
|
||||
@@ -78,7 +74,8 @@ namespace SepCore.EnemyManager
|
||||
}
|
||||
|
||||
_isStopped = false;
|
||||
|
||||
_spawnEnemyMaxCount = GameEntry.Luban.Global.SpawnEnemyMaxCount;
|
||||
_spawnDistanceFromPlayer = GameEntry.Luban.Global.SpawnDistanceFromPlayer / 1000;
|
||||
_player = player.CachedTransform;
|
||||
_spawnPositionStrategy = new RandomCircleSpawnStrategy(_spawnDistanceFromPlayer);
|
||||
|
||||
@@ -138,7 +135,7 @@ namespace SepCore.EnemyManager
|
||||
var ct = _spawnCts.Token;
|
||||
var (isCanceled, enemy) =
|
||||
await _entity.ShowEnemyAsync(enemyData, cancellationToken: ct).SuppressCancellationThrow();
|
||||
if (isCanceled || ct.IsCancellationRequested || enemy == null || !enemy.Available)
|
||||
if (isCanceled || ct.IsCancellationRequested)
|
||||
{
|
||||
// 取消通常发生在 OnReset 期间,此时实体往往尚未出生,enemy 为 null 无法 hide。
|
||||
// 真正的兜底在 OnShowEntitySuccess:停战后出生的敌人会被立即 hide。
|
||||
@@ -150,6 +147,19 @@ namespace SepCore.EnemyManager
|
||||
return;
|
||||
}
|
||||
|
||||
if (enemy == null)
|
||||
{
|
||||
Log.Error("Can not spawn enemy '{0}' with entity id '{1}': entity logic is invalid.", enemyType,
|
||||
entityId);
|
||||
return;
|
||||
}
|
||||
|
||||
// 未取消但实体已不可用,说明 OnShowEntitySuccess 已在停战窗口兜底 hide。
|
||||
if (!enemy.Available)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// await 恢复时若已停战,说明这是漏网的在途敌人,立即 hide,不注册。
|
||||
if (_isStopped)
|
||||
{
|
||||
@@ -157,11 +167,7 @@ namespace SepCore.EnemyManager
|
||||
return;
|
||||
}
|
||||
|
||||
if (_player != null)
|
||||
{
|
||||
enemy.SetTarget(_player);
|
||||
}
|
||||
|
||||
enemy.SetTarget(_player);
|
||||
_enemyRegistry.Register(enemy);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user