using System.Collections.Generic; using Game.Pathfinding; using JetBrains.Annotations; using UnityEngine; using System.Linq; using System.Threading; using Cysharp.Threading.Tasks; using Game.RayCast; using Game.Room; namespace Game { [Procedure(ProcedureType.GameSceneLogicProcedure)] class GameSceneLogicProcedure : ProcedureBase { private float maxTime = 10f; GameSceneMainUI sceneMainUI; public override void OnEnter() { base.OnEnter(); EventManager.Instance.Subscribe(InputObjectFinishEventArgs.EventId, InputObjectFinishEvent); sceneMainUI = Game.uiManager.GetUI(UIType.GameSceneMainUI); UniTask.Create(WaitTimeGoNext); } async UniTask WaitTimeGoNext() { float time = 0; while (true) { time += Time.deltaTime; string content = $"({(int)(this.maxTime - time)}) 恐龙即将出现!"; sceneMainUI.UpdateMessage(content); if (time >= this.maxTime) { break; } await UniTask.Yield(); } Game.procedureManager.ChangeProcedure(ProcedureType.GameSceneKillPlayerProcedure); } private void InputObjectFinishEvent(object sender, GameEventArgs e) { var args = e as InputObjectFinishEventArgs; var inputData = args.data as MouseInputData; var roomInfo = inputData.go.GetComponent(); 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, InputObjectFinishEvent); } } }