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(string playerName, float jinbei) { var gameObject = Game.resourceManager.LoadGameObjectSync(assetName); IPlayer player = new Player(playerName, jinbei, gameObject, this._bfsManager, RoleType.Player); this._players.Add(playerName, player); player.Init(); return player; } public IPlayer GetPlayer(string playerName) { return this._players.GetValueOrDefault(playerName); } public void DeletePlayer(string playerName) { if (this._players.TryGetValue(playerName, out var player)) { player.Dispose(); this._players.Remove(playerName); } } 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(string playerName, float jinbei); // IPlayer InsPlayer(string assetName); IPlayer GetPlayer(string playerName); void DeletePlayer(string playerName); void DeleteAllPlayer(); // void DeleteInsPlayer(IPlayer player); } }