diff --git a/popcorn/Assets/MyGame/Scenes/Cooking/Scripts/CookingResult.cs b/popcorn/Assets/MyGame/Scenes/Cooking/Scripts/CookingResult.cs index 1cd5a492..14654c4c 100644 --- a/popcorn/Assets/MyGame/Scenes/Cooking/Scripts/CookingResult.cs +++ b/popcorn/Assets/MyGame/Scenes/Cooking/Scripts/CookingResult.cs @@ -44,7 +44,41 @@ public class CookingResult : MonoBehaviour var (rarityData, resultData, successAction) = LocalCacheManager.Load<(RarityData, CornResult, Action)>(PopcornGameManager.CookingResultDataTag); result.Value = resultData; SetData(productData, rarityData, viewType); + + // 材料消費&仮獲得 + RecipeDetailView.ConsumeMaterial(productData); + if (viewType == ProductViewType.Default) + { + result.Subscribe(cornResult => + { + // 仮獲得データ登録 + GameDataManager.GameData.WaitAddStock.FlavorId = productData.id; + GameDataManager.GameData.WaitAddStock.Stock = cornResult == CornResult.Failure ? 0 : productData.volume; + GameDataManager.GameData.WaitAddStock.Rarity = cornResult == CornResult.Perfect ? rarityData.Rarity : ProductRarity.Normal; + GameDataManager.SaveGameData(); + }).AddTo(this); + } + else + { + // 大量注文時処理 + var materialNumber = LocalCacheManager.Load(BulkOrder.MaterialNumberTag); + result.Where(x => x != CornResult.Failure ).Subscribe(cornResult => + { + if (!(GameDataManager.GameData.CompletedProductList.FirstOrDefault(data => data.Number == materialNumber) is BulkOrderResultData bulkOrderResultData)) + { + bulkOrderResultData = new BulkOrderResultData + { + Number = materialNumber + }; + GameDataManager.GameData.CompletedProductList.Add(bulkOrderResultData); + } + // レア上書き + bulkOrderResultData.Rarity = cornResult == CornResult.Perfect ? rarityData.Rarity : ProductRarity.Normal; + GameDataManager.SaveGameData(); + }).AddTo(this); + } + // チュートリアル時 if (!GameDataManager.GameData.FinishedFlags.HasFlag(TutorialFlag.FirstPlay)) { // ボタン非表示 @@ -64,55 +98,31 @@ public class CookingResult : MonoBehaviour }).AddTo(this); return; } + + // ボタン表示 successAction?.Invoke(); okButton.gameObject.SetActive(true); okButton.OnClickAsObservable().Take(1).Subscribe(_ => { // 獲得、遷移 - AddStock(productData, resultData == CornResult.Perfect ? rarityData.Rarity : ProductRarity.Normal); + MoveStock(GameDataManager.GameData.WaitAddStock); + GameDataManager.SaveGameData(); TransitionManager.Instance.LoadScene(GameScenes.Main); }).AddTo(this); return; } - result.Subscribe(r => + // UI用 + result.Subscribe(cornResult => { - SetUI(r, viewType, CheckMakeOne(r, productData)); - if (r != CornResult.Failure) + SetUI(cornResult, viewType, CheckMakeOne(cornResult, productData)); + if (cornResult != CornResult.Failure) { successAction?.Invoke(); } }).AddTo(this); - - // 各種ボタン押下後、獲得処理 - if (viewType == ProductViewType.Default) - { - Market.Instance.IsPause.Value = true; - okButton.OnClickAsObservable().Take(1).Subscribe(_ => - { - // 獲得、遷移 - AddStock(productData, result.Value == CornResult.Perfect ? rarityData.Rarity : ProductRarity.Normal); - Market.Instance.IsPause.Value = false; - TransitionManager.Instance.LoadScene(GameScenes.Main); - }).AddTo(this); - } - else - { - // 大量注文時処理 - var materialNumber = LocalCacheManager.Load(BulkOrder.MaterialNumberTag); - okButton.OnClickAsObservable().Take(1).Subscribe(_ => - { - // 獲得、遷移 - if (!GameDataManager.GameData.CompletedProductList.Exists(data => data.Number == materialNumber)) - { - var rarity = result.Value == CornResult.Perfect ? rarityData.Rarity : ProductRarity.Normal; - GameDataManager.GameData.CompletedProductList.Add(new BulkOrderResultData(){Number = materialNumber, Rarity = rarity}); - GameDataManager.SaveGameData(); - } - TransitionManager.Instance.LoadScene(GameScenes.Main); - }).AddTo(this); - } + // 大成功にする perfectButton.OnClickAsObservable().ThrottleFirst(TimeSpan.FromSeconds(.3f)).Subscribe(_ => { // 広告視聴後、結果上書き @@ -121,21 +131,46 @@ public class CookingResult : MonoBehaviour result.Value = CornResult.Perfect; }); }).AddTo(this); + + // 獲得する + if (viewType == ProductViewType.Default) + { + Market.Instance.IsPause.Value = true; + okButton.OnClickAsObservable().Take(1).Subscribe(_ => + { + // 獲得、遷移 + MoveStock(GameDataManager.GameData.WaitAddStock); + GameDataManager.SaveGameData(); + Market.Instance.IsPause.Value = false; + TransitionManager.Instance.LoadScene(GameScenes.Main); + }).AddTo(this); + + // もう一度作る + makeOneButton.OnClickAsObservable().Take(1).Subscribe(_ => + { + // 獲得、遷移 + MoveStock(GameDataManager.GameData.WaitAddStock); + GameDataManager.SaveGameData(); + Market.Instance.IsPause.Value = false; + SoundManager.Instance.ChangeVolumeUniqueBGM(1f); + TransitionManager.Instance.UnloadScene(GameScenes.CookingResults); + LocalCacheManager.Load(PopcornGameManager.RestartCallbackTag, null)?.Invoke(); + }).AddTo(this); + } + else + { + // 大量注文時処理 + okButton.OnClickAsObservable().Take(1).Subscribe(_ => + { + TransitionManager.Instance.LoadScene(GameScenes.Main); + }).AddTo(this); + } + + // 破棄する destructionButton.OnClickAsObservable().Take(1).Subscribe(_ => { - // 遷移 TransitionManager.Instance.LoadScene(GameScenes.Main); }).AddTo(this); - makeOneButton.OnClickAsObservable().Take(1).Subscribe(_ => - { - // 獲得、遷移 - AddStock(productData, result.Value == CornResult.Perfect ? rarityData.Rarity : ProductRarity.Normal); - RecipeDetailView.ConsumeMaterial(productData); - Market.Instance.IsPause.Value = false; - SoundManager.Instance.ChangeVolumeUniqueBGM(1f); - TransitionManager.Instance.UnloadScene(GameScenes.CookingResults); - LocalCacheManager.Load(PopcornGameManager.RestartCallbackTag, null)?.Invoke(); - }).AddTo(this); } private void SetData(ProductData recipe, RarityData rarity, ProductViewType viewType) @@ -210,17 +245,33 @@ public class CookingResult : MonoBehaviour return hasSpace && hasMaterials; } + public static void MoveStock(ProductStockData productStockData) + { + AddStock(productStockData); + productStockData.Stock = 0; + } + public static void AddStock(ProductData productData, ProductRarity rarity = ProductRarity.Normal) { + AddStock(new ProductStockData{FlavorId = productData.id, Stock = productData.volume, Rarity = rarity}); + GameDataManager.SaveGameData(); + } + + public static void AddStock(ProductStockData productStockData) + { + if (productStockData.Stock == 0) + { + return; + } var gameData = GameDataManager.GameData; // 店頭の空きに追加 - var remain = productData.volume; + var remain = productStockData.Stock; var shopSpace = Market.ShopStockCount - gameData.ShopStock.Count; var stockCount = Mathf.Min(shopSpace, remain); gameData.ShopStock.AddRange(Enumerable.Repeat(new ProductStockData { - FlavorId = productData.id, - Rarity = rarity, + FlavorId = productStockData.FlavorId, + Rarity = productStockData.Rarity, }, stockCount)); remain -= stockCount; // ShopStockに補充された場合、DisplayFlavors更新 @@ -235,7 +286,7 @@ public class CookingResult : MonoBehaviour // 空きのタンクを確認 gameData.StorageTanks .Select((tank, i) => (tank, i)) - .Where(x => x.tank.IsEmpty || x.tank.FlavorId == productData.id && !x.tank.IsFull) + .Where(x => x.tank.IsEmpty || x.tank.FlavorId == productStockData.FlavorId && !x.tank.IsFull) .Select(x => (x.i, space: x.tank.Capacity - x.tank.Stock)) .OrderBy(x => x.space) .ToList() @@ -248,14 +299,13 @@ public class CookingResult : MonoBehaviour // タンクが空ならフレーバー設定 if (gameData.StorageTanks[x.i].IsEmpty) { - gameData.StorageTanks[x.i].FlavorId = productData.id; + gameData.StorageTanks[x.i].FlavorId = productStockData.FlavorId; } // タンクに追加 stockCount = Mathf.Min(x.space, remain); - gameData.StorageTanks[x.i].AddStock(rarity, stockCount); + gameData.StorageTanks[x.i].AddStock(productStockData.Rarity, stockCount); remain -= stockCount; }); - GameDataManager.SaveGameData(); } } diff --git a/popcorn/Assets/MyGame/Scenes/Main/Scripts/KitchenManager.cs b/popcorn/Assets/MyGame/Scenes/Main/Scripts/KitchenManager.cs index 7dd5290c..624295f0 100644 --- a/popcorn/Assets/MyGame/Scenes/Main/Scripts/KitchenManager.cs +++ b/popcorn/Assets/MyGame/Scenes/Main/Scripts/KitchenManager.cs @@ -83,9 +83,11 @@ public class KitchenManager : MonoBehaviour gameData.Material.Add(materialData); } materialData.Amount++; + gameData.StorageTanks.Clear(); + gameData.ShopStock.Clear(); // ミッションカウンターリセット - GameDataManager.GameData.ResetNormalTotalCount(); - GameDataManager.GameData.ResetDailyTotalCount(); + gameData.ResetNormalTotalCount(); + gameData.ResetDailyTotalCount(); // 店舗レベル1達成表示 ShopLevelUp.ShowDialog(1, () => diff --git a/popcorn/Assets/MyGame/Scenes/marketing/Scripts/ShopLevelUp.cs b/popcorn/Assets/MyGame/Scenes/marketing/Scripts/ShopLevelUp.cs index 774819a4..e2a3ca30 100644 --- a/popcorn/Assets/MyGame/Scenes/marketing/Scripts/ShopLevelUp.cs +++ b/popcorn/Assets/MyGame/Scenes/marketing/Scripts/ShopLevelUp.cs @@ -36,18 +36,19 @@ public class ShopLevelUp : MonoBehaviour achievementText.text = shopLevelList.FirstOrDefault(data => data.shopLevel == shopLevel)?.Achievement ?? ""; recipeNameText.text = productData?.Name ?? ""; + GameDataManager.GameData.ViewedShopLevel = shopLevel; + GameDataManager.GameData.OrderConditionCount = 0; + // レシピ開放 + if (productData != null) + { + GameDataManager.GameData.MyRecipes = new List(GameDataManager.GameData.MyRecipes){productData.id}.Distinct().ToArray(); + GameDataManager.GameData.DailyRecipeGetCount++; + } + GameDataManager.SaveGameData(); + HeartMeter.Instance.SetShopLevel(GameDataManager.GameData.ViewedShopLevel, true); + closeButton.OnClickAsObservable().Take(1).Subscribe(_ => { - GameDataManager.GameData.ViewedShopLevel = shopLevel; - GameDataManager.GameData.OrderConditionCount = 0; - // レシピ開放 - if (productData != null) - { - GameDataManager.GameData.MyRecipes = new List(GameDataManager.GameData.MyRecipes){productData.id}.Distinct().ToArray(); - GameDataManager.GameData.DailyRecipeGetCount++; - } - GameDataManager.SaveGameData(); - transform.SetLocalScale(0); backgroundAnimator.SetTrigger(CloseTrigger); this.CallWaitForSeconds(.25f, () => @@ -83,14 +84,12 @@ public class ShopLevelUp : MonoBehaviour { UpdateDialog.ShowDialog(() => { - HeartMeter.Instance.SetShopLevel(GameDataManager.GameData.ViewedShopLevel, true); LocalCacheManager.Load(CallbackTag, null)?.Invoke(); LocalCacheManager.Remove(CallbackTag); }); } else { - HeartMeter.Instance.SetShopLevel(GameDataManager.GameData.ViewedShopLevel, true); LocalCacheManager.Load(CallbackTag, null)?.Invoke(); LocalCacheManager.Remove(CallbackTag); } diff --git a/popcorn/Assets/MyGame/Scenes/recipe/Scripts/RecipeDetailView.cs b/popcorn/Assets/MyGame/Scenes/recipe/Scripts/RecipeDetailView.cs index 4c073292..5c12e7a2 100644 --- a/popcorn/Assets/MyGame/Scenes/recipe/Scripts/RecipeDetailView.cs +++ b/popcorn/Assets/MyGame/Scenes/recipe/Scripts/RecipeDetailView.cs @@ -67,8 +67,6 @@ public class RecipeDetailView : MonoBehaviour nextButton.OnClickAsObservable().Take(1).Subscribe(_ => { LocalCacheManager.Save(PopcornGameManager.PanDataTag, panSelector.SelectedPanData.Value); - // 消費 - ConsumeMaterial(data); TransitionManager.Instance.LoadScene(GameScenes.Cooking); }).AddTo(this); diff --git a/popcorn/Assets/MyGame/Scripts/GameDataManager.cs b/popcorn/Assets/MyGame/Scripts/GameDataManager.cs index c6c44f18..81b65cbe 100644 --- a/popcorn/Assets/MyGame/Scripts/GameDataManager.cs +++ b/popcorn/Assets/MyGame/Scripts/GameDataManager.cs @@ -142,8 +142,10 @@ public sealed class GameData { public int WaitAddCoin; [DataMember(Name = "Data41")] public int WaitAddHeart; - - // mission + [DataMember(Name = "Data42")] + public ProductStockData WaitAddStock; + + // mission [DataMember(Name = "Data1001")] public int TotalAddCoin { get; private set; } [DataMember(Name = "Data1002")] @@ -387,6 +389,7 @@ public sealed class GameData { dailyMissionIdArray = dailyMissionIdArray ?? new int[0]; dailyMissionAchievedIdArray = dailyMissionAchievedIdArray ?? new int[0]; DailyTotalSalesList = DailyTotalSalesList ?? new List(); + WaitAddStock = WaitAddStock ?? new ProductStockData{Rarity = ProductRarity.Normal}; } private Dictionary ArrayToDictionary(KeyValueOfintint[] array){ var dictionary = new Dictionary(); diff --git a/popcorn/Assets/MyGame/Scripts/InitializeUnitySettings.cs b/popcorn/Assets/MyGame/Scripts/InitializeUnitySettings.cs index cd7ed8de..cf3f0ee7 100644 --- a/popcorn/Assets/MyGame/Scripts/InitializeUnitySettings.cs +++ b/popcorn/Assets/MyGame/Scripts/InitializeUnitySettings.cs @@ -30,6 +30,8 @@ public sealed class InitializeUnitySettings : MonoBehaviour { // 遅延させていたパラメータを追加 GameDataManager.GameData.MoveAllWaitValue(); + // 調理後リザルトでの仮獲得データを反映(タスクキル対策) + CookingResult.MoveStock(GameDataManager.GameData.WaitAddStock); GameDataManager.SaveGameData(); } }