diff --git a/popcorn/Assets/MyGame/Scenes/marketing/Scripts/Market.cs b/popcorn/Assets/MyGame/Scenes/marketing/Scripts/Market.cs index 49849851..48a453f3 100644 --- a/popcorn/Assets/MyGame/Scenes/marketing/Scripts/Market.cs +++ b/popcorn/Assets/MyGame/Scenes/marketing/Scripts/Market.cs @@ -173,16 +173,41 @@ public class Market : SingletonMonoBehaviour // コーンの味吹き出しを設定 try { + // 不正なオーダーの場合お客さん制御 + foreach (var t in tmpOrders) + { + if (gameData.ShopStock.Contains(displayFlavors[t])) + { + continue; + } + + if (controller.OrderCount >= 1) + { + controller.OrderCount--; + } + } + + // 購入しないお客さん扱いで退場 + if (controller.OrderCount == 0) + { + controller.CallWaitForSeconds(1.5f, () => + { + controller.ChangeCustomerState(CustomerState.Leave); + }); + dontBuyCustomerList.Add(controller); + continue; + } + controller.SetWantFlavor(displayFlavors[tmpOrders.RandomChoose()]); } catch (Exception e) { - Debug.LogError($"d:{displayFlavors.Count}, {string.Join("", tmpOrders)}" + - $"\nshuffled:{shuffledOrder.Count}, maxNum:{shuffledOrder.Max()}"); /* * 例外握りつぶし * 存在しないorderを引いたのでそのまま処理せず逃がす */ + Debug.LogError($"d:{displayFlavors.Count}, {string.Join("", tmpOrders)}" + + $"\nshuffled:{shuffledOrder.Count}, maxNum:{shuffledOrder.Max()}"); controller.CallWaitForSeconds(1.5f, () => { controller.ChangeCustomerState(CustomerState.Leave); @@ -442,6 +467,15 @@ public class Market : SingletonMonoBehaviour 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); + if (targetIndex == -1) + { + Debug.LogError($@"data +-----stockData: {stockData.FlavorId}, {stockData.Rarity} +-----shopStock: {gameData.ShopStock.Aggregate("", (s, data) => $"{s},{data.FlavorId}")} +displayFlavors: {displayFlavors.Aggregate("", (s, data) => $"{s},{data.FlavorId}")}"); + Observable.NextFrame().Subscribe(_ => throw new Exception("DisplayFlavors Invalid")).AddTo(this); + continue; + } gameData.ShopStock.RemoveAt(targetIndex); gameData.AddSalesCount(stockData.FlavorId, 1, stockData.Rarity); coin += productData.GetRarityPrice(rarityData.Rarity); diff --git a/popcorn/Assets/MyGame/Scenes/marketing/Scripts/MarketManager.cs b/popcorn/Assets/MyGame/Scenes/marketing/Scripts/MarketManager.cs index 8cfec46e..4fca28e2 100644 --- a/popcorn/Assets/MyGame/Scenes/marketing/Scripts/MarketManager.cs +++ b/popcorn/Assets/MyGame/Scenes/marketing/Scripts/MarketManager.cs @@ -248,18 +248,26 @@ public class MarketManager : MonoBehaviour } else { + var isError = false; // 補充したフレーバーのスキンを設定 foreach (var order in x.refillList) { - try + if (order >= market.DisplayFlavors.Count) { - cartView.Refill(order, market.DisplayFlavors[order]); - } - catch (Exception e) - { - Debug.LogError($"order:{order}, displayFlavors:{market.DisplayFlavors.Count}"); - throw; + isError = true; + Debug.LogError($@"mismatch order:{order}, displayFlavors:{market.DisplayFlavors.Count}"); + continue; } + cartView.Refill(order, market.DisplayFlavors[order]); + } + + if (isError) + { + Debug.LogError($@"list + shopStock: {gameData.ShopStock.Aggregate("", (s, data) => $"{s},{data.FlavorId}")} +displayFlavors: {market.DisplayFlavors.Aggregate("", (s, data) => $"{s},{data.FlavorId}")} + refillList: {x.refillList.Aggregate("", (s, order) => $"{s},{order}")}"); + throw new Exception("RefillList Invalid"); } } }).AddTo(this);