94 lines
2.5 KiB
C#
94 lines
2.5 KiB
C#
using System.Collections.Generic;
|
|
using Game.Pathfinding;
|
|
using Game.Room;
|
|
using UnityEngine;
|
|
|
|
namespace Game.Player
|
|
{
|
|
public class PlayerManager : ManagerBase, IPlayerManager
|
|
{
|
|
protected Dictionary<long, IPlayer> _players;
|
|
private IPlayer _currentPlayer;
|
|
private string assetName = AssetConstPath.Assets_GameRes_Prefabs_Role_player1;
|
|
|
|
public IPlayer currentPlayer => this._currentPlayer;
|
|
private IBFSManager _bfsManager;
|
|
|
|
protected override void OnInit()
|
|
{
|
|
base.OnInit();
|
|
}
|
|
|
|
public PlayerManager(IBFSManager bfsManager)
|
|
{
|
|
_players = new Dictionary<long, IPlayer>();
|
|
this._currentPlayer = null;
|
|
this._bfsManager = bfsManager;
|
|
}
|
|
|
|
public void SetCurrentPlayer(IPlayer player)
|
|
{
|
|
this._currentPlayer ??= player;
|
|
}
|
|
|
|
public IPlayer CreatePlayer(long uid, string playerName, RoleType roleType)
|
|
{
|
|
var gameObject = Game.resourceManager.LoadGameObjectSync(assetName);
|
|
IPlayer player = new Player(playerName, uid, gameObject, this._bfsManager, roleType);
|
|
gameObject.name = playerName;
|
|
gameObject.transform.position = new Vector3(-9.6f, -10.3f);
|
|
|
|
this._players.Add(uid, player);
|
|
player.Init();
|
|
return player;
|
|
}
|
|
|
|
public IPlayer GetPlayer(long uId)
|
|
{
|
|
return this._players.GetValueOrDefault(uId);
|
|
}
|
|
|
|
public void DeletePlayer(long uId)
|
|
{
|
|
if (this._players.TryGetValue(uId, out var player))
|
|
{
|
|
player.Dispose();
|
|
this._players.Remove(uId);
|
|
}
|
|
}
|
|
|
|
public void DeleteAllPlayer()
|
|
{
|
|
foreach (var playersValue in this._players.Values)
|
|
{
|
|
playersValue.Dispose();
|
|
}
|
|
|
|
this._players.Clear();
|
|
}
|
|
|
|
protected override void OnDispose()
|
|
{
|
|
base.OnDispose();
|
|
this.DeleteAllPlayer();
|
|
}
|
|
}
|
|
|
|
public interface IPlayerManager
|
|
{
|
|
IPlayer currentPlayer { get; }
|
|
|
|
void SetCurrentPlayer(IPlayer player);
|
|
|
|
IPlayer CreatePlayer(long uid, string playerName, RoleType roleType);
|
|
|
|
// IPlayer InsPlayer(string assetName);
|
|
|
|
IPlayer GetPlayer(long uId);
|
|
|
|
void DeletePlayer(long uId);
|
|
void DeleteAllPlayer();
|
|
|
|
// void DeleteInsPlayer(IPlayer player);
|
|
}
|
|
} |