using System.Collections.Generic; using Game.Pathfinding; using Game.Room; using UnityEngine; namespace Game.Player { public class PlayerManager : ManagerBase, IPlayerManager { protected Dictionary _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(); 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); } }