/// <summary> /// 部屋を作成する。 /// </summary> /// <param name="roomName">作成したい部屋の名前</param> private void OnClickCreateRoom(string roomName) { // ActionにUniTaskを直接紐づけることは出来ないので、内部でUniTaskの処理を呼び出す CreateRoomAsync().Forget(); async UniTask CreateRoomAsync() { // UnityのRemoteConfigを使ってテーマ一覧を取得する var fetchThemeResponse = await new FetchThemeApi().Request(); if (fetchThemeResponse.Result != FetchTheme.Result.Succeed) { Debug.LogError("テーマの取得に失敗"); return; } // CreateRoomで渡されたroomNameを使っている(クロージャという概念)が、ややこしいので気にしないで var createRoomRequest = new ConnectData.CreateRoom.Request { RoomName = roomName, ThemeData = fetchThemeResponse.ThemeData }; var createRoomResponse = await new CreateRoomApi().Request(createRoomRequest); // レスポンスが成功ならゲームステートに遷移する if (createRoomResponse.Result == ConnectData.CreateRoom.Result.Succeed) { var arg = new GameGroupArg { RoomGuid = createRoomResponse.RoomGuid }; parentStateMachine.RequestChangeState(GroupState.Game, arg); } } }
/// <summary> /// 部屋に参加する。 /// </summary> /// <param name="roomGuid">参加したい部屋のGUID</param> private void OnClickJoinRoom(Guid roomGuid) { // ActionにUniTaskを直接紐づけることは出来ないので、内部でUniTaskの処理を呼び出す JoinRoomAsync().Forget(); async UniTask JoinRoomAsync() { // JoinRoomで渡されたroomGuidを使っている(クロージャという概念)が、ややこしいので気にしないで var request = new ConnectData.JoinRoom.Request { RoomGuid = roomGuid }; var response = await new JoinRoomApi().Request(request); // レスポンスが成功ならゲームステートに遷移する if (response.Result == ConnectData.JoinRoom.Result.Succeed) { var arg = new GameGroupArg { RoomGuid = roomGuid }; parentStateMachine.RequestChangeState(GroupState.Game, arg); return; } // レスポンスが失敗なら部屋一覧を更新する joinRoomPresenter.UpdateRoomList(); } }