/// <summary> /// 初期化する。 /// </summary> /// <param name="questDetail"></param> public void Initialize(QuestDetailMaster questDetail) { this.gameObject.SetActive(false); _nameText.text = questDetail.Name; _staminaText.text = $"消費スタミナ {questDetail.Stamina}"; _button.OnClickAsObservable().ThrottleFirst(TimeSpan.FromMilliseconds(500)).Subscribe(async _ => { if (VirtualCurrencyManager.Stamina < questDetail.Stamina) { if (InventoryManager.StaminaRecovery.Num > 0) { var confirm1 = await ConfirmDialog.ShowAsync("スタミナが不足しています。スタミナ回復薬を使用しますか?"); if (confirm1 == DialogResult.Cancel) { return; } await UniTask.WhenAll( MessageDialog.ShowAsync("スタミナを回復しました。クエストを開始します。"), InventoryManager.ConsumeStaminaRecoveryItemAsync()); } else { await MessageDialog.ShowAsync("スタミナが不足しています。"); return; } } else { var confirm = await ConfirmDialog.ShowAsync("クエストを開始してよろしいですか?"); if (confirm == DialogResult.Cancel) { return; } } await VirtualCurrencyManager.SubtractStaminaAsync(questDetail.Stamina); if (questDetail.BeforeStories?.Any() ?? false) { StorySceneController.CurrentQuestAndStoryType = (questDetail, StoryType.Before); SceneManager.LoadScene("StoryScene"); return; } SceneManager.LoadScene("InGameScene"); }); }
/// <summary> /// ログイン時に取得したデータをキャッシュする。 /// </summary> /// <param name="loginResult"></param> /// <returns></returns> public static async UniTask UpdateLocalCacheAsync(LoginResult loginResult) { // カタログは他のインスタンスの初期化にも必要なので最初に行うこと await UniTask.WhenAll( CatalogManager.SyncPlayFabToClientAsync(), StoreManager.SyncPlayFabToClientAsync(), FriendManager.SyncPlayFabToClientAsync(), NewsManager.SyncPlayFabToClientAsync(), RankingManager.SyncPlayFabToClientAsync()); TitleDataManager.SyncPlayFabToClient(loginResult.InfoResultPayload.TitleData); PlayerProfileManager.SyncPlayFabToClient(loginResult.InfoResultPayload.PlayerProfile, loginResult.InfoResultPayload.PlayerStatistics); InventoryManager.SyncPlayFabToClient(loginResult.InfoResultPayload.UserInventory); VirtualCurrencyManager.SyncPlayFabToClient(loginResult.InfoResultPayload.UserVirtualCurrency); UserDataManager.SyncPlayFabToClient(loginResult.InfoResultPayload.UserData); // ログインボーナス獲得処理 await CheckAndAddLoginBonusAsync(loginResult); }
private async UniTaskVoid Start() { await UniTask.WaitUntil(() => ApplicationEntryPoint.Initialized, cancellationToken : this.GetCancellationTokenOnDestroy()); // 今回のサンプルではインゲームは実装しないつもりなのでいきなりクエストクリア画面へ遷移する。 var quest = CurrentQuest; // 報酬のアイテムと経験値を獲得する。 var(rewardResult, isLevelUp) = await UniTask.WhenAll( StoreManager.PurchaseItemAsync(StoreId.DummyStore, quest.Reward.ItemId, VirtualCurrencyNames.MS.Code, false), VirtualCurrencyManager.AddExpAsync(quest.Reward.Exp, false)); // レベルアップしていればレベルアップ処理を行う。 if (isLevelUp) { await UserDataManager.User.LevelUpAsync(false); } // ミッション情報を更新する。 await UserDataManager.User.Mission.AddMissionActionCount(MissionAction.Quest, 1, true); // PlayFab へログインしなおしてローカルのデータを最新の状態に更新する。 await LoginManager.LoginAndUpdateLocalCacheAsync(); _expText.text = isLevelUp ? $"経験値 {quest.Reward.Exp} を獲得しました。レベルが上がりました。" : $"経験値 {quest.Reward.Exp} を獲得しました。"; var item = rewardResult.Items.FirstOrDefault(x => x.ItemId != quest.Reward.ItemId); var itemMaster = CatalogManager.CatalogItems[item.ItemId]; _itemText.text = $"{itemMaster.DisplayName} を獲得しました。"; if (quest.AfterStories.Any()) { StorySceneController.CurrentQuestAndStoryType = (quest, StoryType.After); _nextButton.OnClickAsObservable().ThrottleFirst(TimeSpan.FromMilliseconds(500)).Subscribe(_ => SceneManager.LoadScene("StoryScene")); return; } _nextButton.OnClickAsObservable().ThrottleFirst(TimeSpan.FromMilliseconds(500)).Subscribe(_ => SceneManager.LoadScene("HomeScene")); }