using System.Collections.Generic; using System.Threading; using Cysharp.Threading.Tasks; using Game.Room; using UnityEngine; namespace Game.Boss { public interface IBossManager { IReadOnlyList bosses { get; } UniTask MoveToKillPlayerAsync(IReadOnlyList rooms, CancellationToken token); void DeleteBoss(); } public class BossManager : ManagerBase, IBossManager { private List _bosses; public IReadOnlyList bosses => this._bosses; public async UniTask MoveToKillPlayerAsync(IReadOnlyList rooms, CancellationToken token) { this._bosses = new List(); foreach (var room in rooms) { IBoss boss = new Boss(); var gameObject = Game.resourceManager.LoadGameObjectSync(AssetConstPath.Assets_GameRes_Prefabs_Role_boss1); boss.SetGameObject(gameObject, room); boss.Init(); _bosses.Add(boss); } List uniTasks = new List(); foreach (var boss in this._bosses) { var uniTask = boss.WaitMoveRoomAndKillAsync(token); uniTasks.Add(uniTask); await UniTask.Delay(100); } await UniTask.WhenAll(uniTasks); } public void DeleteBoss() { foreach (var boss in this._bosses) { boss.Dispose(); } this._bosses.Clear(); } } }