103 lines
3.4 KiB
C#
103 lines
3.4 KiB
C#
using System.Collections.Generic;
|
||
using System.Threading;
|
||
using Cysharp.Threading.Tasks;
|
||
using Game.Player;
|
||
using Game.RayCast;
|
||
using Game.Room;
|
||
using UnityEngine;
|
||
using Random = UnityEngine.Random;
|
||
|
||
namespace Game;
|
||
|
||
[Procedure(ProcedureType.GameSceneKillPlayerProcedure)]
|
||
class GameSceneKillPlayerProcedure : ProcedureBase
|
||
{
|
||
private float maxTime = 10f;
|
||
GameSceneMainUI sceneMainUI;
|
||
|
||
public override void OnEnter()
|
||
{
|
||
base.OnEnter();
|
||
|
||
EventManager.Instance.Subscribe(InputObjectFinishEventArgs.EventId, this.InputObjectFinishEvent);
|
||
EventManager.Instance.FireNow(this, new BossStartMoveEventArgs(true));
|
||
UniTask.Create(this.OpenWarningTips);
|
||
}
|
||
|
||
async UniTask OpenWarningTips()
|
||
{
|
||
sceneMainUI = Game.uiManager.GetUI<GameSceneMainUI>(UIType.GameSceneMainUI);
|
||
await this.sceneMainUI.WaitTimeCloseTips();
|
||
|
||
UniTask.Create(this.WaitKillFinish);
|
||
// UniTask.Create(this.WaitTimeGoNext);
|
||
isFinish = false;
|
||
}
|
||
|
||
async UniTask WaitKillFinish()
|
||
{
|
||
string content = $"恐龙出没!";
|
||
sceneMainUI.UpdateMessage(content);
|
||
|
||
var roomData = Game.roomManager.GetAllRandomRoom();
|
||
await Game.bossManager.MoveToKillPlayerAsync(roomData.killRoom, default);
|
||
|
||
Game.bossManager.DeleteBoss();
|
||
isFinish = true;
|
||
|
||
float jinBei = 0;
|
||
foreach (var room in roomData.killRoom)
|
||
{
|
||
jinBei += room.roomData.jinBeiCount;
|
||
}
|
||
|
||
Debug.Log($"杀掉了随机房间玩家,金贝数量总和为:{jinBei}");
|
||
|
||
List<IPlayer> players = new List<IPlayer>();
|
||
foreach (var room in roomData.survivorRoom)
|
||
{
|
||
foreach (var roomPlayer in room.players)
|
||
{
|
||
Debug.Log($"幸存者:{roomPlayer.playerName}");
|
||
players.Add(roomPlayer);
|
||
}
|
||
}
|
||
|
||
if (players.Count > 0)
|
||
jinBei /= players.Count;
|
||
|
||
Debug.Log($"胜利总金贝: is {jinBei}");
|
||
EventManager.Instance.FireNow(this, new JinBeiSettlementEventArgs(players, jinBei));
|
||
|
||
var resultUI = Game.uiManager.GetUI<GameSceneResultUI>(UIType.GameSceneResultUI);
|
||
if (players.Contains(Game.playerManager.currentPlayer))
|
||
resultUI.SetResult($"恭喜你躲避成功,胜利总金贝:{jinBei},你得到的金贝:{jinBei}", true);
|
||
else
|
||
resultUI.SetResult($"躲避失败,胜利总金贝:{jinBei},你得到的金贝:0", false);
|
||
|
||
//TODO:
|
||
UniTask.Create(async () => { await Game.roomManager.QuitAllRoomAsync(default); });
|
||
// await this.sceneMainUI.WaitTimeCloseTips();
|
||
|
||
Game.procedureManager.ChangeProcedure(ProcedureType.GameSceneSettlementProcedure);
|
||
}
|
||
|
||
private bool isFinish;
|
||
|
||
private void InputObjectFinishEvent(object sender, GameEventArgs e)
|
||
{
|
||
var args = e as InputObjectFinishEventArgs;
|
||
// var inputData = args.data as MouseInputData;
|
||
// var roomInfo = inputData.go.GetComponent<RoomInfo>();
|
||
|
||
Debug.Log("未到选择房间时间!");
|
||
// UniTask.Create(async () => { await Game.roomManager.JoinRoomAsync(roomInfo.roomType, Game.playerManager.currentPlayer, new CancellationToken()); });
|
||
}
|
||
|
||
|
||
public override void OnLeave()
|
||
{
|
||
base.OnLeave();
|
||
EventManager.Instance.Unsubscribe(InputObjectFinishEventArgs.EventId, this.InputObjectFinishEvent);
|
||
}
|
||
} |