Frame/Assets/Scripts/Room/IRoomManager.cs

68 lines
1.7 KiB
C#
Raw Normal View History

2024-04-06 11:59:18 +08:00
using System.Collections.Generic;
2024-04-08 18:20:55 +08:00
using System.Threading;
using Cysharp.Threading.Tasks;
using Game.Player;
using UnityEngine;
2024-04-06 11:59:18 +08:00
namespace Game.Room;
public interface IRoomManager
{
IRoom CreateRoom(RoomType roomType);
IRoom GetRoom(RoomType roomType);
2024-04-08 18:20:55 +08:00
UniTask<bool> JoinRoomAsync(RoomType roomType, IPlayer player, CancellationToken token);
bool QuitRoom(RoomType roomType, IPlayer player);
2024-04-06 11:59:18 +08:00
void DeleteRoom(RoomType roomType);
}
public class RoomManager : ManagerBase, IRoomManager
{
private Dictionary<RoomType, IRoom> _rooms = new Dictionary<RoomType, IRoom>();
public IRoom CreateRoom(RoomType roomType)
{
if (this._rooms.TryGetValue(roomType, out var room))
return room;
var gameObject = Game.resourceManager.LoadGameObjectSync(roomType.ToString());
room = new Room(roomType, gameObject);
this._rooms.Add(roomType, room);
return room;
}
public IRoom GetRoom(RoomType roomType)
{
return this._rooms.GetValueOrDefault(roomType);
}
2024-04-08 18:20:55 +08:00
public async UniTask<bool> JoinRoomAsync(RoomType roomType, IPlayer player, CancellationToken token)
{
if (!player.isMoving)
return false;
if (this._rooms.TryGetValue(roomType, out var room))
{
await room.JoinAsync(player, token);
return true;
}
return false;
}
public bool QuitRoom(RoomType roomType, IPlayer player)
{
if (this._rooms.TryGetValue(roomType, out var room))
{
room.Quit(player);
return true;
}
return false;
}
2024-04-06 11:59:18 +08:00
public void DeleteRoom(RoomType roomType)
{
if (this._rooms.TryGetValue(roomType, out var room))
room.Dispose();
}
}