using System; using System.Collections.Generic; using System.Threading; using Cysharp.Threading.Tasks; using Game.Pathfinding; using Game.Room; using UnityEngine; using Random = UnityEngine.Random; namespace Game.Player { public interface IRobotManager { void CreateRobot(); void EndOfTurnAuto(); void DeleteAllRobot(); } public class RobotManager : ManagerBase, IRobotManager { private IBFSManager _bfsManager; private IRoomManager _roomManager; private bool isBossMoveing; protected Dictionary _players; private string assetName = AssetConstPath.Assets_GameRes_Prefabs_Role_player1; public RobotManager(IBFSManager bfsManager, IRoomManager roomManager) { this._roomManager = roomManager; this._bfsManager = bfsManager; this._players = new Dictionary(); } protected override void OnInit() { base.OnInit(); EventManager.Instance.Subscribe(BossStartMoveEventArgs.EventId, BossStartMoveEvent); this.isBossMoveing = false; } protected override void OnDispose() { base.OnDispose(); EventManager.Instance.Unsubscribe(BossStartMoveEventArgs.EventId, BossStartMoveEvent); } private void BossStartMoveEvent(object sender, GameEventArgs e) { var args = e as BossStartMoveEventArgs; this.isBossMoveing = args.isMoveing; } private IPlayer CreatePlayer(string playerName, float jinbei) { var gameObject = Game.resourceManager.LoadGameObjectSync(assetName); IPlayer player = new Player(playerName, jinbei, gameObject, this._bfsManager, RoleType.Robot); player.self.transform.position = new Vector3(-9.6f, -10.3f); this._players.Add(playerName, player); player.Init(); return player; } public void CreateRobot() { if (this.isBossMoveing) return; Guid guid = Guid.NewGuid(); string robotName = guid.ToString(); float robotJinBei = 100; var player = this.CreatePlayer(robotName, robotJinBei); var room = this._roomManager.GetRandomRoom(); UniTask.Create(async () => { await this._roomManager.JoinRoomAsync(room.roomType, player, CancellationToken.None); // 下注 float jinBei = Random.Range(0, 10); EventManager.Instance.FireNow(this, new PlayerJinBeiChange_ToPlayerEventArgs(player, jinBei, (isTrue) => { if (isTrue) JinBeiChangeCallback(room, player, jinBei); })); }); } public void EndOfTurnAuto() { if (this._players.Count > 0) foreach (var player in this._players.Values) { var room = this._roomManager.GetRandomRoom(); UniTask.Create(async () => { await this._roomManager.JoinRoomAsync(room.roomType, player, CancellationToken.None); // 下注 float jinBei = Random.Range(0, 10); EventManager.Instance.FireNow(this, new PlayerJinBeiChange_ToPlayerEventArgs(player, jinBei, (isTrue) => { if (isTrue) JinBeiChangeCallback(room, player, jinBei); })); }); } } void JinBeiChangeCallback(IRoom room, IPlayer player, float jinBei) { EventManager.Instance.FireNow(this, new RoomJinBeiChangeEventArgs(room, player, jinBei)); } public void DeleteAllRobot() { if (this._players.Count > 0) foreach (var playersValue in this._players.Values) { playersValue.Dispose(); } this._players.Clear(); } } }