Frame/Assets/Scripts/Dinosaurs/Player/PlayerManager.cs

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);
}
}