diff --git a/popcorn/Assets/MyGame/Scenes/recipe/RecipeChoice.unity b/popcorn/Assets/MyGame/Scenes/recipe/RecipeChoice.unity index 47c6d078..bb8c03a9 100644 --- a/popcorn/Assets/MyGame/Scenes/recipe/RecipeChoice.unity +++ b/popcorn/Assets/MyGame/Scenes/recipe/RecipeChoice.unity @@ -1867,6 +1867,8 @@ MonoBehaviour: cancelButton: {fileID: 843133640} nextButton: {fileID: 1853630204} disabledNextButton: {fileID: 1037294270} + tankCaution: {fileID: 1464412873} + panSelector: {fileID: 1160535648} flavorName: {fileID: 707887860} flavorPrice: {fileID: 498799267} flavorStock: {fileID: 1109202679} diff --git a/popcorn/Assets/MyGame/Scenes/recipe/Scripts/RecipeDetailView.cs b/popcorn/Assets/MyGame/Scenes/recipe/Scripts/RecipeDetailView.cs index a39a37c5..3ad373a7 100644 --- a/popcorn/Assets/MyGame/Scenes/recipe/Scripts/RecipeDetailView.cs +++ b/popcorn/Assets/MyGame/Scenes/recipe/Scripts/RecipeDetailView.cs @@ -8,12 +8,16 @@ public class RecipeDetailView : MonoBehaviour { private static readonly int OpenTrigger = Animator.StringToHash("OpenTrigger"); private static readonly int CloseTrigger = Animator.StringToHash("CloseTrigger"); - + private static readonly string flavorStockFormat = "所持数 :{0}"; + private static readonly string cornAmountFormat = "{0}/{1}"; + private static readonly string flavorAmountFormat = "{0} / {1}"; [SerializeField] private Animator backgroundAnimator; [SerializeField] private Button cancelButton; [SerializeField] private Button nextButton; [SerializeField] private GameObject disabledNextButton; + [SerializeField] private GameObject tankCaution; + [SerializeField] private PanSelector panSelector; [SerializeField] private Text flavorName; [SerializeField] private Text flavorPrice; [SerializeField] private Text flavorStock; @@ -21,9 +25,6 @@ public class RecipeDetailView : MonoBehaviour [SerializeField] private Text flavor1AmountText; [SerializeField] private Text flavor2AmountText; [SerializeField] private GameObject flavor2View; - private static readonly string flavorStockFormat = "所持数 :{0}"; - private static readonly string cornAmountFormat = "{0}/{1}"; - private static readonly string flavorAmountFormat = "{0} / {1}"; private void Start() { @@ -38,36 +39,34 @@ public class RecipeDetailView : MonoBehaviour TransitionManager.Instance.UnloadScene(GameScenes.RecipeChoice); }); }).AddTo(this); + + nextButton.OnClickAsObservable().Subscribe(_ => + { + var gameData = GameDataManager.GameData; + gameData.cornSeed -= data.CornAmount; + var flavorIndex1 = gameData.Material.FindIndex(x => x.Id == data.Flavors[0].id); + var stockMaterial1 = gameData.Material[flavorIndex1]; + stockMaterial1.Amount -= data.Flavors[0].amount; + gameData.Material[flavorIndex1] = stockMaterial1; + if (data.Flavors.Count == 2) + { + var flavorIndex2 = gameData.Material.FindIndex(x => x.Id == data.Flavors[1].id); + var stockMaterial2 = gameData.Material[flavorIndex2]; + stockMaterial2.Amount -= data.Flavors[1].amount; + gameData.Material[flavorIndex2] = stockMaterial2; + } + + GameDataManager.SaveGameData(); + TransitionManager.Instance.LoadScene(GameScenes.Cooking); + }).AddTo(this); SetRecipe(data); - if (CheckAmount(data)) - { - disabledNextButton.SetActive(false); - nextButton.OnClickAsObservable().Subscribe(_ => - { - var gameData = GameDataManager.GameData; - gameData.cornSeed -= data.CornAmount; - var flavorIndex1 = gameData.Material.FindIndex(x => x.Id == data.Flavors[0].id); - var stockMaterial1 = gameData.Material[flavorIndex1]; - stockMaterial1.Amount -= data.Flavors[0].amount; - gameData.Material[flavorIndex1] = stockMaterial1; - if (data.Flavors.Count == 2) - { - var flavorIndex2 = gameData.Material.FindIndex(x => x.Id == data.Flavors[1].id); - var stockMaterial2 = gameData.Material[flavorIndex2]; - stockMaterial2.Amount -= data.Flavors[1].amount; - gameData.Material[flavorIndex2] = stockMaterial2; - } - - GameDataManager.SaveGameData(); - TransitionManager.Instance.LoadScene(GameScenes.Cooking); - }).AddTo(this); - } - else - { - nextButton.interactable = false; - disabledNextButton.SetActive(true); - } + var isPassedAmount = CheckAmount(data); + var isPassedTank = CheckTank(data); + nextButton.interactable = isPassedAmount && isPassedTank; + panSelector.gameObject.SetActive(isPassedTank); + disabledNextButton.SetActive(!isPassedAmount || !isPassedTank); + tankCaution.SetActive(!isPassedTank); } public void SetRecipe(RecipeData data) @@ -132,35 +131,21 @@ public class RecipeDetailView : MonoBehaviour flavor2AmountText.color = Color.red; } } + return flag; + } - if (!flag) - { - return false; - } - - // 店頭の空きがない - // 店頭の空きに追加 - if (Market.ShopStockCount >= gameData.ShopStock.Count + data.Volume) + private bool CheckTank(RecipeData data) + { + var gameData = GameDataManager.GameData; + // 店頭の空き確認 + if (data.Volume <= Market.ShopStockCount - gameData.ShopStock.Count) { return true; } - // 空のタンクに追加 - if (gameData.StorageTanks.FindIndex(x => x.Stock == 0) != -1) - { - return true; - } - // 同じフレーバーのタンクを確認 - var index = gameData.StorageTanks.FindIndex(x => x.FlavorId == data.RecipeId); - if (index != -1) - { - // 同じフレーバーのタンクの空きに追加 - var tank = gameData.StorageTanks[index]; - if (tank.Capacity >= tank.Stock + data.Volume) - { - return true; - } - } - return false; + // 空のタンク、同じフレーバーのタンク空き確認 + return gameData.StorageTanks + .Where(tank => tank.IsEmpty || tank.FlavorId == data.RecipeId && !tank.IsFull) + .Any(tank => data.Volume <= tank.Capacity - tank.Stock); } } \ No newline at end of file