/// <summary> /// ホームへ遷移する。 /// </summary> public async UniTaskVoid MoveHomeSceneAsync() { // チュートリアルの進行状況によってはユーザーの情報を登録するダイアログを表示する。 if (!UserDataManager.User.TutorialFlag.HasFlag(TutorialFlag.SetNameAndGender)) { var result = await SetUserInformationDialog.ShowAsync(); if (result == DialogResult.Cancel) { return; } } // チュートリアルの進行状況によってはオープニングのイベントを表示する。 // という予定だったが今回のサンプルでは特に見せたいものがないので、何も表示せずに初期アイテムとキャラクターの付与を行っておく。 if (!UserDataManager.User.TutorialFlag.HasFlag(TutorialFlag.ShowOpeningEvent)) { UserDataManager.User.TutorialFlag |= TutorialFlag.ShowOpeningEvent; await StoreManager.PurchaseItemAsync(StoreId.DummyStore, "bundle-initial-present-0001", VirtualCurrencyNames.MS.Code); await UserDataManager.UpdatePlayFab(); } // シーン遷移 SceneManager.LoadScene("HomeScene"); }
/// <summary> /// アイテムを購入する。 /// </summary> /// <param name="storeItem"></param> /// <returns></returns> private async UniTaskVoid PurchaseAsync(StoreItem storeItem) { var vc = VirtualCurrencyNames.MS; var price = storeItem.VirtualCurrencyPrices[vc.Code]; if (VirtualCurrencyManager.MagicStone < price) { await MessageDialog.ShowAsync($"{vc.Name}が不足しています。"); return; } var buyItem = CatalogManager.CatalogItems[storeItem.ItemId]; var confirm = await ConfirmDialog.ShowAsync($"{vc.Name} {price} 個で{buyItem.DisplayName}を購入しますか?"); if (confirm == DialogResult.Cancel) { return; } var(result, _) = await UniTask.WhenAll( StoreManager.PurchaseItemAsync(StoreId.GachaStore, storeItem.ItemId, vc.Code), MessageDialog.ShowAsync("ガチャ演出再生中").AsAsyncUnitUniTask()); var getItems = result.Items.Where(x => x.BundleParent != null); foreach (var item in getItems) { await MessageDialog.ShowAsync($"{item.DisplayName}を獲得しました"); } }
/// <summary> /// 最終ログイン日時から日付が変わっていればログインボーナスを獲得する。 /// </summary> private static async UniTask CheckAndAddLoginBonusAsync(LoginResult loginResult) { var loginDateTime = loginResult.InfoResultPayload.AccountInfo.TitleInfo.LastLogin; var lastLoginDateTime = loginResult.LastLoginTime; if (loginDateTime is null || lastLoginDateTime is null) { return; } // PlayFab は UTC なので +9 時間して日本時間に直してから日付を算出する var loginDate = (loginDateTime + TimeSpan.FromHours(9))?.Date; var lastLoginDate = (lastLoginDateTime + TimeSpan.FromHours(9))?.Date; if (loginDate == lastLoginDate) { return; } // ログインボーナスを獲得したということはその日は初めてのログインなので // デイリーミッションをリセットしたり累積ログイン日数を足したり await UserDataManager.Mission.ResetDailyMissionAsync(false); await UserDataManager.Mission.AddMissionActionCount(MissionAction.Login, 1); // ログインボーナス(今のことろ内容は固定)をプレゼントボックスに付与する await StoreManager.PurchaseItemAsync(StoreId.DummyStore, "login-bonus-0001", VirtualCurrencyNames.MS.Code, false); // PlayerPrefs にログインボーナスを獲得したことを記録しておく PlayerPrefsManager.HasLoginBonus = true; }
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")); }
/// <summary> /// アイテムを購入する。 /// </summary> /// <param name="storeItem"></param> /// <returns></returns> private async UniTaskVoid PurchaseAsync(StoreItem storeItem) { var vc = VirtualCurrencyNames.MS; var price = storeItem.VirtualCurrencyPrices[vc.Code]; if (VirtualCurrencyManager.MagicStone < price) { await MessageDialog.ShowAsync($"{vc.Name}が不足しています。"); return; } var item = CatalogManager.CatalogItems[storeItem.ItemId]; var confirm = await ConfirmDialog.ShowAsync($"{vc.Name} {price} 個で{item.DisplayName}を購入しますか?"); if (confirm == DialogResult.Cancel) { return; } await(MessageDialog.ShowAsync($"{item.DisplayName}を購入しました。"), StoreManager.PurchaseItemAsync(StoreId.MainStore, storeItem.ItemId, vc.Code).AsUniTask()); }