Frame/Assets/Scripts/Dinosaurs/Robot/RobotManager.cs

126 lines
4.1 KiB
C#

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<string, IPlayer> _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<string, IPlayer>();
}
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();
}
}
}