Frame/Assets/Scripts/Boss/IBossManager.cs

56 lines
1.3 KiB
C#
Raw Normal View History

2024-04-09 13:22:52 +08:00
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; }
2024-04-10 16:18:32 +08:00
UniTask MoveToKillPlayerAsync(IReadOnlyList<IRoom> rooms, CancellationToken token);
2024-04-09 13:22:52 +08:00
void DeleteBoss();
}
public class BossManager : ManagerBase, IBossManager
{
private List<IBoss> _bosses;
public IReadOnlyList<IBoss> bosses => this._bosses;
2024-04-10 16:18:32 +08:00
public async UniTask MoveToKillPlayerAsync(IReadOnlyList<IRoom> rooms, CancellationToken token)
2024-04-09 13:22:52 +08:00
{
this._bosses = new List<IBoss>();
foreach (var room in rooms)
{
IBoss boss = new Boss();
var gameObject = Game.resourceManager.LoadGameObjectSync("boss1");
boss.SetGameObject(gameObject, room);
2024-04-09 18:16:37 +08:00
boss.Init();
2024-04-09 13:22:52 +08:00
_bosses.Add(boss);
}
List<UniTask> uniTasks = new List<UniTask>();
foreach (var boss in this._bosses)
{
var uniTask = boss.WaitMoveRoomAndKillAsync(token);
uniTasks.Add(uniTask);
2024-04-09 18:16:37 +08:00
await UniTask.Delay(100);
2024-04-09 13:22:52 +08:00
}
await UniTask.WhenAll(uniTasks);
}
public void DeleteBoss()
{
foreach (var boss in this._bosses)
{
boss.Dispose();
}
this._bosses.Clear();
}
}