diff --git a/popcorn/Assets/MyGame/Scenes/DebugOption/Scripts/DebugOptionManager.cs b/popcorn/Assets/MyGame/Scenes/DebugOption/Scripts/DebugOptionManager.cs index fb749ed1..ac63975b 100644 --- a/popcorn/Assets/MyGame/Scenes/DebugOption/Scripts/DebugOptionManager.cs +++ b/popcorn/Assets/MyGame/Scenes/DebugOption/Scripts/DebugOptionManager.cs @@ -69,8 +69,28 @@ public class DebugOptionManager : MonoBehaviour refillManyProductButton.OnClickAsObservable().Subscribe(_ => { - gameData.ShopStock = Enumerable.Repeat(1, 10).ToList(); - gameData.ShopStock.AddRange(Enumerable.Repeat(2, 10).ToList()); + gameData.ShopStock.Clear(); + gameData.ShopStock.AddRange(Enumerable.Repeat(new ProductStockData() + { + FlavorId = 1, Rarity = ProductRarity.Normal + }, 5)); + gameData.ShopStock.AddRange(Enumerable.Repeat(new ProductStockData() + { + FlavorId = 2, Rarity = ProductRarity.Yellow + }, 5)); + gameData.ShopStock.AddRange(Enumerable.Repeat(new ProductStockData() + { + FlavorId = 3, Rarity = ProductRarity.Copper + }, 5)); + gameData.ShopStock.AddRange(Enumerable.Repeat(new ProductStockData() + { + FlavorId = 4, Rarity = ProductRarity.Silver + }, 5)); + // gameData.ShopStock.AddRange(Enumerable.Repeat(new ProductStockData() + // { + // FlavorId = 5, Rarity = ProductRarity.Gold + // }, 5)); + gameData.StorageTanks = new List { // new StorageTank(){Id = 1, Capacity = 50, FlavorId = 1, Stocks = new List{new ProductStockData{Rarity = ProductRarity.Normal, Stock = 0}}}, @@ -95,9 +115,27 @@ public class DebugOptionManager : MonoBehaviour refillLittleProductButton.OnClickAsObservable().Subscribe(_ => { gameData.StorageTanks.ForEach(x => x.ClearStock()); - gameData.ShopStock = Enumerable.Repeat(2, 2).ToList(); - gameData.ShopStock = Enumerable.Repeat(1, 10).ToList(); - gameData.ShopStock.AddRange(Enumerable.Repeat(2, 10).ToList()); + gameData.ShopStock.Clear(); + gameData.ShopStock.AddRange(Enumerable.Repeat(new ProductStockData() + { + FlavorId = 1, Rarity = ProductRarity.Normal + }, 5)); + gameData.ShopStock.AddRange(Enumerable.Repeat(new ProductStockData() + { + FlavorId = 2, Rarity = ProductRarity.Yellow + }, 5)); + gameData.ShopStock.AddRange(Enumerable.Repeat(new ProductStockData() + { + FlavorId = 3, Rarity = ProductRarity.Copper + }, 5)); + gameData.ShopStock.AddRange(Enumerable.Repeat(new ProductStockData() + { + FlavorId = 4, Rarity = ProductRarity.Silver + }, 5)); + // gameData.ShopStock.AddRange(Enumerable.Repeat(new ProductStockData() + // { + // FlavorId = 5, Rarity = ProductRarity.Gold + // }, 5)); }).AddTo(this); coinCount.text = $"{gameData.Coin}"; diff --git a/popcorn/Assets/MyGame/Scenes/Main/Scripts/KitchenManager.cs b/popcorn/Assets/MyGame/Scenes/Main/Scripts/KitchenManager.cs index de932318..1165d968 100644 --- a/popcorn/Assets/MyGame/Scenes/Main/Scripts/KitchenManager.cs +++ b/popcorn/Assets/MyGame/Scenes/Main/Scripts/KitchenManager.cs @@ -65,12 +65,7 @@ public class KitchenManager : MonoBehaviour { gameData.Material = Enumerable.Range(1, 12).Select(x => new MaterialData(x, 0)).ToList(); } - - // 店頭ストック - if (gameData.ShopStock == null) - { - gameData.ShopStock = new List(); - } + // 保存タンク if (gameData.StorageTanks == null || gameData.StorageTanks.Count == 0) { diff --git a/popcorn/Assets/MyGame/Scenes/marketing/Scripts/Market.cs b/popcorn/Assets/MyGame/Scenes/marketing/Scripts/Market.cs index 2dc31b4a..424aa7df 100644 --- a/popcorn/Assets/MyGame/Scenes/marketing/Scripts/Market.cs +++ b/popcorn/Assets/MyGame/Scenes/marketing/Scripts/Market.cs @@ -24,8 +24,8 @@ public class Market : SingletonMonoBehaviour [SerializeField] private CustomerData customerData; [SerializeField] private CustomerController customerControllerPrefab; - public List DisplayFlavors => displayFlavors; - private List displayFlavors = new List(); + public List DisplayFlavors => displayFlavors; + private List displayFlavors = new List(); public List ShuffledOrder => shuffledOrder; private List shuffledOrder = new List(); @@ -63,7 +63,7 @@ public class Market : SingletonMonoBehaviour #endif // 陳列 - displayFlavors = gameData.ShopStock.Select(x => x).ToList(); + displayFlavors = gameData.ShopStock.ToList(); // 売り順決定 shuffledOrder = ShuffleOrder(displayFlavors.Count); @@ -74,7 +74,7 @@ public class Market : SingletonMonoBehaviour .Subscribe(_ => { Debug.Log("displayFlavors updated"); - displayFlavors = gameData.ShopStock.Select(x => x).ToList(); + displayFlavors = gameData.ShopStock.ToList(); shuffledOrder = ShuffleOrder(displayFlavors.Count); shopState.Value = ShopState.Open; }); @@ -119,12 +119,7 @@ public class Market : SingletonMonoBehaviour // 売り切れ if (shuffledOrder.Count == 0) { - controller.SetWantFlavor(new ProductStockData - { - FlavorId = displayFlavors.RandomChoose(), - Rarity = ProductRarity.Normal, - Stock = 0 - }); + controller.SetWantFlavor(displayFlavors.RandomChoose()); controller.CallWaitForSeconds(1.5f, () => { controller.SetComplain(); @@ -144,19 +139,14 @@ public class Market : SingletonMonoBehaviour continue; } - // 在庫取得 - var tmpOrderCount = Mathf.Min(controller.OrderCount, shuffledOrder.Count); // shuffledOrder順に販売 - orders.AddRange(shuffledOrder.GetRange(0, tmpOrderCount)); + var tmpOrderCount = Mathf.Min(controller.OrderCount, shuffledOrder.Count); + var tmpOrders = shuffledOrder.GetRange(0, tmpOrderCount); shuffledOrder.RemoveRange(0, tmpOrderCount); + orders.AddRange(tmpOrders); - // コーンの味吹き出しを設定(レア度優先など - controller.SetWantFlavor(new ProductStockData - { - FlavorId = orders.RandomChoose(), - Rarity = ProductRarity.Normal, - Stock = 0 - }); + // コーンの味吹き出しを設定 + controller.SetWantFlavor(displayFlavors[tmpOrders.RandomChoose()]); } foreach (var customerController in dontBuyCustomerList) { @@ -171,12 +161,8 @@ public class Market : SingletonMonoBehaviour return; } - var flavors = orders.Select(x => (displayFlavors[x], ProductRarity.Normal)).ToList(); -#if UNITY_EDITOR - Debug.Log($"bb order: {orders.Count} {orders.Aggregate("", (s, i) => $"{s},{i}")}"); - Debug.Log($"bb shuffledOrder:{shuffledOrder.Count} {shuffledOrder.Aggregate("", (s, i) => $"{s},{i}")}"); -#endif // 購入 + var flavors = orders.Select(x => displayFlavors[x]).ToList(); var coin = SellPopcorn(flavors); // 獲得処理 @@ -184,14 +170,18 @@ public class Market : SingletonMonoBehaviour gameData.Heart += customers.Count; GameDataManager.SaveGameData(); - var remainStockCount = gameData.ShopStock.Count; - - // 自動補充 refill + // 商品補充 RefillShopStockData(); - StockFlavorLog(); - // 補充された場合フレーバー再設定 - var isReorder = RefillShopFlavors(orders, remainStockCount); +#if UNITY_EDITOR + StockFlavorLog(); + Debug.Log($"ShopStock{gameData.ShopStock.Count}, {shuffledOrder.Count + orders.Count}"); + Debug.Log($"displayCount:{displayFlavors.Count}\n" + + $"shuffled:{shuffledOrder.Count} {string.Join(",", shuffledOrder)}\n" + + $"orders:{orders.Count} {string.Join(",", orders)}"); +#endif + // 表示データ更新 + var isReorder = RefillDisplayFlavors(gameData.ShopStock, orders, shuffledOrder.Count); this.CallWaitForSeconds(1.5f, () => { @@ -260,7 +250,6 @@ public class Market : SingletonMonoBehaviour customerController.Setup(orderPosisionObject.transform.GetComponentsInChildren().ToList().Skip(1).ToList()); customerController.OrderCount = orderCount; customerController.CustomerPrefab = prefab; - customerController.IsCustomer = isCustomer; customerControllerList.Add(customerController); customerController.MoveEndObservable @@ -278,10 +267,6 @@ public class Market : SingletonMonoBehaviour Destroy(customerController.gameObject); break; case CustomerMovingType.WalkCenter: - // if (shopState.Value == ShopState.Close) - // { - // customerController.ChangeCustomerState(CustomerState.Leave); - // } if (customerController.State.Value == CustomerState.WalkShop) { customerList.Add(customerController); @@ -298,7 +283,7 @@ public class Market : SingletonMonoBehaviour } }).AddTo(customerController); - if (customerController.IsCustomer) + if (isCustomer) { // 近くまで歩く(タップされたらcustomerList.Add() customerController.ChangeCustomerState(CustomerState.WalkShop); @@ -389,7 +374,7 @@ public class Market : SingletonMonoBehaviour return (false, GetOrderCount(false)); } - private int SellPopcorn(List<(int flavor, ProductRarity rarity)> flavors) + private int SellPopcorn(List stockDataList) { var gameData = GameDataManager.GameData; // 品切れ @@ -399,17 +384,17 @@ public class Market : SingletonMonoBehaviour } // フレーバーを売る - var recipeList = RecipeData.GetAllRecipe(); + var recipeList = SpreadsheetDataManager.Instance.GetBaseDataList(Const.ProductDataSheet); var rarityList = SpreadsheetDataManager.Instance.GetBaseDataList(Const.RarityDataSheet); var coin = 0; - foreach (var flavorData in flavors) + foreach (var stockData in stockDataList) { - var targetIndex = gameData.ShopStock.FindIndex(x => x == flavorData.flavor); - var flavorRecipe = recipeList.First(data => data.RecipeId == gameData.ShopStock[targetIndex]); - var rarityData = rarityList.First(data => data.Rarity == flavorData.rarity); + var productData = recipeList.First(data => data.id == stockData.FlavorId); + var rarityData = rarityList.First(data => data.Rarity == stockData.Rarity); + var targetIndex = gameData.ShopStock.FindIndex(data => data.FlavorId == stockData.FlavorId && data.Rarity == stockData.Rarity); gameData.ShopStock.RemoveAt(targetIndex); - gameData.AddSalesCount(flavorData.flavor, 1, flavorData.rarity); - coin += flavorRecipe.Price * (1 + rarityData.rate / 100); + gameData.AddSalesCount(stockData.FlavorId, 1, stockData.Rarity); + coin += productData.price * (1 + rarityData.rate / 100); } return coin; } @@ -426,46 +411,40 @@ public class Market : SingletonMonoBehaviour // へらした分を店頭リストに追加する var gameData = GameDataManager.GameData; var shopSpace = ShopStockCount - gameData.ShopStock.Count; - var index = 0; - var tankCount = gameData.StorageTanks.Count; - while (shopSpace > 0) + foreach (var tank in gameData.StorageTanks.Where(tank => !tank.IsEmpty)) { - if (index > tankCount - 1) + if (shopSpace == 0) { break; } - var tank = gameData.StorageTanks[index]; var stockList = tank.GetStock(shopSpace); - // レアの設定入れる - gameData.ShopStock.AddRange(stockList.Select(x => x.FlavorId)); + gameData.ShopStock.AddRange(stockList); shopSpace -= stockList.Count; - gameData.StorageTanks[index] = tank; - index++; } GameDataManager.SaveGameData(); } - private bool RefillShopFlavors(List orders, int remainStockCount) + private bool RefillDisplayFlavors(List shopStock, List orders, int remain) { - var gameData = GameDataManager.GameData; - if (gameData.ShopStock.Count == ShopStockCount) + // 補充された場合店頭のフレーバー入れ替え + if (shopStock.Count == ShopStockCount) { shuffledOrder.AddRange(orders); - var stock = gameData.ShopStock.GetRange(remainStockCount, orders.Count).ToArray(); + var refillList = shopStock.GetRange(remain, orders.Count); for (int i = 0; i < orders.Count; i++) { - displayFlavors[orders[i]] = stock[i]; + displayFlavors[orders[i]] = refillList[i]; } } - else if (gameData.ShopStock.Count <= 13 && shuffledOrder.Exists(x => x > 13)) + else if (shopStock.Count <= 13 && shuffledOrder.Exists(x => x > 13)) { - displayFlavors = gameData.ShopStock.Select(x => x).ToList(); + displayFlavors = shopStock.ToList(); shuffledOrder = ShuffleOrder(displayFlavors.Count); return true; } - else if (gameData.ShopStock.Count <= 7 && shuffledOrder.Exists(x => x > 7)) + else if (shopStock.Count <= 7 && shuffledOrder.Exists(x => x > 7)) { - displayFlavors = gameData.ShopStock.Select(x => x).ToList(); + displayFlavors = shopStock.ToList(); shuffledOrder = ShuffleOrder(displayFlavors.Count); return true; } @@ -491,7 +470,7 @@ public class Market : SingletonMonoBehaviour var shopStockString = ""; foreach (var data in RecipeData.GetAllRecipe()) { - var shopStockCount = GameDataManager.GameData.ShopStock.FindAll(x => x == data.RecipeId).Count; + var shopStockCount = GameDataManager.GameData.ShopStock.FindAll(x => x.FlavorId == data.RecipeId).Count; var tank = GameDataManager.GameData.StorageTanks.FindAll(x => x.FlavorId == data.RecipeId).Sum(x => x.Stock); if (shopStockCount + tank == 0) { diff --git a/popcorn/Assets/MyGame/Scenes/marketing/Scripts/MarketManager.cs b/popcorn/Assets/MyGame/Scenes/marketing/Scripts/MarketManager.cs index 7bfd781b..5c988a81 100644 --- a/popcorn/Assets/MyGame/Scenes/marketing/Scripts/MarketManager.cs +++ b/popcorn/Assets/MyGame/Scenes/marketing/Scripts/MarketManager.cs @@ -28,15 +28,7 @@ public class MarketManager : MonoBehaviour market = Market.Instance; productDataList = SpreadsheetDataManager.Instance.GetBaseDataList(Const.ProductDataSheet); stockView.SetStock(gameData.StorageTanks); - var startStocks = market.DisplayFlavors - .Select((flavor, index) => (flavor, index)) - .Where(data => market.ShuffledOrder.Contains(data.index)) - .Select(data => (data.index, new ProductStockData - { - FlavorId = data.flavor, - Rarity = ProductRarity.Gold, - })) - .ToList(); + var startStocks = market.ShuffledOrder.Select(x => (x, market.DisplayFlavors[x])).ToList(); cartView.Initialize(); cartView.SetStock(startStocks, false); BrotherPinkView.Instance.SetBrotherView(pinkTarget); @@ -78,28 +70,13 @@ public class MarketManager : MonoBehaviour // 補充したフレーバーのスキンを設定 foreach (var order in x.orders) { - cartView.Refill(order, new ProductStockData - { - FlavorId = market.DisplayFlavors[order], - Rarity = ProductRarity.Normal, - }); + cartView.Refill(order, market.DisplayFlavors[order]); } } else if (x.isReorder) { -#if UNITY_EDITOR - Debug.Log($"bb setStockFlag {market.DisplayFlavors.Count} {market.ShuffledOrder.Count}"); -#endif // 陳列表示更新(陳列13=650ms,7=350ms) - var stocks = market.DisplayFlavors - .Select((flavor, index) => (flavor, index)) - .Where(data => market.ShuffledOrder.Contains(data.index)) - .Select(data => (data.index, new ProductStockData - { - FlavorId = data.flavor, - Rarity = ProductRarity.Normal, - })) - .ToList(); + var stocks = market.ShuffledOrder.Select(i => (i, market.DisplayFlavors[i])).ToList(); cartView.SetStock(stocks, true); } }); @@ -207,16 +184,22 @@ public class MarketManager : MonoBehaviour }).AddTo(customerAnimator); var eventTrigger = customerAnimator.gameObject.AddComponent(); eventTrigger.OnPointerClickAsObservable() - .TakeWhile(_ => market.CurrentShopState.Value != ShopState.Close) + .Where(_ => market.CurrentShopState.Value != ShopState.Close) .Take(1) .Subscribe(_ => { - controller.Tapped(); - customerAnimator.ShowTapReaction(); if (customerAnimator.TryGetComponent(typeof(Collider2D), out var target)) { Destroy(target); } + if (controller.State.Value == CustomerState.Leave + || controller.State.Value == CustomerState.EatingLeave + || controller.State.Value == CustomerState.SadLeave) + { + return; + } + controller.Tapped(); + customerAnimator.ShowTapReaction(); }).AddTo(customerAnimator); } } \ No newline at end of file diff --git a/popcorn/Assets/MyGame/Scenes/marketing/Scripts/ProductManagement.cs b/popcorn/Assets/MyGame/Scenes/marketing/Scripts/ProductManagement.cs index 439936d5..11267a65 100644 --- a/popcorn/Assets/MyGame/Scenes/marketing/Scripts/ProductManagement.cs +++ b/popcorn/Assets/MyGame/Scenes/marketing/Scripts/ProductManagement.cs @@ -42,7 +42,7 @@ public class ProductManagement : MonoBehaviour }; // タンク並び替え - gameData.StorageTanks = gameData.StorageTanks.OrderBy(tank => tank.Stock == 0).ToList(); + gameData.StorageTanks = gameData.StorageTanks.OrderBy(tank => tank.IsEmpty).ToList(); // タンク設定 var tankList = view.SetTanks(priceList); @@ -105,7 +105,9 @@ public class ProductManagement : MonoBehaviour { state.Value = ManagementState.None; var tankData = gameData.StorageTanks[tankView.TankNumber - 1]; - var totalStock = gameData.ShopStock.Sum(x => x) + gameData.StorageTanks.Where(x => x.FlavorId == tankData.FlavorId).Sum(x => x.Stock); + var shopStock = gameData.ShopStock.Count(data => data.FlavorId == tankData.FlavorId); + var tankStock = gameData.StorageTanks.Where(x => x.FlavorId == tankData.FlavorId).Sum(x => x.Stock); + var totalStock = shopStock + tankStock; var recipe = RecipeData.GetRecipe(tankData.FlavorId); var price = recipe?.Price ?? 0; List<(ProductRarity rarity, int price, int stock)> raritySummaryData = rarityDataList.Select(x => @@ -253,6 +255,7 @@ public class ProductManagement : MonoBehaviour { state.Value = ManagementState.None; GameDataManager.GameData.StorageTanks[tankNumber - 1].ClearStock(); + GameDataManager.SaveGameData(); // 試食フラグに終了時間を設定 } } diff --git a/popcorn/Assets/MyGame/Scenes/recipe/Scripts/RecipeDetailView.cs b/popcorn/Assets/MyGame/Scenes/recipe/Scripts/RecipeDetailView.cs index dd67dc79..17c5ce32 100644 --- a/popcorn/Assets/MyGame/Scenes/recipe/Scripts/RecipeDetailView.cs +++ b/popcorn/Assets/MyGame/Scenes/recipe/Scripts/RecipeDetailView.cs @@ -72,7 +72,7 @@ public class RecipeDetailView : MonoBehaviour var gameData = GameDataManager.GameData; // 在庫 - var shopStock = gameData.ShopStock.FindAll(x => x == data.id).Count; + var shopStock = gameData.ShopStock.Count(stockData => stockData.FlavorId == data.id); var tankStock = gameData.StorageTanks.FindAll(x => x.FlavorId == data.id).Sum(x => x.Stock); flavorStock.text = string.Format(flavorStockFormat, shopStock + tankStock); flavorName.text = data.name; diff --git a/popcorn/Assets/MyGame/Scripts/GameDataManager.cs b/popcorn/Assets/MyGame/Scripts/GameDataManager.cs index 72923015..e6f0a25b 100644 --- a/popcorn/Assets/MyGame/Scripts/GameDataManager.cs +++ b/popcorn/Assets/MyGame/Scripts/GameDataManager.cs @@ -83,8 +83,7 @@ public sealed class GameData { public List Material = new List(); // 店頭ポップコーン在庫 [DataMember(Name = "Data19")] - private int[] shopStock; - public List ShopStock; + public List ShopStock; // タンクポップコーン在庫 [DataMember(Name = "Data20")] public List StorageTanks; @@ -196,7 +195,7 @@ public sealed class GameData { // avatarIdList = avatarIdArray == null ? new List() : avatarIdArray.ToList(); // newAvatarIdList = newAvatarIdArray == null ? new List() : newAvatarIdArray.ToList(); // lastAdRewardTimeList = lastAdRewardTimeArray == null ? new List() : lastAdRewardTimeArray.ToList(); - ShopStock = shopStock?.ToList() ?? new List(); + ShopStock = ShopStock ?? new List(); Pans = Pans ?? new int[0]; TotalSalesList = TotalSalesList ?? new List(); AchievedMission = achievedMission?.ToList() ?? new List(); @@ -214,7 +213,6 @@ public sealed class GameData { // avatarIdArray = avatarIdList.ToArray(); // newAvatarIdArray = newAvatarIdList.ToArray(); // lastAdRewardTimeArray = lastAdRewardTimeList.ToArray(); - shopStock = ShopStock.ToArray(); achievedMission = AchievedMission.ToArray(); } private KeyValueOfintint[] DictionaryToArray(Dictionary dictionary){