Frame/Assets/Scripts/Boss/IBossManager.cs

57 lines
1.5 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
2024-04-09 13:22:52 +08:00
{
public interface IBossManager
{
IReadOnlyList<IBoss> bosses { get; }
2024-04-09 13:22:52 +08:00
UniTask MoveToKillPlayerAsync(IReadOnlyList<IRoom> rooms, CancellationToken token);
void DeleteBoss();
}
2024-04-09 13:22:52 +08:00
public class BossManager : ManagerBase, IBossManager
2024-04-09 13:22:52 +08:00
{
private List<IBoss> _bosses;
public IReadOnlyList<IBoss> bosses => this._bosses;
2024-04-09 13:22:52 +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(AssetConstPath.Assets_GameRes_Prefabs_Role_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);
2024-04-09 13:22:52 +08:00
}
public void DeleteBoss()
2024-04-09 13:22:52 +08:00
{
foreach (var boss in this._bosses)
{
boss.Dispose();
}
2024-04-09 13:22:52 +08:00
this._bosses.Clear();
}
2024-04-09 13:22:52 +08:00
}
}