retryConditionの使用判定をキャンセル時に修正

This commit is contained in:
kimura 2022-04-20 18:23:09 +09:00
parent ff5d2b1831
commit 7ced53d104
1 changed files with 22 additions and 19 deletions

View File

@ -298,7 +298,7 @@ public class KitchenManager : MonoBehaviour
if (!result.newOrder) if (!result.newOrder)
{ {
if (gameData.OrderIdInProgress != gameData.CancelOrderId) if (!cancelled)
{ {
SetPhoneTap(); SetPhoneTap();
} }
@ -368,39 +368,34 @@ public class KitchenManager : MonoBehaviour
private (bool newOrder, int nextOrderId, int nextOrderLevel) CheckBulkOrder() private (bool newOrder, int nextOrderId, int nextOrderLevel) CheckBulkOrder()
{ {
var gameData = GameDataManager.GameData; var gameData = GameDataManager.GameData;
var nextOrderLevel = 0; var nextOrderLevel = gameData.AchievedOrderLevel + 1;
var nextOrderId = gameData.OrderIdInProgress; var nextOrderId = gameData.OrderIdInProgress;
var bulkOrderList = SpreadsheetDataManager.Instance.GetBaseDataList<BulkOrderData>(Const.BulkOrderDataSheet); var bulkOrderList = SpreadsheetDataManager.Instance.GetBaseDataList<BulkOrderData>(Const.BulkOrderDataSheet);
if (!(bulkOrderList.FirstOrDefault(data => data.shopLevel >= gameData.AchievedOrderLevel + 1) is BulkOrderData bulkOrderData))
{
return (false, nextOrderId, nextOrderLevel);
}
nextOrderLevel = bulkOrderData.shopLevel; // 店舗レベルより大量注文レベルが大きい場合オーダーなし
if (gameData.ViewedShopLevel < nextOrderLevel) if (gameData.ViewedShopLevel < nextOrderLevel)
{ {
return (false, nextOrderId, nextOrderLevel); return (false, nextOrderId, nextOrderLevel);
} }
// 大量注文レベルが上限の場合オーダーなし
if (bulkOrderList.FirstOrDefault(data => data.shopLevel >= gameData.AchievedOrderLevel + 1) is null)
{
return (false, nextOrderId, nextOrderLevel);
}
var achieved = gameData.DeliveredOrder.Contains(gameData.OrderIdInProgress); var achieved = gameData.DeliveredOrder.Contains(gameData.OrderIdInProgress);
var canceled = gameData.OrderIdInProgress == gameData.CancelOrderId;
var nextOrderList = bulkOrderList.Where(data => data.shopLevel == nextOrderLevel).ToList(); var nextOrderList = bulkOrderList.Where(data => data.shopLevel == nextOrderLevel).ToList();
if (!nextOrderList.Exists(data => data.id == gameData.OrderIdInProgress)) if (!nextOrderList.Exists(data => data.id == gameData.OrderIdInProgress))
{ {
// まだ次のオーダーが設定されてない場合nextOrderListの一番若いIDを設定 // まだ次のオーダーが設定されてない場合nextOrderListの一番若いIDを設定
nextOrderId = nextOrderList.First().id; nextOrderId = nextOrderList.First().id;
} }
else if (achieved || gameData.OrderIdInProgress == gameData.CancelOrderId && gameData.CancelOrderId > 0) else if (achieved || canceled)
{ {
// 達成済みか、キャンセルされた場合次のIDを設定 // 達成済みか、キャンセルされた場合次のIDを設定
// 未達成のオーダー // 未達成のオーダー
var orderList = nextOrderList.Where(data => !gameData.DeliveredOrder.Contains(data.id)).ToList(); var orderList = nextOrderList.Where(data => !gameData.DeliveredOrder.Contains(data.id)).ToList();
if (orderList.Count <= 0)
if (orderList.Count > 0)
{
var nextIndex = orderList.FindIndex(data => data.id > gameData.OrderIdInProgress);
nextOrderId = orderList[Mathf.Max(0, nextIndex)].id;
}
else
{ {
#if UNITY_EDITOR #if UNITY_EDITOR
// オーダーリストがすべて達成済みの場合エラー // オーダーリストがすべて達成済みの場合エラー
@ -409,8 +404,14 @@ public class KitchenManager : MonoBehaviour
$"delivered:{gameData.DeliveredOrder.Aggregate(string.Empty, (s, data) => $"{s}, {data}")}\n" + $"delivered:{gameData.DeliveredOrder.Aggregate(string.Empty, (s, data) => $"{s}, {data}")}\n" +
$"orderList:{nextOrderList.Aggregate(string.Empty, (s, data) => $"{s}, {data.id}")}"); $"orderList:{nextOrderList.Aggregate(string.Empty, (s, data) => $"{s}, {data.id}")}");
#endif #endif
return (false, nextOrderId, nextOrderLevel);
} }
var nextIndex = orderList.FindIndex(data => data.id > gameData.OrderIdInProgress);
nextOrderId = orderList[Mathf.Max(0, nextIndex)].id;
} }
if (gameData.OrderIdInProgress == nextOrderId) if (gameData.OrderIdInProgress == nextOrderId)
{ {
@ -418,9 +419,11 @@ public class KitchenManager : MonoBehaviour
} }
var orderData = nextOrderList.First(data => data.id == nextOrderId); var orderData = nextOrderList.First(data => data.id == nextOrderId);
var isFirst = !nextOrderList.Exists(data => data.id == gameData.CancelOrderId); // キャンセル時retryConditionを使う
var condition = isFirst ? orderData.firstOrderCondition : orderData.retryCondition; var condition = canceled ? orderData.retryCondition : orderData.firstOrderCondition;
#if UNITY_EDITOR
Debug.Log($"nextOrderId: {nextOrderId} use {(canceled ? "retryCondition" : "firstOrderCondition")} ({gameData.OrderConditionCount}/{condition})");
#endif
// 条件チェック // 条件チェック
return (condition <= gameData.OrderConditionCount, nextOrderId, nextOrderLevel); return (condition <= gameData.OrderConditionCount, nextOrderId, nextOrderLevel);
} }