Frame/Assets/Scripts/Boss/IBossManager.cs

56 lines
1.3 KiB
C#

using System.Collections.Generic;
using System.Threading;
using Cysharp.Threading.Tasks;
using Game.Room;
using UnityEngine;
namespace Game.Boss;
public interface IBossManager
{
IReadOnlyList<IBoss> bosses { get; }
UniTask MoveToKillPlayerAsync(IReadOnlyList<IRoom> rooms, CancellationToken token);
void DeleteBoss();
}
public class BossManager : ManagerBase, IBossManager
{
private List<IBoss> _bosses;
public IReadOnlyList<IBoss> bosses => this._bosses;
public async UniTask MoveToKillPlayerAsync(IReadOnlyList<IRoom> rooms, CancellationToken token)
{
this._bosses = new List<IBoss>();
foreach (var room in rooms)
{
IBoss boss = new Boss();
var gameObject = Game.resourceManager.LoadGameObjectSync("boss1");
boss.SetGameObject(gameObject, room);
boss.Init();
_bosses.Add(boss);
}
List<UniTask> uniTasks = new List<UniTask>();
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();
}
}