126 lines
4.1 KiB
C#
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();
|
|
}
|
|
}
|
|
} |