using Cysharp.Threading.Tasks; using UnityEngine; namespace Game { [Procedure(ProcedureType.LoadingGameSceneProcedure)] class LoadingGameSceneProcedure : ProcedureBase { public override void Init() { base.Init(); EventManager.Instance.Subscribe(InputNameFinishEventArgs.EventId, InputNameFinishEvent); } public override void Dispose() { base.Dispose(); EventManager.Instance.Unsubscribe(InputNameFinishEventArgs.EventId, InputNameFinishEvent); } private void InputNameFinishEvent(object sender, GameEventArgs e) { var args = e as InputNameFinishEventArgs; var player = Game.playerManager.CreatePlayer(args.playerName, "player1", 1000); Game.playerManager.SetCurrentPlayer(player); EventManager.Instance.FireNow(this, new InitCurrentPlayerDataEventArgs(player)); player.self.transform.position = new Vector3(-9.6f, -10.3f); Game.procedureManager.ChangeProcedure(ProcedureType.EnterGameSceneProcedure); } public override void OnEnter() { base.OnEnter(); UniTask.Create(async () => { await Game.resourceManager.LoadSceneAsync(SceneType.Game); Game.uiManager.ShowUI(UIType.InputNameUI); EventManager.Instance.FireNow(this, new LoadingGameSceneFinishEventArgs(true)); }).Forget(); } public override void OnLeave() { base.OnLeave(); Game.uiManager.ShowUI(UIType.GameSceneMainUI); Game.uiManager.HideUI(UIType.InputNameUI); } } }