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); } } }
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); } }
/// <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); }
/// <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(); }
/// <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); }
/// <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); }
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); } }
/// <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; }
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); } } }
/// <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(); }