/// <summary> /// リロード /// </summary> private void Reload() { //BOX内リスト確認通信 PresentApi.CallListApi((response) => { //追加ローダー準備 var addLoader = new AssetListLoader(response.tPresentBox .Concat(response.tPresentBoxLimited) .Concat(response.tPresentBoxReceived) .Select(x => CommonIconUtility.GetItemInfo(x.itemType, x.itemId)) .Where(x1 => !x1.IsCommonSprite() && !this.loader.Exists(x2 => x2.path == x1.GetSpritePath())) .Select(x => new AssetLoader <Sprite>(x.GetSpritePath()))); //ロード中はタッチブロック SharedUI.Instance.DisableTouch(); //ロード addLoader.Load(() => { //タッチブロック解除 SharedUI.Instance.EnableTouch(); //ローダー統合 this.loader.AddRange(addLoader); //再セットアップ this.Setup(response, this.loader); //必要ならVIPレベルアップ表示 UIVipLevelUp.OpenIfNeed(this.vipLevelUpPrefab); }); }); }
/// <summary> /// 開く /// </summary> public static void Open( SingleBattleResultPopupContent prefab, Master.SingleStageData stageData, SinglePlayApi.ClearResponseData response, Rank clearRank, Action onClose) { //報酬 var rewards = response.firstReward.Concat(response.normalReward).ToArray(); //ローダー準備 var loader = new AssetListLoader(rewards .Select(x => CommonIconUtility.GetItemInfo(x.itemType, x.itemId)) .Where(x => !x.IsCommonSprite()) .Select(x => new AssetLoader <Sprite>(x.GetSpritePath()))); //ロード中はタッチブロック SharedUI.Instance.DisableTouch(); //ロード loader.Load(() => { //タッチブロック解除 SharedUI.Instance.EnableTouch(); //ダイアログ開く var dialog = SharedUI.Instance.ShowSimpleDialog(); var content = dialog.AddContent(prefab); content.Setup(dialog, stageData, response, clearRank, rewards, loader, onClose); }); }
/// <summary> /// 開く /// </summary> public static void Open(PresentBoxDialogContent prefab, Action <PresentBoxDialogContent> onClose) { //BOX内リスト確認通信 PresentApi.CallListApi((response) => { //ローダー準備 var loader = new AssetListLoader(response.tPresentBox .Concat(response.tPresentBoxLimited) .Concat(response.tPresentBoxReceived) .Select(x => CommonIconUtility.GetItemInfo(x.itemType, x.itemId)) .Where(x => !x.IsCommonSprite()) .Select(x => new AssetLoader <Sprite>(x.GetSpritePath()))); //ロード中はタッチブロック SharedUI.Instance.DisableTouch(); //ロード loader.Load(() => { //タッチブロック解除 SharedUI.Instance.EnableTouch(); //ダイアログ表示 var dialog = SharedUI.Instance.ShowSimpleDialog(); dialog.titleText.text = Masters.LocalizeTextDB.Get("PresentBoxTitle"); dialog.closeButtonEnabled = true; var content = dialog.AddContent(prefab); content.Setup(response, loader); content.onClose = onClose; }); }); }
/// <summary> /// ショップ開く /// </summary> public static void Open(MultiBattleShop prefab) { //通信で商品リスト取得 BillingApi.CallListApi(() => { ShopApi.CallNowShopApi((tShops) => { //ローダー準備 var loader = new AssetListLoader(Masters.ShopDB .GetList() .Where(x => x.multiFlg > 0) .SelectMany(x1 => Masters.ShopItemDB.GetList().FindAll(x2 => x2.shopItemId == x1.shopItemId)) .Select(x => CommonIconUtility.GetItemInfo(x.itemType, x.itemId)) .Where(x => !x.IsCommonSprite()) .Select(x => new AssetLoader <Sprite>(x.GetSpritePath()))); //ロード中タッチブロック SharedUI.Instance.DisableTouch(); //リソースロード loader.Load(() => { //タッチブロック解除 SharedUI.Instance.EnableTouch(); //ショップダイアログ生成 var dialog = SharedUI.Instance.ShowPopup(prefab); dialog.loader = loader; dialog.Setup(tShops); }); }); }); }
/// <summary> /// vip詳細開く /// </summary> public static void Open(VipInfoDialog prefab) { // 通信で、vipLevel, 補償取得の可否取得 VipApi.CallVipLevelApi((response) => { var loader = new AssetListLoader(Masters.VipRewardDB .GetList() .Select(x => CommonIconUtility.GetItemInfo(x.itemType, x.itemId)) .Where(x => !x.IsCommonSprite()) .Select(x => new AssetLoader <Sprite>(x.GetSpritePath())) ); // タッチブロック SharedUI.Instance.DisableTouch(); // 読み込み開始 loader.Load(() => { //タッチブロック解除 SharedUI.Instance.EnableTouch(); // ロード後 var dialog = SharedUI.Instance.ShowSimpleDialog(); dialog.closeButtonEnabled = true; dialog.titleText.text = Masters.LocalizeTextDB.Get("VipInfoTitle"); var content = dialog.AddContent(prefab); content.assetLoader = loader; content.Set(response); }); }); }
/// <summary> /// OnDestroy /// </summary> protected override void OnDestroy() { this.loader.Unload(); this.loader.Clear(); this.loader = null; base.OnDestroy(); }
/// <summary> /// セットアップ /// </summary> private void Setup(SimpleDialog dialog, List <FishDataEx> fishDataList, AssetListLoader loader, Master.ModelBase master) { this.dialog = dialog; this.fishDataList = fishDataList; this.loader = loader; //シングルモード内容構築 if (master is Master.SingleStageData) { var stageData = master as Master.SingleStageData; //ワールド名 this.worldNameText.text = Masters.SingleWorldDB.FindById(stageData.worldId).name; //ステージ名 this.stageNameText.text = stageData.name; //特殊魚マーク表示OFF this.focusedFishSubTextBg.gameObject.SetActive(false); // シングルワールドマスターデータキー var worldKey = Masters.SingleWorldDB.FindById(stageData.worldId).key; // 図鑑の背景イメージ、パース string spritePath = SharkDefine.GetZukanBgSpritePath(worldKey); // 図鑑の背景イメージ、ロード this.worldBgImage.sprite = this.loader[spritePath].handle.asset as Sprite; } //マルチモード内容構築 else if (master is Master.MultiWorldData) { var worldData = master as Master.MultiWorldData; //ワールド名 this.worldNameText.text = worldData.name; //ステージ名非表示 this.stageNameText.gameObject.SetActive(false); // 図鑑の背景イメージ、パース string spritePath = SharkDefine.GetZukanBgSpritePath(worldData.key); // 図鑑の背景イメージ、ロード this.worldBgImage.sprite = this.loader[spritePath].handle.asset as Sprite; } //ダイアログタイトル「図鑑」 this.dialog.titleText.text = Masters.LocalizeTextDB.Get("Dictionary"); //Closeボタン表示ON this.dialog.closeButtonEnabled = true; //ワールド名、ステージ名の幅に合わせてレイアウト調整 LayoutRebuilder.ForceRebuildLayoutImmediate(this.nameArea); //初期フォーカス魚設定 if (this.fishDataList.Count > 0) { this.SetFocusedFish(this.fishDataList[0]); } //スクロールビュー構築 this.scrollView.Initialize( this.thumbnailIconPrefab.gameObject, this.fishDataList.Count, this.OnUpdateFishThumbnailIconView ); }
/// <summary> /// セット /// </summary> private void Set(AssetListLoader loader, TurretViewer turretViewer) { this.loader = loader; this.turretViewer = turretViewer; var userData = UserData.Get(); if (userData != null) { //ユーザー名 this.userNameText.text = userData.name; //ユーザーレベル this.userLvText.text = string.Format("Lv.{0}", userData.lv); //EXPメーター if (userData.lv < Masters.LevelDB.GetList().Max(x => x.lv)) { uint needExp = (uint)Masters.LevelDB.GetList() .Where(x => x.lv <= userData.lv) .Sum(x => x.exp); this.expMeter.fillAmount = (float)userData.exp / needExp; } else { this.expMeter.fillAmount = 1f; } // ユーザーID this.userIdText.text = Masters.LocalizeTextDB.GetFormat("UserId", userData.userId.ToString()); // 最高ベット var betId = Masters.LevelDB.FindById(userData.lv).betId; var maxBet = Masters.BetDB.FindById(betId).maxBet; this.maxBetText.text = Masters.LocalizeTextDB.GetFormat("UnitMaxbet", maxBet); // ユーザ機器移動の情報セット this.takeOverId.text = PlayerPrefs.GetString("takeOverId", ""); this.takeOverPass.text = PlayerPrefs.GetString("takeOverPass", ""); // ボタンセット if (string.IsNullOrEmpty(this.takeOverId.text)) { this.takeOverIdCopyButton.interactable = false; this.takeOverPassCopyButton.interactable = false; this.SetGrayout(true); } else { this.takeOverIdCopyButton.interactable = true; this.takeOverPassCopyButton.interactable = true; this.SetGrayout(false); } } }
/// <summary> /// OnDestroy /// </summary> private void OnDestroy() { if (this.loader != null) { this.loader.Unload(); this.loader.Clear(); this.loader = null; } this.onClose?.Invoke(this); }
/// <summary> /// セットアップ /// </summary> private void Setup( SimpleDialog dialog, Master.SingleStageData stageData, SinglePlayApi.ClearResponseData response, Rank clearRank, SinglePlayApi.RewardData[] rewards, AssetListLoader loader, Action onClose) { this.dialog = dialog; this.dialog.onClose = onClose; this.response = response; this.rewards = rewards; this.loader = loader; //星マーク for (int i = 0; i < this.starImage.Length; i++) { this.starImage[i].enabled = i < (int)clearRank - 2; } //通常報酬が8個以下なら if (this.rewards.Length < 9) { //非スクロールエリアに報酬アイコンを生成する this.horizontalLayoutGroup.gameObject.SetActive(true); this.scrollView.gameObject.SetActive(false); for (int i = 0; i < this.rewards.Length; i++) { var icon = Instantiate(this.rewardIconPrefab, this.horizontalLayoutGroup.transform, false); this.OnUpdateRewardIconView(icon.gameObject, i); } } //通常報酬が9個以上なら else { //スクロールエリアに報酬アイコンを生成する this.horizontalLayoutGroup.gameObject.SetActive(true); this.scrollView.gameObject.SetActive(true); this.scrollView.Initialize(this.rewardIconPrefab.gameObject, this.rewards.Length, this.OnUpdateRewardIconView); } //タイトルテキスト設定 this.dialog.titleText.text = Masters.LocalizeTextDB.Get("Result"); //ステージセレクトへ戻るボタンの追加 var button = this.dialog.AddOKButton(); button.text.text = Masters.LocalizeTextDB.Get("ToStageSelect"); button.onClick = this.OnClickOKButton; }
/// <summary> /// 開く /// </summary> public static void Open(SingleStageFishDictionaryDialogContent prefab, Master.ModelBase master) { List <FishDataEx> fishDataList = null; string worldKey = null; //シングルモードの場合 if (master is Master.SingleStageData) { var stageData = master as Master.SingleStageData; fishDataList = Masters.SingleStageFishDB .GetList() .Where(x => x.stageId == stageData.id) .Select(x => new FishDataEx(Masters.FishDB.FindById(x.fishId), x)) .ToList(); worldKey = Masters.SingleWorldDB.FindById(stageData.worldId).key; } //マルチモードの場合 else if (master is Master.MultiWorldData) { var worldData = master as Master.MultiWorldData; fishDataList = Masters.MultiStageFishDB .GetList() .Where(x => x.worldId == worldData.id) .Select(x => new FishDataEx(Masters.FishDB.FindById(x.fishId), x)) .ToList(); worldKey = worldData.key; } var loader = new AssetListLoader(fishDataList.Select(x => new AssetLoader <Sprite>(SharkDefine.GetFishThumbnailSpritePath(x.Item1.key)))); loader.Add <Sprite>(SharkDefine.GetZukanBgSpritePath(worldKey)); //ロード中のタッチブロック SharedUI.Instance.DisableTouch(); //ロード loader.Load(() => { //タッチブロック解除 SharedUI.Instance.EnableTouch(); //ダイアログ開く var dialog = SharedUI.Instance.ShowSimpleDialog(); var content = dialog.AddContent(prefab); content.Setup(dialog, fishDataList, loader, master); }); }
/// <summary> /// セットアップ /// </summary> public void Setup(MultiPlayApi.LevelUpResponseData response, AssetListLoader loader, Action onClose) { this.loader = loader; this.onClose = onClose; //レベルの桁数によってOn/Off切り替わる int lv = (int)response.tUsers.level; int n = (100 <= lv) ? 2 : (10 <= lv && lv < 100) ? 1 : 0; this.numGroups[0].root.SetActive(n == 0); this.numGroups[1].root.SetActive(n == 1); this.numGroups[2].root.SetActive(n == 2); //数値イメージ差し替え for (int i = 0; i < this.numGroups[n].numImages.Length; i++) { int num = lv / (int)Mathf.Pow(10, i) % 10; string spriteName = string.Format("BtMlti_030_0005_{0}", num); this.numGroups[n].numImages[i].sprite = SceneChanger.currentScene.sceneAtlas.GetSprite(spriteName); } //アニメーション再生 this.animator.Play(this.numGroups[n].stateName, this.animator.GetLayerIndex("Text_Count"), 0f); //アイテム無しならここでreturn if (response.mLevelReward == null || response.mLevelReward.Length == 0) { return; } //アイテム生成 foreach (var item in response.mLevelReward) { var itemIcon = Instantiate(this.itemIconPrefab, this.itemIconArea, false); //CommonIcon表示構築 itemIcon.Set(item.itemType, item.itemId, true); //数量テキストセット if (item.itemNum > 1) { itemIcon.SetCountText(item.itemNum); } else { itemIcon.countText.text = null; } } }
/// <summary> /// OnDestroy /// </summary> private void OnDestroy() { if (this.turretViewer != null) { Destroy(this.turretViewer.gameObject); this.turretViewer = null; } if (this.loader != null) { this.loader.Unload(); this.loader.Clear(); this.loader = null; } }
/// <summary> /// 内容構築 /// </summary> private void Setup(PresentApi.ListResponseData response, AssetListLoader loader) { this.response = response; this.loader = loader; //各タブに要素を割り当てる this.unlimitedTab.SetItems(response.tPresentBox.ToArray(), 10); this.limitedTab.SetItems(response.tPresentBoxLimited.ToArray(), 10); this.historyTab.SetItems(response.tPresentBoxReceived.ToArray(), 999); //一括受け取りボタンの表示設定 this.SetReceiveAllButtonView(); //スクロールビュー構築 this.SetPageNo(this.selectedTab.pageIndex); }
/// <summary> /// 開く /// </summary> public static void Open(MultiPlayApi.LogData logData, UILevelUp prefab, RectTransform parent, Action onClose) { //API実行 MultiPlayApi.CallLevelUpApi(logData, (response) => { //レベルアップ前後の値 //uint beforeLevel = UserData.Get().lv; uint afterLevel = response.tUsers.level; UserData.Get().lv = afterLevel; //ローダー var loader = new AssetListLoader(); if (response.mLevelReward != null) { //汎用スプライトじゃなければローダーに積む loader.AddRange(response.mLevelReward .Select(x => CommonIconUtility.GetItemInfo(x.itemType, x.itemId)) .Where(x => !x.IsCommonSprite()) .Select(x => new AssetLoader <Sprite>(x.GetSpritePath()))); //報酬付与 foreach (var reward in response.mLevelReward) { UserData.Get().AddItem((ItemType)reward.itemType, reward.itemId, reward.itemNum); } } //ロード中のタッチブロック SharedUI.Instance.DisableTouch(); //ロード開始 loader.Load(() => { //タッチブロック解除 SharedUI.Instance.EnableTouch(); //レベルアップダイアログ開く var dialog = Instantiate(prefab, parent, false); dialog.Setup(response, loader, onClose); }); }); }
/// <summary> /// 開く /// </summary> public static void Open(UserInformationDialogContent contentPrefab, TurretViewer turretViewerPrefab) { var selectedTurret = UserData.Get().GetSelectedTurretData(); var batteryData = Masters.BatteryDB.FindById(selectedTurret.batteryMasterId); var barrelData = Masters.BarrelDB.FindById(selectedTurret.barrelMasterId); var bulletData = Masters.BulletDB.FindById(selectedTurret.bulletMasterId); var loader = new AssetListLoader(); loader.Add <GameObject>(SharkDefine.GetBatteryPrefabPath(batteryData.key)); loader.Add <GameObject>(SharkDefine.GetBarrelPrefabPath(barrelData.key)); loader.Add <BulletBase>(SharkDefine.GetBulletPrefabPath(bulletData.key)); //ロード中はタッチブロック SharedUI.Instance.DisableTouch(); //ロード loader.Load(() => { //タッチブロック解除 SharedUI.Instance.EnableTouch(); //砲台表示 var turretViewer = Instantiate(turretViewerPrefab, null, false); turretViewer.BatteryKey = batteryData.key; turretViewer.BarrelKey = barrelData.key; turretViewer.BulletKey = bulletData.key; turretViewer.Reflesh(); turretViewer.StartShot(); //ダイアログ開く var dialog = SharedUI.Instance.ShowSimpleDialog(); dialog.closeButtonEnabled = true; dialog.titleText.text = Masters.LocalizeTextDB.Get("UserInformation"); var content = dialog.AddContent(contentPrefab); content.Set(loader, turretViewer); }); }
/// <summary> /// 開く /// </summary> public static void Open( SingleStageChallengeConfirmDialogContent prefab, Master.SingleStageData stageData, Rank rank, Action <uint> onStageStart) { bool isCleared = rank > Rank.None; //報酬リスト List <RewardData> rewards = new List <RewardData>(); //このステージで入手可能な報酬一覧 var lotDatas = Masters.SingleStageRewardDB .GetList() .Where(x => x.groupId == stageData.rewardGroupId) .SelectMany(x1 => Masters.SingleStageRewardLotDB.GetList().FindAll(x2 => x2.lotGroupId == x1.lotGroupId)) .ToArray(); foreach (var data in lotDatas) { if (!rewards.Exists(x => x.itemType == data.itemType && x.itemId == data.itemId)) { rewards.Add(new RewardData { itemType = data.itemType, itemId = data.itemId, itemNum = data.itemNum }); } } //初回報酬 var firstReward = Masters.SingleStageFirstRewardDB .GetList() .Where(x => x.groupId == stageData.rewardFirstGroupId) .Select(x => new RewardData { itemType = x.itemType, itemId = x.itemId, itemNum = x.amount, isFirstReward = true }); if (isCleared) { //初回報酬入手済みなら末尾に追加 rewards.AddRange(firstReward); } else { //初回報酬未入手なら先頭に追加 rewards.InsertRange(0, firstReward); } //ローダー準備 var loader = new AssetListLoader(rewards .Select(x => CommonIconUtility.GetItemInfo(x.itemType, x.itemId)) .Where(x => !x.IsCommonSprite()) .Select(x => new AssetLoader <Sprite>(x.GetSpritePath()))); //ロード中はタッチブロック SharedUI.Instance.DisableTouch(); //ロード loader.Load(() => { //タッチブロック解除 SharedUI.Instance.EnableTouch(); //ダイアログ開く var dialog = SharedUI.Instance.ShowSimpleDialog(); var content = dialog.AddContent(prefab); content.Set(dialog, stageData, rank, rewards, loader, onStageStart); }); }
/// <summary> /// 内容構築 /// </summary> private void Set( SimpleDialog dialog, Master.SingleStageData stageData, Rank rank, List <RewardData> rewards, AssetListLoader loader, Action <uint> onStageStart) { this.dialog = dialog; this.stageData = stageData; this.isCleared = rank > Rank.None; this.rewards = rewards; this.loader = loader; this.onStageStart = onStageStart; var worldData = Masters.SingleWorldDB.FindById(this.stageData.worldId); //ワールド名、ステージ名 this.worldNameText.text = worldData.name; this.stageNameText.text = this.stageData.name; LayoutRebuilder.ForceRebuildLayoutImmediate(this.nameArea); //星マーク for (int i = 0; i < this.star.Length; i++) { this.star[i].enabled = ((int)rank - 2) > i; } //報酬データが8個以下なら if (this.rewards.Count < 9) { //非スクロールエリアに報酬アイコンを生成する this.nonScrollRewardArea.gameObject.SetActive(true); this.rewardScrollView.gameObject.SetActive(false); for (int i = 0; i < this.rewards.Count; i++) { var icon = Instantiate(this.rewardIconPrefab, this.nonScrollRewardArea.transform, false); this.OnUpdateRewardIconView(icon.gameObject, i); } } //報酬データが9個以上なら else { //スクロールエリアに報酬アイコンを生成する this.nonScrollRewardArea.gameObject.SetActive(false); this.rewardScrollView.gameObject.SetActive(true); this.rewardScrollView.Initialize(this.rewardIconPrefab.gameObject, this.rewards.Count, this.OnUpdateRewardIconView); } //必要コイン数 this.needCoinNumText.text = this.stageData.needCoin.ToString(); LayoutRebuilder.ForceRebuildLayoutImmediate(this.coinArea); //YesNoボタン追加:挑戦する、キャンセル var btnGroup = this.dialog.AddButton(1); var challengeButton = btnGroup.buttons[0]; challengeButton.text.text = Masters.LocalizeTextDB.Get("Challenge"); challengeButton.image.sprite = SharedUI.Instance.commonAtlas.GetSprite(SharkDefine.NO_BTN_SPRITE_NAME); challengeButton.onClick = this.OnClickChallengeButton; //必要コイン数に満たない場合 var userData = UserData.Get(); if (userData == null || userData.coin < this.stageData.needCoin) { //グレースケールにして挑戦するボタンを押せなくする challengeButton.button.interactable = false; challengeButton.image.material = challengeButton.text.material = SharedUI.Instance.grayScaleMaterial; } //Closeボタン追加 this.dialog.closeButtonEnabled = true; }