From 9d75cd73f91baf138e6e79fad496c810e62bb334 Mon Sep 17 00:00:00 2001 From: kimura Date: Fri, 15 Apr 2022 16:04:50 +0900 Subject: [PATCH] =?UTF-8?q?=E5=8F=97=E3=81=91=E5=8F=96=E3=82=8A=E5=87=A6?= =?UTF-8?q?=E7=90=86=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Main/Scripts/AutoCookCompleteView.cs | 96 ++++++++++++++++--- 1 file changed, 82 insertions(+), 14 deletions(-) diff --git a/popcorn/Assets/MyGame/Scenes/Main/Scripts/AutoCookCompleteView.cs b/popcorn/Assets/MyGame/Scenes/Main/Scripts/AutoCookCompleteView.cs index b56d0416..d23d7ff3 100644 --- a/popcorn/Assets/MyGame/Scenes/Main/Scripts/AutoCookCompleteView.cs +++ b/popcorn/Assets/MyGame/Scenes/Main/Scripts/AutoCookCompleteView.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Linq; using UniRx; using UnityEngine; @@ -23,21 +24,10 @@ namespace MyGame.Scenes.Main.Scripts var autoCookDataList = SpreadsheetDataManager.Instance.GetBaseDataList(Const.AutoCookDataSheet); var autoCookData = autoCookDataList.First(data => data.level == gameData.AutoCookLevel); - closeButton.OnClickAsObservable().Take(1).Subscribe(_ => - { - LocalCacheManager.Load(CallbackTag, null)?.Invoke(); - LocalCacheManager.Remove(CallbackTag); - transform.parent.SetLocalScale(0); - backgroundAnimator.SetTrigger(CloseTrigger); - this.CallWaitForSeconds(.25f, () => - { - TransitionManager.Instance.UnloadScene(GameScenes.AutomaticCookingComplete); - }); - }).AddTo(this); - - // アイテムのリスト生成 var productList = SpreadsheetDataManager.Instance.GetBaseDataList(Const.ProductDataSheet); + var productCount = Mathf.CeilToInt((float)autoCookData.earnCount / Const.TankCapacity); + var earnIds = gameData.AutoCookProducts.Take(productCount).ToArray(); var earnProductArray = productList .Where(data => earnIds.Contains(data.id)) .Select(data => new ProductData(data, 1){volume = Const.TankCapacity}) @@ -50,9 +40,87 @@ namespace MyGame.Scenes.Main.Scripts // リストの最後のポップコーン数を上書き earnProductArray.Last().volume = lastProductAmount; + // タンクの空き確認 + var emptyTankCount = gameData.StorageTanks.Count(tank => tank.IsEmpty); + var discardProductList = new List(); + + // 価格が高い順に破棄対象にする + foreach (var productData in earnProductArray.OrderBy(data => data.price)) + { + if (productData.volume == Const.TankCapacity) + { + if (emptyTankCount > 0) + { + emptyTankCount--; + continue; + } + discardProductList.Add(productData); + } + else + { + if (gameData.StorageTanks.Exists(data => data.FlavorId == productData.id && data.Capacity - data.Stock >= productData.volume)) + { + continue; + } + discardProductList.Add(productData); + } + } + + closeButton.OnClickAsObservable().Take(1).Subscribe(_ => + { + LocalCacheManager.Load(CallbackTag, null)?.Invoke(); + LocalCacheManager.Remove(CallbackTag); + transform.parent.SetLocalScale(0); + backgroundAnimator.SetTrigger(CloseTrigger); + this.CallWaitForSeconds(.25f, () => + { + TransitionManager.Instance.UnloadScene(GameScenes.AutomaticCookingComplete); + }); + }).AddTo(this); + + if (discardProductList.Count > 0) + { + getButton.OnClickAsObservable().ThrottleFirst(TimeSpan.FromSeconds(.3f)).Subscribe(_ => + { + TransitionManager.Instance.UnloadScene(GameScenes.AutomaticCookingComplete); + AutoCookCaution.ShowDialog((earnProductArray, discardProductList), () => + { + LocalCacheManager.Load(CallbackTag, null)?.Invoke(); + LocalCacheManager.Remove(CallbackTag); + }); + }).AddTo(this); + } + else + { + getButton.OnClickAsObservable().ThrottleFirst(TimeSpan.FromSeconds(.3f)).Subscribe(_ => + { + // コーン獲得 + foreach (var productData in earnProductArray) + { + CookingResult.AddStock(productData); + } + + // 自動調理セーブ + gameData.AutoCookProducts = Array.Empty(); + var maxLevel = autoCookDataList.Last().level; + if (gameData.AutoCookLevel < maxLevel) + { + gameData.AutoCookUsesCount++; + if (gameData.AutoCookUsesCount >= autoCookData.clearCount) + { + gameData.AutoCookUsesCount = 0; + gameData.AutoCookLevel++; + } + } + GameDataManager.SaveGameData(); + closeButton.onClick.Invoke(); + }).AddTo(this); + } + + // 完成したポップコーンを表示 for (int i = 0; i < popcorns.Length; i++) { - if (i < count) + if (i < productCount) { popcorns[i].SetView(earnProductArray[i]); popcorns[i].SetActive(true);