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(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 players = new List(); 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(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(); 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); } } }