diff --git a/popcorn/Assets/MyGame/Scenes/DebugOption/Scripts/DebugOptionManager.cs b/popcorn/Assets/MyGame/Scenes/DebugOption/Scripts/DebugOptionManager.cs index c5482e48..fa28f810 100644 --- a/popcorn/Assets/MyGame/Scenes/DebugOption/Scripts/DebugOptionManager.cs +++ b/popcorn/Assets/MyGame/Scenes/DebugOption/Scripts/DebugOptionManager.cs @@ -90,12 +90,12 @@ public class DebugOptionManager : MonoBehaviour gameData.StorageTanks = new List { // new StorageTank(){Id = 1, Capacity = 50, FlavorId = 1, Stocks = new List{new ProductStockData{Rarity = ProductRarity.Normal, Stock = 0}}}, - new StorageTank(){Id = 2, Capacity = 50, FlavorId = 2, Stocks = new List + new StorageTank(){Capacity = 50, FlavorId = 2, Stocks = new List { new ProductStockData{Rarity = ProductRarity.Normal, Stock = 1}, new ProductStockData{Rarity = ProductRarity.Yellow, Stock = 20}, }}, - new StorageTank(){Id = 3, Capacity = 50, FlavorId = 1, Stocks = new List + new StorageTank(){Capacity = 50, FlavorId = 1, Stocks = new List { new ProductStockData{Rarity = ProductRarity.Normal, Stock = 1}, new ProductStockData{Rarity = ProductRarity.Yellow, Stock = 9}, @@ -104,7 +104,7 @@ public class DebugOptionManager : MonoBehaviour new ProductStockData{Rarity = ProductRarity.Gold, Stock = 10}, new ProductStockData{Rarity = ProductRarity.Rainbow, Stock = 20}, }}, - new StorageTank(){Id = 4, Capacity = 50, FlavorId = 1, Stocks = new List{new ProductStockData{Rarity = ProductRarity.Gold, Stock = 4}}}, + new StorageTank(){Capacity = 50, FlavorId = 1, Stocks = new List{new ProductStockData{Rarity = ProductRarity.Gold, Stock = 4}}}, }; }).AddTo(this); diff --git a/popcorn/Assets/MyGame/Scenes/Main/Prefabs/BulkOrder/CanvasAchievement.prefab b/popcorn/Assets/MyGame/Scenes/Main/Prefabs/BulkOrder/CanvasAchievement.prefab index 3de335f5..554964d7 100644 --- a/popcorn/Assets/MyGame/Scenes/Main/Prefabs/BulkOrder/CanvasAchievement.prefab +++ b/popcorn/Assets/MyGame/Scenes/Main/Prefabs/BulkOrder/CanvasAchievement.prefab @@ -103,6 +103,7 @@ GameObject: serializedVersion: 6 m_Component: - component: {fileID: 2377818822852436376} + - component: {fileID: 7948284479330041018} m_Layer: 5 m_Name: Window m_TagString: Untagged @@ -132,6 +133,24 @@ RectTransform: m_AnchoredPosition: {x: 0, y: 145} m_SizeDelta: {x: 900, y: 1020} m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &7948284479330041018 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2377818822852436379} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 97711eafafff465ebe1223e7ed0ab2e7, type: 3} + m_Name: + m_EditorClassIdentifier: + backgroundAnimator: {fileID: 2377818822785157575} + closeButton: {fileID: 2377818823238410848} + heartText: {fileID: 2377818823370329765} + coinText: {fileID: 2377818823929203721} + bonusCoinText: {fileID: 2377818823802633425} + messageText: {fileID: 2377818823780007094} --- !u!1 &2377818823009469882 GameObject: m_ObjectHideFlags: 0 diff --git a/popcorn/Assets/MyGame/Scenes/Main/Scripts/BulkOrder.cs b/popcorn/Assets/MyGame/Scenes/Main/Scripts/BulkOrder.cs index 20c305f7..8cbdd289 100644 --- a/popcorn/Assets/MyGame/Scenes/Main/Scripts/BulkOrder.cs +++ b/popcorn/Assets/MyGame/Scenes/Main/Scripts/BulkOrder.cs @@ -1,18 +1,20 @@ using System; +using System.Collections.Generic; using System.Linq; using UniRx; using UnityEngine; using UnityEngine.UI; -public class BulkOrderProgressData +public class BulkOrderResultData { - public int orderId; - public ProductRarity rarity; + public int Number; + public ProductRarity Rarity; } public class BulkOrder : MonoBehaviour { public static readonly string DataTag = "BulkOrderData"; public static readonly string CancelCallbackTag = "BulkOrderCancelCallback"; + public static readonly string AchievedCallbackTag = "BulkOrderAchievedCallback"; private static readonly int OpenTrigger = Animator.StringToHash("OpenTrigger"); private static readonly int CloseTrigger = Animator.StringToHash("CloseTrigger"); [SerializeField] private Animator backgroundAnimator; @@ -49,7 +51,7 @@ public class BulkOrder : MonoBehaviour messageText.text = messageList.First(data => data.id == gameData.OrderTextId).requestText; coinText.text = bulkOrderData.rewardCoin.ToString(); heartText.text = bulkOrderData.rewardHeart.ToString(); - // cache + LocalCacheManager.Save(DataTag, bulkOrderData); cancelButton.OnClickAsObservable().ThrottleFirst(TimeSpan.FromSeconds(1f)).Subscribe(_ => { @@ -59,25 +61,80 @@ public class BulkOrder : MonoBehaviour gameData.CancelOrderId = gameData.OrderIdInProgress; // カウントリセット gameData.OrderConditionCount = 0; - - TransitionManager.Instance.UnloadScene(GameScenes.BulkOrder); + GameDataManager.SaveGameData(); + // キャンセルと同時に閉じる + transform.parent.SetLocalScale(0); + backgroundAnimator.SetTrigger(CloseTrigger); + this.CallWaitForSeconds(.25f, () => + { + TransitionManager.Instance.UnloadScene(GameScenes.BulkOrder); + }); })); TransitionManager.Instance.LoadSceneAdditive(GameScenes.BulkOrderCancel); }).AddTo(this); + // 納品チェック + var orderList = new List + { + bulkOrderData.productId1, + bulkOrderData.productId2, + bulkOrderData.productId3, + }; + + // 納品する + var achieved = gameData.CompletedOrderList.Count == orderList.Count(x => x != 0); + achievedObject.SetActive(achieved); + deliveredButton.interactable = achieved; deliveredButton.OnClickAsObservable().ThrottleFirst(TimeSpan.FromSeconds(1f)).Subscribe(_ => { - // カウントリセット - gameData.OrderConditionCount = 0; + LocalCacheManager.Save(AchievedCallbackTag, new Action(() => + { + // 獲得 + var rarityList = SpreadsheetDataManager.Instance.GetBaseDataList(Const.RarityDataSheet); + var bonus = CalcBonus(rarityList, gameData.CompletedOrderList, bulkOrderData.shopLevel); + gameData.Coin = CoinManager.Instance.OwnCoin; + CoinManager.Instance.AddCoinWithEffect(bulkOrderData.rewardCoin + bonus); + gameData.Heart += bulkOrderData.rewardHeart; + HeartMeter.Instance.AddHeart(bulkOrderData.rewardHeart); + + // カウントリセット + gameData.OrderConditionCount = 0; + gameData.CurrentLevelOrderCount++; +#if UNITY_EDITOR + Debug.Log($"current:{gameData.CurrentLevelOrderCount} max:{bulkOrderData.maxOrder}"); +#endif + // オーダー上限を超えるとそのLevelでの注文終了 + if (gameData.CurrentLevelOrderCount == bulkOrderData.maxOrder) + { + gameData.CurrentLevelOrderCount = 0; + gameData.AchievedOrderLevel = bulkOrderData.shopLevel; + } + GameDataManager.SaveGameData(); + // キャンセルと同時に閉じる + transform.parent.SetLocalScale(0); + backgroundAnimator.SetTrigger(CloseTrigger); + this.CallWaitForSeconds(.25f, () => + { + TransitionManager.Instance.UnloadScene(GameScenes.BulkOrder); + }); + })); TransitionManager.Instance.LoadSceneAdditive(GameScenes.BulkOrderAchievement); }).AddTo(this); - + var productList = SpreadsheetDataManager.Instance.GetBaseDataList(Const.ProductDataSheet); if (productList.FirstOrDefault(data => data.id == bulkOrderData.productId1) is ProductData data1) { itemView1.SetData(data1, bulkOrderData.count1); itemView1.SetButtonActive(itemView1.CheckAmount(data1)); + if (gameData.CompletedOrderList.FirstOrDefault(data => data.Number == 1) is BulkOrderResultData resultData) + { + itemView1.SetCooked(resultData.Rarity); + } itemView1.gameObject.SetActive(true); + itemView1.CookingButton.ThrottleFirst(TimeSpan.FromSeconds(1f)).Subscribe(_ => + { + gameData.CompletedOrderList.Add(new BulkOrderResultData(){Number = 1, Rarity = ProductRarity.Copper}); + }).AddTo(itemView1); } else { @@ -87,6 +144,10 @@ public class BulkOrder : MonoBehaviour { itemView2.SetData(data2, bulkOrderData.count2); itemView2.SetButtonActive(itemView2.CheckAmount(data2)); + if (gameData.CompletedOrderList.FirstOrDefault(data => data.Number == 2) is BulkOrderResultData resultData) + { + itemView2.SetCooked(resultData.Rarity); + } itemView2.gameObject.SetActive(true); } else @@ -97,6 +158,10 @@ public class BulkOrder : MonoBehaviour { itemView3.SetData(data3, bulkOrderData.count3); itemView3.SetButtonActive(itemView3.CheckAmount(data3)); + if (gameData.CompletedOrderList.FirstOrDefault(data => data.Number == 3) is BulkOrderResultData resultData) + { + itemView3.SetCooked(resultData.Rarity); + } itemView3.gameObject.SetActive(true); } else @@ -104,4 +169,20 @@ public class BulkOrder : MonoBehaviour itemView3.gameObject.SetActive(false); } } + + public static int CalcBonus(List rarityList, List resultData, int shopLevel) + { + var totalBonus = 0; + var hasRarityList = resultData.Where(data => data.Rarity != ProductRarity.Normal).ToList(); + if (hasRarityList.Count == 0) + { + return 0; + } + foreach (var progressData in hasRarityList) + { + var bonusRate = rarityList.FirstOrDefault(data => data.Rarity == progressData.Rarity)?.bulkOrderBonus ?? 0; + totalBonus += bonusRate * shopLevel; + } + return Mathf.CeilToInt((float) totalBonus / hasRarityList.Count); + } } \ No newline at end of file diff --git a/popcorn/Assets/MyGame/Scenes/Main/Scripts/BulkOrderAchievedView.cs b/popcorn/Assets/MyGame/Scenes/Main/Scripts/BulkOrderAchievedView.cs index dd78fd0e..7ba9de8b 100644 --- a/popcorn/Assets/MyGame/Scenes/Main/Scripts/BulkOrderAchievedView.cs +++ b/popcorn/Assets/MyGame/Scenes/Main/Scripts/BulkOrderAchievedView.cs @@ -1,6 +1,47 @@ +using System; +using System.Linq; +using UniRx; using UnityEngine; +using UnityEngine.UI; public class BulkOrderAchievedView : MonoBehaviour { + private static readonly int OpenTrigger = Animator.StringToHash("OpenTrigger"); + private static readonly int CloseTrigger = Animator.StringToHash("CloseTrigger"); + [SerializeField] private Animator backgroundAnimator; + [SerializeField] private Button closeButton; + [SerializeField] private Text heartText; + [SerializeField] private Text coinText; + [SerializeField] private Text bonusCoinText; + [SerializeField] private Text messageText; + + private void Start() + { + if (LocalCacheManager.Load(BulkOrder.DataTag, null) is BulkOrderData orderData) + { + var gameData = GameDataManager.GameData; + var messageList = SpreadsheetDataManager.Instance.GetBaseDataList(Const.BulkOrderTextDataSheet); + var rarityList = SpreadsheetDataManager.Instance.GetBaseDataList(Const.RarityDataSheet); + var bonus = BulkOrder.CalcBonus(rarityList, gameData.CompletedOrderList, orderData.shopLevel); + heartText.text = orderData.rewardHeart.ToString(); + coinText.text = orderData.rewardCoin.ToString(); + bonusCoinText.text = bonus.ToString(); + messageText.text = messageList.First(data => data.id == gameData.OrderTextId).thanksText; + } + closeButton.OnClickAsObservable().Subscribe(_ => + { + if (LocalCacheManager.Load(BulkOrder.AchievedCallbackTag, null) is Action callback) + { + callback.Invoke(); + } + transform.parent.SetLocalScale(0); + backgroundAnimator.SetTrigger(CloseTrigger); + this.CallWaitForSeconds(.25f, () => + { + TransitionManager.Instance.UnloadScene(GameScenes.BulkOrderAchievement); + TransitionManager.Instance.UnloadScene(GameScenes.BulkOrder); + }); + }).AddTo(this); + } } diff --git a/popcorn/Assets/MyGame/Scenes/Main/Scripts/KitchenManager.cs b/popcorn/Assets/MyGame/Scenes/Main/Scripts/KitchenManager.cs index 9922be2a..a6b89138 100644 --- a/popcorn/Assets/MyGame/Scenes/Main/Scripts/KitchenManager.cs +++ b/popcorn/Assets/MyGame/Scenes/Main/Scripts/KitchenManager.cs @@ -9,7 +9,7 @@ using UnityEngine.UI; public class KitchenManager : MonoBehaviour { - public static readonly string CancelCallbackTag = "BulkOrderCancelCallback"; + public static readonly string CancelCallbackTag = "KitchenCancelCallback"; [SerializeField] private Button cookingButton; [SerializeField] private Button adButton; [SerializeField] private KitchenView kitchenView; @@ -62,6 +62,7 @@ public class KitchenManager : MonoBehaviour orderIndicatorView.TappedPhone.ThrottleFirst(TimeSpan.FromSeconds(1f)).Take(1).Subscribe(_ => { // タップで更新 + gameData.CompletedOrderList.Clear(); gameData.OrderIdInProgress = result.nextOrderId; if (nextMessageList.Exists(data => data.id == gameData.OrderTextId)) { diff --git a/popcorn/Assets/MyGame/Scenes/marketing/Scripts/ProductManagement.cs b/popcorn/Assets/MyGame/Scenes/marketing/Scripts/ProductManagement.cs index 812b7bbd..1cef717f 100644 --- a/popcorn/Assets/MyGame/Scenes/marketing/Scripts/ProductManagement.cs +++ b/popcorn/Assets/MyGame/Scenes/marketing/Scripts/ProductManagement.cs @@ -81,7 +81,7 @@ public class ProductManagement : MonoBehaviour Action purchaseAction = amount => { // タンク追加 - gameData.StorageTanks.Add(new StorageTank() {Id = tankView.TankNumber, Capacity = 50}); + gameData.StorageTanks.Add(new StorageTank() {Capacity = 50}); tankView.SetData(gameData.StorageTanks[tankView.TankNumber - 1]); tankView.SetState(TankState.Unlock); CoinManager.Instance.SubCoin(shopData.price); diff --git a/popcorn/Assets/MyGame/Scenes/marketing/Scripts/StorageTank.cs b/popcorn/Assets/MyGame/Scenes/marketing/Scripts/StorageTank.cs index 8c8096b1..fc0eb446 100644 --- a/popcorn/Assets/MyGame/Scenes/marketing/Scripts/StorageTank.cs +++ b/popcorn/Assets/MyGame/Scenes/marketing/Scripts/StorageTank.cs @@ -5,7 +5,6 @@ using UnityEngine; public class StorageTank { // タンクID, タンク内のフレーバーID, フレーバーの個数 - public int Id; public int Capacity; public int FlavorId; public int Stock diff --git a/popcorn/Assets/MyGame/Scripts/CoinManager.cs b/popcorn/Assets/MyGame/Scripts/CoinManager.cs index d925aa9a..dd1c5c75 100644 --- a/popcorn/Assets/MyGame/Scripts/CoinManager.cs +++ b/popcorn/Assets/MyGame/Scripts/CoinManager.cs @@ -40,7 +40,7 @@ public class CoinManager : SingletonMonoBehaviour coinCountText.CountUpAnimation(coinTextFormat, ownCoin, duration); } - public void AddCoinWithEffect(int count, Action callback) + public void AddCoinWithEffect(int count, Action callback = null) { ownCoin += count; // 生成枚数決定 @@ -48,7 +48,7 @@ public class CoinManager : SingletonMonoBehaviour InstantiateEffeect(coinPrefab, count, Vector3.zero, coinIconTransform.position, () => { coinCountText.CountUpAnimation(coinTextFormat, ownCoin, duration); - callback.Invoke(); + callback?.Invoke(); }); } diff --git a/popcorn/Assets/MyGame/Scripts/GameDataManager.cs b/popcorn/Assets/MyGame/Scripts/GameDataManager.cs index bc424a2a..c161bbd9 100644 --- a/popcorn/Assets/MyGame/Scripts/GameDataManager.cs +++ b/popcorn/Assets/MyGame/Scripts/GameDataManager.cs @@ -102,9 +102,9 @@ public sealed class GameData { // [DataMember(Name = "Data27")] + // BulkOrder [DataMember(Name = "Data28")] public int OrderIdInProgress; - [DataMember(Name = "Data29")] public int OrderTextId; [DataMember(Name = "Data30")] @@ -113,9 +113,10 @@ public sealed class GameData { public int CancelOrderId; [DataMember(Name = "Data32")] public int AchievedOrderLevel; - // 進捗 [DataMember(Name = "Data33")] - public List OrderProgressList; + public List CompletedOrderList; + [DataMember(Name = "Data34")] + public int CurrentLevelOrderCount; // mission [DataMember(Name = "Data1001")] @@ -207,6 +208,15 @@ public sealed class GameData { { MyRecipes = new[] {Const.DefaultRecipeId}; } + if (StorageTanks.Count < 1) + { + StorageTanks.Add(new StorageTank + { + Capacity = 50, + FlavorId = -1, + } + ); + } if (Pans.Length < 1) { Pans = new[] {Const.DefaultPanId}; @@ -221,10 +231,11 @@ public sealed class GameData { MyRecipes = MyRecipes ?? new int[0]; Material = Material ?? new List(); ShopStock = ShopStock ?? new List(); + StorageTanks = StorageTanks ?? new List(); Pans = Pans ?? new int[0]; TotalSalesList = TotalSalesList ?? new List(); AchievedMission = achievedMission?.ToList() ?? new List(); - OrderProgressList = OrderProgressList ?? new List(); + CompletedOrderList = CompletedOrderList ?? new List(); } private Dictionary ArrayToDictionary(KeyValueOfintint[] array){ var dictionary = new Dictionary();