56 lines
1.3 KiB
C#
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();
|
|
}
|
|
} |