Ejemplo n.º 1
0
        public async UniTask StateInAsync(IChangeStateArg arg, bool isBack)
        {
            await view.ShowAsync();

            SetViewEvents();
            SetApiEvents();

            view.SetPeopleTheme("???");
            view.SetWolfTheme("???");

            peopleListPresenter.Refresh();
            wolfListPresenter.Refresh();

            if (arg is ResultArg resultArg)
            {
                model.SetResultArg(resultArg);

                var getRoomDetailApi = new GetRoomDetailApi();
                var response         = await getRoomDetailApi.Request(new GetRoomDetailData.Request
                {
                    RoomGuid = resultArg.RoomData.RoomGuid
                });

                if (response.Result == GetRoomDetailData.Result.Succeed)
                {
                    model.SetRoomData(response.RoomData);
                    view.SetActiveHostButton(response.IsHost);
                }
            }
        }
Ejemplo n.º 2
0
        public async UniTask StateInAsync(IChangeStateArg arg, bool isBack)
        {
            await view.ShowAsync();

            SetViewEvents();
            SetApiEvents();

            var readyArg = arg as ReadyArg;

            if (readyArg == null)
            {
                Debug.LogError("ステート遷移の引数が適切ではありません");
                return;
            }

            var getRoomDetailApi = new GetRoomDetailApi();
            var response         = await getRoomDetailApi.Request(new GetRoomDetailData.Request {
                RoomGuid = readyArg.RoomGuid
            });

            await optionPresenter.ShowAsync();

            optionPresenter.OnChangeGameTime(response.GameTime);
            optionPresenter.OnChangeWolfNum(response.WolfNum);

            if (response.Result == GetRoomDetailData.Result.Succeed)
            {
                model.SetRoomData(response.RoomData);
                listPresenter.SetMember(response.RoomData);
                OnUpdateHostUi(response.IsHost, response.RoomData.PlayerDataList.Count);
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// ロビーに画面が切り割ってほしい(Lobbyに状態遷移した)時に呼び出される。
        /// 呼び出し元はStateMachineBehavior
        /// </summary>
        /// <param name="arg">状態遷移元からの引数</param>
        /// <param name="isBack">一つ先の状態から戻ってきたかどうか</param>
        public async UniTask StateInAsync(IChangeStateArg arg, bool isBack)
        {
            await view.ShowAsync();

            BindChildrenEvents();

            // ロビーに遷移した時は、必ず部屋参加UIに遷移する
            StateMachine.RequestChangeState(LobbyState.JoinRoom);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// 部屋参加UIに画面が切り割ってほしい(JoinRoomに状態遷移した)時に呼び出される。
        /// 呼び出し元はStateMachineBehavior
        /// </summary>
        /// <param name="arg">状態遷移元からの引数</param>
        /// <param name="isBack">一つ先の状態から戻ってきたかどうか</param>
        public async UniTask StateInAsync(IChangeStateArg arg, bool isBack)
        {
            await view.ShowAsync();

            SetViewEvents();
            SetModelEvents();
            BindChildrenEvents();

            // 遷移した時は、必ず部屋一覧を更新する
            listPresenter.UpdateRoomListAsync().Forget();
        }
Ejemplo n.º 5
0
        /// <summary>
        /// ステートを一つ前に戻す。
        /// </summary>
        /// <param name="arg">変更先に渡す引数</param>
        /// <returns>変更が成功したかどうか</returns>
        public bool RequestBackState(IChangeStateArg arg = null)
        {
            if (stateStack.Count < 1)
            {
                return(false);
            }

            var tmpState = currentState;

            currentState = stateStack.Pop();
            OnChangeStateEvent?.Invoke(currentState, tmpState, arg, true);
            return(true);
        }
Ejemplo n.º 6
0
        /// <summary>
        /// ステート変更をリクエストする。
        /// </summary>
        /// <param name="requestState">変更先のステート</param>
        /// <param name="arg">変更先に渡す引数</param>
        /// <returns>変更が成功したかどうか</returns>
        public bool RequestChangeState(T requestState, IChangeStateArg arg = null)
        {
            if (requestState.Equals(currentState))
            {
                return(false);
            }

            stateStack.Push(currentState);
            var tmpState = currentState;

            currentState = requestState;
            OnChangeStateEvent?.Invoke(currentState, tmpState, arg, false);
            return(true);
        }
Ejemplo n.º 7
0
        public async UniTask StateInAsync(IChangeStateArg arg, bool isBack)
        {
            await view.ShowAsync();

            SetViewEvents();
            SetModelEvents();
            SetApiEvents();

            if (arg is PlayArg playArg)
            {
                model.StartGame(playArg);
                view.SetTheme(playArg.StartGameData.Theme);
                listPresenter.SetMember(playArg.RoomData);
            }
        }
Ejemplo n.º 8
0
        /// <summary>
        /// 表示処理。
        /// </summary>
        public async UniTask ShowAsync(IChangeStateArg arg)
        {
            gameObject.SetActive(true);
            applyButton.Show();
            backButton.Show();

            // 引数をダウンキャストして値を取得する
            var editPlayerNameArg = arg as EditPlayerNameArg;

            if (editPlayerNameArg == null)
            {
                Debug.LogError("引数が適切ではありません");
                return;
            }

            editPlayerNameInputField.text = editPlayerNameArg.PlayerName;
        }
Ejemplo n.º 9
0
        public async UniTask StateInAsync(IChangeStateArg arg, bool isBack)
        {
            await view.ShowAsync();

            BindEvents();

            var gameGroupArg = arg as GameGroupArg;

            if (gameGroupArg == null)
            {
                Debug.LogError("ステート遷移の引数が適切ではありません");
                return;
            }

            StateMachine.RequestChangeState(GameState.Ready, new ReadyArg {
                RoomGuid = gameGroupArg.RoomGuid
            });
        }
        /// <summary>
        /// ステート戦時の処理。
        /// </summary>
        /// <param name="nextState">変更先ステート</param>
        /// <param name="oldState">変更前ステート</param>
        /// <param name="arg">変更先に渡す引数</param>
        /// <param name="isBack">戻る場合かどうか</param>
        private void OnChangeState(TState nextState, TState oldState, IChangeStateArg arg, bool isBack)
        {
            // 内部でUniTaskの処理を呼び出す
            ChangeStateAsync().Forget();

            async UniTask ChangeStateAsync()
            {
                // 一覧の中に変更前ステートに対応するインスタンスがあれば呼び出す
                if (StateDictionary.ContainsKey(oldState))
                {
                    await StateDictionary[oldState].StateOutAsync();
                }

                // 一覧の中に変更先ステートに対応するいんすたんすがあれば呼び出す
                if (StateDictionary.ContainsKey(nextState))
                {
                    await StateDictionary[nextState].StateInAsync(arg, isBack);
                }
            }
        }
Ejemplo n.º 11
0
        /// <summary>
        /// 部屋作成UIに画面が切り割ってほしい(CreateRoomに状態遷移した)時に呼び出される。
        /// 呼び出し元はStateMachineBehavior
        /// </summary>
        /// <param name="arg">状態遷移元からの引数</param>
        /// <param name="isBack">一つ先の状態から戻ってきたかどうか</param>
        public async UniTask StateInAsync(IChangeStateArg arg, bool isBack)
        {
            await view.ShowAsync();

            SetViewEvents();
        }