using Entitas; using UnityEngine; using Game; public class AIDirectorSystem : IExecuteSystem, IInitializeSystem { private LevelPoolItem _curLevel; private LevelNodeMonsterWave _curWave; private float _tickTime; private float _attackRoundTime; private float _attackWaitTime; private int _attackTimes; public void Initialize() { } public void Execute() { if (Util.IsLevelLoading()) { return; } var level = Util.GetCurLevel(); var wave = Util.GetCurWave(); if (level == null || wave == null) { return; } if (level != _curLevel) { _curLevel = level; return; } if (wave != _curWave) { _curWave = wave; Reset(); return; } UpdateAIDirectorBlueprint(); } private void Reset() { _attackRoundTime = 0; _attackWaitTime = 0; _attackTimes = 0; } private void UpdateAIDirectorBlueprint() { if (!Util.GetAIDirectorInit()) { Util.SetAIDirectorInit(); Util.RunBp(GameConst.BlueprintAIDirectorCommon, GameConst.BpEntranceEnter); } _tickTime -= Time.deltaTime; if (_tickTime < 0) { _tickTime = GameConst.AIDirectorTick; Util.RunBp(GameConst.BlueprintAIDirectorCommon, GameConst.BpEntranceUpdate); } if (_attackRoundTime < _curWave.attackRound) { _attackRoundTime += Time.deltaTime; return; } if (_attackWaitTime < _curWave.attackFrequency) { _attackWaitTime += Time.deltaTime; return; } if (_attackTimes >= _curWave.attackTimes) { Reset(); return; } _attackTimes++; _attackWaitTime = 0; Util.RunBp(GameConst.BlueprintAIDirectorCommon, GameConst.BpEntranceExecute); } }