MainシーンWorld対応
This commit is contained in:
parent
02668100ba
commit
8c409936c5
|
@ -251,4 +251,59 @@ public class BulkOrder : MonoBehaviour
|
||||||
}
|
}
|
||||||
return Mathf.CeilToInt(totalBonus / resultData.Count);
|
return Mathf.CeilToInt(totalBonus / resultData.Count);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static BulkOrderData CheckBulkOrder()
|
||||||
|
{
|
||||||
|
var globalGameData = GameDataManager.GameData;
|
||||||
|
var cityGameData = GameDataManager.GetCurrentCityGameData();
|
||||||
|
var nextOrderLevel = cityGameData.AchievedOrderLevel + 1;
|
||||||
|
if (globalGameData.ViewedShopLevel < nextOrderLevel)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
var bulkOrderList = SpreadsheetDataManager.Instance.GetBaseDataList<BulkOrderData>(Const.BulkOrderDataSheet);
|
||||||
|
if (!bulkOrderList.Exists(data => data.shopLevel == nextOrderLevel))
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
var nextOrderList = bulkOrderList.Where(data => data.shopLevel == nextOrderLevel).ToList();
|
||||||
|
var firstTime = !nextOrderList.Exists(data => data.id == cityGameData.OrderIdInProgress);
|
||||||
|
var achieved = cityGameData.DeliveredOrder.Contains(cityGameData.OrderIdInProgress);
|
||||||
|
var canceled = cityGameData.OrderIdInProgress == cityGameData.CancelOrderId;
|
||||||
|
#if UNITY_EDITOR
|
||||||
|
Debug.Log("delivered:"+cityGameData.DeliveredOrder.Aggregate(string.Empty, (s, data) => $"{s}, {data}"));
|
||||||
|
Debug.Log($@"CheckBulkOrder NextOrder
|
||||||
|
shopLevel: {globalGameData.ViewedShopLevel} nextOrderLevel: {nextOrderLevel}
|
||||||
|
firstTime: {firstTime} achieved: {achieved} canceled: {canceled} {cityGameData.OrderIdInProgress} == {cityGameData.CancelOrderId}
|
||||||
|
next: {nextOrderList.Aggregate(string.Empty, (s, data) => $"{s}, {data.shopLevel} {data.maxOrder}")}
|
||||||
|
");
|
||||||
|
#endif
|
||||||
|
if (!(firstTime || achieved || canceled))
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 未達成のオーダーリスト
|
||||||
|
var orderList = nextOrderList.Where(data => !cityGameData.DeliveredOrder.Contains(data.id)).ToList();
|
||||||
|
if (orderList.Count == 0)
|
||||||
|
{
|
||||||
|
#if UNITY_EDITOR
|
||||||
|
// オーダーリストがすべて達成済みの場合エラー
|
||||||
|
Debug.LogError(
|
||||||
|
$@"大量注文レベル{nextOrderLevel}に受けられるオーダーがありませんデータを確認してください
|
||||||
|
orderCount:{nextOrderList.Count} maxOrder:{nextOrderList[0].maxOrder}
|
||||||
|
orderList:{nextOrderList.Aggregate(string.Empty, (s, data) => $"{s}, {data.id}")}
|
||||||
|
delivered:{cityGameData.DeliveredOrder.Aggregate(string.Empty, (s, data) => $"{s}, {data}")}
|
||||||
|
");
|
||||||
|
#endif
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
var orderData = orderList.FirstOrDefault(data => data.id > cityGameData.OrderIdInProgress) ?? nextOrderList[0];
|
||||||
|
// キャンセル時retryConditionを使う
|
||||||
|
var condition = canceled ? orderData.retryCondition : orderData.firstOrderCondition;
|
||||||
|
#if UNITY_EDITOR
|
||||||
|
Debug.Log($"nextOrderId: {orderData.id} use {(canceled ? "retryCondition" : "firstOrderCondition")} ({cityGameData.OrderConditionCount}/{condition})");
|
||||||
|
#endif
|
||||||
|
return condition <= cityGameData.OrderConditionCount ? orderData : null;
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -21,6 +21,7 @@ public class KitchenManager : MonoBehaviour
|
||||||
[SerializeField] private KitchenView kitchenView;
|
[SerializeField] private KitchenView kitchenView;
|
||||||
[SerializeField] private BulkOrderIndicatorView orderIndicatorView;
|
[SerializeField] private BulkOrderIndicatorView orderIndicatorView;
|
||||||
[SerializeField] private AutoCookView autoCookView;
|
[SerializeField] private AutoCookView autoCookView;
|
||||||
|
[SerializeField] private PartTimerButtonView partTimerButtonView;
|
||||||
|
|
||||||
private readonly Subject<Unit> showAdDialogSubject = new Subject<Unit>();
|
private readonly Subject<Unit> showAdDialogSubject = new Subject<Unit>();
|
||||||
private IDisposable timerDisposable = null;
|
private IDisposable timerDisposable = null;
|
||||||
|
@ -31,7 +32,14 @@ public class KitchenManager : MonoBehaviour
|
||||||
{
|
{
|
||||||
showAdDialogSubject.AddTo(this);
|
showAdDialogSubject.AddTo(this);
|
||||||
SoundManager.Instance.PlayBGM("bgm_Main");
|
SoundManager.Instance.PlayBGM("bgm_Main");
|
||||||
var gameData = GameDataManager.GameData;
|
var globalGameData = GameDataManager.GameData;
|
||||||
|
var newGameData = GameDataUtils.CreateCityData(2);
|
||||||
|
// newGameData.IsFundingCompleted = true;
|
||||||
|
newGameData.Heart = 100;
|
||||||
|
// gameData.IsFundingCompleted = true;
|
||||||
|
// gameData.PartTimerElapsed = 100;
|
||||||
|
// globalGameData.CurrentCityId = Const.DefaultCityId;
|
||||||
|
var cityGameData = GameDataManager.GetCurrentCityGameData();
|
||||||
|
|
||||||
// レシピの表示
|
// レシピの表示
|
||||||
cookingButton.OnClickAsObservable().Subscribe(_ =>
|
cookingButton.OnClickAsObservable().Subscribe(_ =>
|
||||||
|
@ -39,31 +47,41 @@ public class KitchenManager : MonoBehaviour
|
||||||
RecipeSelectDialog.ShowDialog(ProductViewType.Default);
|
RecipeSelectDialog.ShowDialog(ProductViewType.Default);
|
||||||
});
|
});
|
||||||
|
|
||||||
// 大量注文データ
|
/*
|
||||||
var bulkOrderList = SpreadsheetDataManager.Instance.GetBaseDataList<BulkOrderData>(Const.BulkOrderDataSheet);
|
* バイト表示
|
||||||
var bulkOrderData = bulkOrderList.FirstOrDefault(data => data.id == gameData.OrderIdInProgress);
|
* バイト開放の条件は最新店舗ではない都市(最新店舗以外はバイトが居る)
|
||||||
var achieved = bulkOrderData is null || gameData.DeliveredOrder.Contains(bulkOrderData.id) || gameData.AchievedOrderLevel == bulkOrderData.shopLevel;
|
*/
|
||||||
var cancelled = gameData.OrderIdInProgress == gameData.CancelOrderId;
|
var isPartTimer = !GameDataUtils.CheckLatestCity(globalGameData.CurrentCityId);
|
||||||
|
if (isPartTimer)
|
||||||
CheckOrderAndSetPhoneTap();
|
|
||||||
|
|
||||||
// 大量注文達成通知
|
|
||||||
if (bulkOrderData == null)
|
|
||||||
{
|
{
|
||||||
orderIndicatorView.SetBadgeActive(false);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
var orderList = new List<int>
|
CheckOrderAndSetPhoneTap();
|
||||||
{
|
|
||||||
bulkOrderData.productId1,
|
|
||||||
bulkOrderData.productId2,
|
|
||||||
bulkOrderData.productId3,
|
|
||||||
};
|
|
||||||
var completed = gameData.CompletedProductList.Count == orderList.Count(x => x != 0);
|
|
||||||
orderIndicatorView.SetBadgeActive(completed && !achieved && !cancelled);
|
|
||||||
}
|
}
|
||||||
|
// バイト有効時は自動調理と大量注文が非表示
|
||||||
|
partTimerButtonView.gameObject.SetActive(isPartTimer);
|
||||||
|
orderIndicatorView.gameObject.SetActive(!isPartTimer);
|
||||||
|
autoCookView.SetActive(!isPartTimer && globalGameData.ViewedShopLevel >= Const.AutoCookAvailableLevel);
|
||||||
|
kitchenView.SetActive(!isPartTimer);
|
||||||
|
|
||||||
|
// 大量注文達成通知
|
||||||
|
var bulkOrderList = SpreadsheetDataManager.Instance.GetBaseDataList<BulkOrderData>(Const.BulkOrderDataSheet);
|
||||||
|
if (bulkOrderList.FirstOrDefault(data => data.id == cityGameData.OrderIdInProgress) is { } bulkOrderData)
|
||||||
|
{
|
||||||
|
var completed = cityGameData.CompletedProductList.Count == bulkOrderData.OrderList.Count(tuple => tuple.productId != 0);
|
||||||
|
var achieved = cityGameData.AchievedOrderLevel == bulkOrderData.shopLevel || cityGameData.DeliveredOrder.Contains(bulkOrderData.id);
|
||||||
|
var cancelled = cityGameData.OrderIdInProgress == cityGameData.CancelOrderId;
|
||||||
|
orderIndicatorView.SetBadgeActive(completed && !achieved && !cancelled);
|
||||||
|
orderIndicatorView.SetIndicate(false, achieved || cancelled);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
orderIndicatorView.SetBadgeActive(false);
|
||||||
|
orderIndicatorView.SetIndicate(false, true);
|
||||||
|
}
|
||||||
|
|
||||||
// 大量注文の調理から戻ってきたときにダイアログ開く
|
// 大量注文の調理から戻ってきたときにダイアログ開く
|
||||||
if (LocalCacheManager.Load(Const.ProductViewTypeTag, ProductViewType.Default) == ProductViewType.BulkOrder)
|
if (LocalCacheManager.Load(Const.ProductViewTypeTag, ProductViewType.Default) == ProductViewType.BulkOrder)
|
||||||
{
|
{
|
||||||
|
@ -72,40 +90,37 @@ public class KitchenManager : MonoBehaviour
|
||||||
|
|
||||||
// 自動調理
|
// 自動調理
|
||||||
autoCookView.Initialize();
|
autoCookView.Initialize();
|
||||||
// レベル確認
|
|
||||||
autoCookView.SetActive(gameData.ViewedShopLevel >= Const.AutoCookAvailableLevel);
|
|
||||||
|
|
||||||
var autoCookDataList = SpreadsheetDataManager.Instance.GetBaseDataList<AutoCookData>(Const.AutoCookDataSheet);
|
var autoCookDataList = SpreadsheetDataManager.Instance.GetBaseDataList<AutoCookData>(Const.AutoCookDataSheet);
|
||||||
if (autoCookDataList.FirstOrDefault(data => data.level == gameData.AutoCookLevel) is AutoCookData autoCookData)
|
if (autoCookDataList.FirstOrDefault(data => data.level == cityGameData.AutoCookLevel) is AutoCookData autoCookData)
|
||||||
{
|
{
|
||||||
autoCookView.CheckNotify();
|
autoCookView.CheckNotify();
|
||||||
CookState state;
|
CookState state;
|
||||||
var remainingTime = DateTime.FromBinary(gameData.AutoCookFinishTime).Subtract(DateTime.UtcNow);
|
var remainingTime = DateTime.FromBinary(cityGameData.AutoCookFinishTime).Subtract(DateTime.UtcNow);
|
||||||
if (gameData.AutoCookProducts.Length > 0)
|
if (cityGameData.AutoCookProducts.Length > 0)
|
||||||
{
|
{
|
||||||
autoCookView.ResetTimer((int)remainingTime.TotalSeconds, (int)TimeSpan.FromHours(autoCookData.duration).TotalSeconds);
|
autoCookView.ResetTimer((int)remainingTime.TotalSeconds, (int)TimeSpan.FromHours(autoCookData.duration).TotalSeconds);
|
||||||
}
|
}
|
||||||
autoCookView.Button.ThrottleFirst(TimeSpan.FromSeconds(.3f)).Subscribe(_ =>
|
autoCookView.Button.ThrottleFirst(TimeSpan.FromSeconds(.3f)).Subscribe(_ =>
|
||||||
{
|
{
|
||||||
// 自動調理チュートリアル
|
// 自動調理チュートリアル
|
||||||
if (!gameData.FinishedFlags.HasFlag(TutorialFlag.AutoCook))
|
if (!globalGameData.FinishedFlags.HasFlag(TutorialFlag.AutoCook))
|
||||||
{
|
{
|
||||||
TutorialManager.Instance.ShowTutorialConversation(14, () =>
|
TutorialManager.Instance.ShowTutorialConversation(14, () =>
|
||||||
{
|
{
|
||||||
gameData.FinishedFlags |= TutorialFlag.AutoCook;
|
globalGameData.FinishedFlags |= TutorialFlag.AutoCook;
|
||||||
GameDataManager.SaveGameData();
|
GameDataManager.SaveGameData();
|
||||||
autoCookView.ShowDialog(CookState.Ready, () =>
|
autoCookView.ShowDialog(CookState.Ready, () =>
|
||||||
{
|
{
|
||||||
autoCookView.CheckNotify();
|
autoCookView.CheckNotify();
|
||||||
remainingTime = DateTime.FromBinary(gameData.AutoCookFinishTime).Subtract(DateTime.UtcNow);
|
remainingTime = DateTime.FromBinary(cityGameData.AutoCookFinishTime).Subtract(DateTime.UtcNow);
|
||||||
autoCookView.ResetTimer((int)remainingTime.TotalSeconds, (int)TimeSpan.FromHours(autoCookData.duration).TotalSeconds);
|
autoCookView.ResetTimer((int)remainingTime.TotalSeconds, (int)TimeSpan.FromHours(autoCookData.duration).TotalSeconds);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
remainingTime = DateTime.FromBinary(gameData.AutoCookFinishTime).Subtract(DateTime.UtcNow);
|
remainingTime = DateTime.FromBinary(cityGameData.AutoCookFinishTime).Subtract(DateTime.UtcNow);
|
||||||
if (gameData.AutoCookProducts.Length == 0)
|
if (cityGameData.AutoCookProducts.Length == 0)
|
||||||
{
|
{
|
||||||
state = CookState.Ready;
|
state = CookState.Ready;
|
||||||
}
|
}
|
||||||
|
@ -121,13 +136,13 @@ public class KitchenManager : MonoBehaviour
|
||||||
autoCookView.ShowDialog(state, () =>
|
autoCookView.ShowDialog(state, () =>
|
||||||
{
|
{
|
||||||
autoCookView.CheckNotify();
|
autoCookView.CheckNotify();
|
||||||
if (gameData.AutoCookProducts.Length == 0)
|
if (cityGameData.AutoCookProducts.Length == 0)
|
||||||
{
|
{
|
||||||
autoCookView.Ready();
|
autoCookView.Ready();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
remainingTime = DateTime.FromBinary(gameData.AutoCookFinishTime).Subtract(DateTime.UtcNow);
|
remainingTime = DateTime.FromBinary(cityGameData.AutoCookFinishTime).Subtract(DateTime.UtcNow);
|
||||||
autoCookView.ResetTimer((int)remainingTime.TotalSeconds, (int)TimeSpan.FromHours(autoCookData.duration).TotalSeconds);
|
autoCookView.ResetTimer((int)remainingTime.TotalSeconds, (int)TimeSpan.FromHours(autoCookData.duration).TotalSeconds);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -135,25 +150,25 @@ public class KitchenManager : MonoBehaviour
|
||||||
}
|
}
|
||||||
|
|
||||||
// tutorial
|
// tutorial
|
||||||
if (!gameData.FinishedFlags.HasFlag(TutorialFlag.FirstPlay))
|
if (!globalGameData.FinishedFlags.HasFlag(TutorialFlag.FirstPlay))
|
||||||
{
|
{
|
||||||
if (TutorialManager.Instance.Index == 0)
|
if (TutorialManager.Instance.Index == 0)
|
||||||
{
|
{
|
||||||
gameData.ViewedShopLevel = 0;
|
globalGameData.ViewedShopLevel = 0;
|
||||||
// アイテム付与
|
// アイテム付与
|
||||||
gameData.CornSeed = 100;
|
globalGameData.CornSeed = 100;
|
||||||
gameData.Coin = 0;
|
globalGameData.Coin = 0;
|
||||||
if (!(gameData.Material.FirstOrDefault(x => x.Id == 2) is MaterialData materialData))
|
if (!(globalGameData.Material.FirstOrDefault(x => x.Id == 2) is MaterialData materialData))
|
||||||
{
|
{
|
||||||
materialData = new MaterialData {Id = 2};
|
materialData = new MaterialData {Id = 2};
|
||||||
gameData.Material.Add(materialData);
|
globalGameData.Material.Add(materialData);
|
||||||
}
|
}
|
||||||
materialData.Amount++;
|
materialData.Amount++;
|
||||||
gameData.InitTank();
|
globalGameData.InitTank();
|
||||||
gameData.ShopStock.Clear();
|
globalGameData.ShopStock.Clear();
|
||||||
// ミッションカウンターリセット
|
// ミッションカウンターリセット
|
||||||
gameData.ResetNormalTotalCount();
|
globalGameData.ResetNormalTotalCount();
|
||||||
gameData.ResetDailyTotalCount();
|
globalGameData.ResetDailyTotalCount();
|
||||||
|
|
||||||
// 店舗レベル1達成表示
|
// 店舗レベル1達成表示
|
||||||
kitchenView.SetActive(false);
|
kitchenView.SetActive(false);
|
||||||
|
@ -188,21 +203,25 @@ public class KitchenManager : MonoBehaviour
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
CoinManager.Instance.ChangeCoin(gameData.Coin);
|
CoinManager.Instance.ChangeCoin(cityGameData.Coin);
|
||||||
HeartMeter.Instance.Initialize(gameData.ViewedShopLevel, gameData.Heart);
|
HeartMeter.Instance.Initialize(globalGameData.ViewedShopLevel, cityGameData.Heart);
|
||||||
|
|
||||||
// ハートゲージがフルかつダイアログが開いていない場合レベルアップ
|
// ハートゲージがフルかつダイアログが開いていない場合レベルアップ
|
||||||
HeartMeter.Instance.FulledHeart
|
HeartMeter.Instance.FulledHeart
|
||||||
.SkipWhile(_ => !gameData.FinishedFlags.HasFlag(TutorialFlag.FirstPlay))
|
.SkipWhile(_ => !globalGameData.FinishedFlags.HasFlag(TutorialFlag.FirstPlay))
|
||||||
.DelaySubscription(TimeSpan.FromSeconds(.4f))
|
.DelaySubscription(TimeSpan.FromSeconds(.4f))
|
||||||
.Subscribe(_ =>
|
.Subscribe(_ =>
|
||||||
{
|
{
|
||||||
kitchenView.SetActive(false);
|
kitchenView.SetActive(false);
|
||||||
ShopLevelUp.ShowDialog(gameData.ViewedShopLevel + 1, () =>
|
ShopLevelUp.ShowDialog(globalGameData.ViewedShopLevel + 1, () =>
|
||||||
{
|
{
|
||||||
|
if (isPartTimer)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
kitchenView.SetActive(true);
|
kitchenView.SetActive(true);
|
||||||
CheckOrderAndSetPhoneTap();
|
CheckOrderAndSetPhoneTap();
|
||||||
autoCookView.SetActive(gameData.ViewedShopLevel >= Const.AutoCookAvailableLevel);
|
autoCookView.SetActive(globalGameData.ViewedShopLevel >= Const.AutoCookAvailableLevel);
|
||||||
});
|
});
|
||||||
}).AddTo(this);
|
}).AddTo(this);
|
||||||
|
|
||||||
|
@ -214,6 +233,16 @@ public class KitchenManager : MonoBehaviour
|
||||||
HeartMeter.Instance.AddHeart(pair.Current - pair.Previous);
|
HeartMeter.Instance.AddHeart(pair.Current - pair.Previous);
|
||||||
}).AddTo(this);
|
}).AddTo(this);
|
||||||
|
|
||||||
|
this.OnDestroyAsObservable()
|
||||||
|
.Subscribe(_ =>
|
||||||
|
{
|
||||||
|
if (!SoundManager.ExistsInstance)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
SoundManager.Instance.StopSE("se_Main_phone_sound");
|
||||||
|
}).AddTo(this);
|
||||||
|
|
||||||
kitchenView.Initialize();
|
kitchenView.Initialize();
|
||||||
adButton.OnClickAsObservable()
|
adButton.OnClickAsObservable()
|
||||||
.Merge(showAdDialogSubject)
|
.Merge(showAdDialogSubject)
|
||||||
|
@ -225,13 +254,13 @@ public class KitchenManager : MonoBehaviour
|
||||||
CoinGetDialog.ShowDialog(refreshRewardCoin, () =>
|
CoinGetDialog.ShowDialog(refreshRewardCoin, () =>
|
||||||
{
|
{
|
||||||
CoinManager.Instance.AddCoin(refreshRewardCoin);
|
CoinManager.Instance.AddCoin(refreshRewardCoin);
|
||||||
gameData.Coin = CoinManager.Instance.OwnCoin;
|
cityGameData.Coin = CoinManager.Instance.OwnCoin;
|
||||||
gameData.kitchenRefreshTime = DateTime.UtcNow.AddSeconds(refreshWaitTime).ToBinary();
|
globalGameData.kitchenRefreshTime = DateTime.UtcNow.AddSeconds(refreshWaitTime).ToBinary();
|
||||||
GameDataManager.SaveGameData();
|
GameDataManager.SaveGameData();
|
||||||
|
|
||||||
// SetTimer((int)refreshWaitTime);
|
// SetTimer((int)refreshWaitTime);
|
||||||
adButton.gameObject.SetActive(false);
|
adButton.gameObject.SetActive(false);
|
||||||
if (gameData.kitchenRefreshTime % 10 < livelyRate)
|
if (globalGameData.kitchenRefreshTime % 10 < livelyRate)
|
||||||
{
|
{
|
||||||
kitchenView.SetLivelyAnimation();
|
kitchenView.SetLivelyAnimation();
|
||||||
}
|
}
|
||||||
|
@ -244,21 +273,21 @@ public class KitchenManager : MonoBehaviour
|
||||||
}).AddTo(this);
|
}).AddTo(this);
|
||||||
|
|
||||||
// 休憩リワード
|
// 休憩リワード
|
||||||
var remaining = (int) DateTime.FromBinary(gameData.kitchenRefreshTime).Subtract(DateTime.UtcNow).TotalSeconds;
|
var remaining = (int) DateTime.FromBinary(globalGameData.kitchenRefreshTime).Subtract(DateTime.UtcNow).TotalSeconds;
|
||||||
// timerDisposable = SetTimer(remaining);
|
// timerDisposable = SetTimer(remaining);
|
||||||
|
|
||||||
// 商品在庫計算
|
// 商品在庫計算
|
||||||
var shopStock = gameData.ShopStock.Count;
|
var shopStock = cityGameData.ShopStock.Count;
|
||||||
var tankStock = gameData.StorageTanks.Sum(x => x.Stock);
|
var tankStock = cityGameData.StorageTanks.Sum(x => x.Stock);
|
||||||
var totalStock = shopStock + tankStock;
|
var totalStock = shopStock + tankStock;
|
||||||
|
|
||||||
if (remaining <= 0 && gameData.FinishedFlags.HasFlag(TutorialFlag.FirstPlay))
|
if (remaining <= 0 && globalGameData.FinishedFlags.HasFlag(TutorialFlag.FirstPlay))
|
||||||
{
|
{
|
||||||
// コイン獲得有効
|
// コイン獲得有効
|
||||||
adButton.gameObject.SetActive(true);
|
adButton.gameObject.SetActive(true);
|
||||||
kitchenView.SetNormalAnimation();
|
kitchenView.SetNormalAnimation();
|
||||||
}
|
}
|
||||||
else if (gameData.Coin + gameData.Material.Sum(data => data.Amount) + totalStock == 0)
|
else if (cityGameData.Coin + cityGameData.Material.Sum(data => data.Amount) + totalStock == 0)
|
||||||
{
|
{
|
||||||
// 所持金0救済
|
// 所持金0救済
|
||||||
adButton.gameObject.SetActive(true);
|
adButton.gameObject.SetActive(true);
|
||||||
|
@ -269,7 +298,7 @@ public class KitchenManager : MonoBehaviour
|
||||||
{
|
{
|
||||||
// 獲得後
|
// 獲得後
|
||||||
adButton.gameObject.SetActive(false);
|
adButton.gameObject.SetActive(false);
|
||||||
if (gameData.kitchenRefreshTime % 10 < livelyRate)
|
if (globalGameData.kitchenRefreshTime % 10 < livelyRate)
|
||||||
{
|
{
|
||||||
kitchenView.SetLivelyAnimation();
|
kitchenView.SetLivelyAnimation();
|
||||||
}
|
}
|
||||||
|
@ -286,7 +315,7 @@ public class KitchenManager : MonoBehaviour
|
||||||
}
|
}
|
||||||
|
|
||||||
#if UNITY_EDITOR
|
#if UNITY_EDITOR
|
||||||
Debug.Log($"remaining: {remaining}");
|
Debug.Log($"remaining: {Mathf.Max(remaining, 0)}");
|
||||||
Market.StockFlavorLog();
|
Market.StockFlavorLog();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -295,66 +324,50 @@ public class KitchenManager : MonoBehaviour
|
||||||
// 大量注文タップ時の挙動設定
|
// 大量注文タップ時の挙動設定
|
||||||
private void CheckOrderAndSetPhoneTap()
|
private void CheckOrderAndSetPhoneTap()
|
||||||
{
|
{
|
||||||
|
if (BulkOrder.CheckBulkOrder() is { } nextOrderData)
|
||||||
|
{
|
||||||
|
orderIndicatorView.SetIndicate(true, false);
|
||||||
|
SetPhoneTap(nextOrderData);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
var gameData = GameDataManager.GameData;
|
var gameData = GameDataManager.GameData;
|
||||||
// 大量注文データ
|
|
||||||
var bulkOrderList = SpreadsheetDataManager.Instance.GetBaseDataList<BulkOrderData>(Const.BulkOrderDataSheet);
|
|
||||||
var bulkOrderData = bulkOrderList.FirstOrDefault(data => data.id == gameData.OrderIdInProgress);
|
|
||||||
var achieved = bulkOrderData is null || gameData.DeliveredOrder.Contains(bulkOrderData.id) || gameData.AchievedOrderLevel == bulkOrderData.shopLevel;
|
|
||||||
var cancelled = gameData.OrderIdInProgress == gameData.CancelOrderId;
|
var cancelled = gameData.OrderIdInProgress == gameData.CancelOrderId;
|
||||||
var result = CheckBulkOrder();
|
if (cancelled)
|
||||||
orderIndicatorView.SetIndicate(result.newOrder, achieved || cancelled);
|
|
||||||
|
|
||||||
if (!result.newOrder)
|
|
||||||
{
|
{
|
||||||
if (!cancelled)
|
return;
|
||||||
{
|
|
||||||
SetPhoneTap();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// 新着処理
|
|
||||||
SoundManager.Instance.StopSE("se_Main_phone_sound");
|
|
||||||
var messageList = SpreadsheetDataManager.Instance.GetBaseDataList<BulkOrderTextData>(Const.BulkOrderTextDataSheet);
|
|
||||||
var nextMessageList = messageList.Where(data => data.shopLevel == result.nextOrderLevel).ToList();
|
|
||||||
tapPhoneDisposable?.Dispose();
|
|
||||||
tapPhoneDisposable = orderIndicatorView.TappedPhone.Take(1).Subscribe(_ =>
|
|
||||||
{
|
|
||||||
// タップで更新
|
|
||||||
gameData.CompletedProductList.Clear();
|
|
||||||
gameData.OrderIdInProgress = result.nextOrderId;
|
|
||||||
if (nextMessageList.Exists(data => data.id == gameData.OrderTextId))
|
|
||||||
{
|
|
||||||
var nextMessageIndex = nextMessageList.FindIndex(data => data.id == gameData.OrderTextId) + 1;
|
|
||||||
gameData.OrderTextId = nextMessageList[nextMessageIndex >= nextMessageList.Count ? 0 : nextMessageIndex].id;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
gameData.OrderTextId = nextMessageList.First().id;
|
|
||||||
}
|
|
||||||
|
|
||||||
GameDataManager.SaveGameData();
|
|
||||||
|
|
||||||
var orderData = bulkOrderList.First(data => data.id == result.nextOrderId);
|
|
||||||
LocalCacheManager.Save(BulkOrder.DataTag, orderData);
|
|
||||||
BulkOrderNotifyView.ShowDialog(BulkOrderShowDialogWithSetup);
|
|
||||||
|
|
||||||
// 通知をタップ後タップ動作を切り替える
|
|
||||||
SetPhoneTap();
|
|
||||||
orderIndicatorView.SetIndicate(false, false);
|
|
||||||
}).AddTo(this);
|
|
||||||
}
|
}
|
||||||
|
SetPhoneTap();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SetPhoneTap()
|
private void SetPhoneTap(BulkOrderData nextOrderData = null)
|
||||||
{
|
{
|
||||||
tapPhoneDisposable?.Dispose();
|
tapPhoneDisposable?.Dispose();
|
||||||
tapPhoneDisposable = orderIndicatorView.TappedPhone
|
if (nextOrderData is null)
|
||||||
.ThrottleFirst(TimeSpan.FromSeconds(1f))
|
{
|
||||||
.Subscribe(_ =>
|
tapPhoneDisposable = orderIndicatorView.TappedPhone
|
||||||
{
|
.ThrottleFirst(TimeSpan.FromSeconds(1f))
|
||||||
BulkOrderShowDialogWithSetup();
|
.Subscribe(_ => BulkOrderShowDialogWithSetup()).AddTo(this);
|
||||||
}).AddTo(this);
|
return;
|
||||||
|
}
|
||||||
|
// 新着処理
|
||||||
|
SoundManager.Instance.StopSE("se_Main_phone_sound");
|
||||||
|
var messageList = SpreadsheetDataManager.Instance.GetBaseDataList<BulkOrderTextData>(Const.BulkOrderTextDataSheet);
|
||||||
|
var nextMessageList = messageList.Where(data => data.shopLevel == nextOrderData.shopLevel).ToList();
|
||||||
|
tapPhoneDisposable = orderIndicatorView.TappedPhone.Take(1).Subscribe(_ =>
|
||||||
|
{
|
||||||
|
// タップで更新
|
||||||
|
var gameData = GameDataManager.GameData;
|
||||||
|
gameData.CompletedProductList.Clear();
|
||||||
|
gameData.OrderIdInProgress = nextOrderData.id;
|
||||||
|
gameData.OrderTextId = nextMessageList.FirstOrDefault(data => data.id > gameData.OrderTextId)?.id ?? nextMessageList[0].id;
|
||||||
|
GameDataManager.SaveGameData();
|
||||||
|
|
||||||
|
SetPhoneTap();
|
||||||
|
orderIndicatorView.SetIndicate(false, false);
|
||||||
|
LocalCacheManager.Save(BulkOrder.DataTag, nextOrderData);
|
||||||
|
BulkOrderNotifyView.ShowDialog(BulkOrderShowDialogWithSetup);
|
||||||
|
}).AddTo(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void BulkOrderShowDialogWithSetup()
|
private void BulkOrderShowDialogWithSetup()
|
||||||
|
@ -372,68 +385,6 @@ public class KitchenManager : MonoBehaviour
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private (bool newOrder, int nextOrderId, int nextOrderLevel) CheckBulkOrder()
|
|
||||||
{
|
|
||||||
var gameData = GameDataManager.GameData;
|
|
||||||
var nextOrderLevel = 0;
|
|
||||||
var nextOrderId = gameData.OrderIdInProgress;
|
|
||||||
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)
|
|
||||||
{
|
|
||||||
return (false, nextOrderId, nextOrderLevel);
|
|
||||||
}
|
|
||||||
var achieved = gameData.DeliveredOrder.Contains(gameData.OrderIdInProgress);
|
|
||||||
var canceled = gameData.OrderIdInProgress == gameData.CancelOrderId;
|
|
||||||
var nextOrderList = bulkOrderList.Where(data => data.shopLevel == nextOrderLevel).ToList();
|
|
||||||
if (!nextOrderList.Exists(data => data.id == gameData.OrderIdInProgress))
|
|
||||||
{
|
|
||||||
// まだ次のオーダーが設定されてない場合nextOrderListの一番若いIDを設定
|
|
||||||
nextOrderId = nextOrderList.First().id;
|
|
||||||
}
|
|
||||||
else if (achieved || canceled)
|
|
||||||
{
|
|
||||||
// 達成済みか、キャンセルされた場合次のIDを設定
|
|
||||||
// 未達成のオーダー
|
|
||||||
var orderList = nextOrderList.Where(data => !gameData.DeliveredOrder.Contains(data.id)).ToList();
|
|
||||||
if (orderList.Count <= 0)
|
|
||||||
{
|
|
||||||
#if UNITY_EDITOR
|
|
||||||
// オーダーリストがすべて達成済みの場合エラー
|
|
||||||
Debug.LogError($"大量注文レベル{nextOrderLevel}に受けられるオーダーがありませんデータを確認してください\n" +
|
|
||||||
$"maxOrder:{nextOrderList[0].maxOrder}\n" +
|
|
||||||
$"delivered:{gameData.DeliveredOrder.Aggregate(string.Empty, (s, data) => $"{s}, {data}")}\n" +
|
|
||||||
$"orderList:{nextOrderList.Aggregate(string.Empty, (s, data) => $"{s}, {data.id}")}");
|
|
||||||
#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)
|
|
||||||
{
|
|
||||||
return (false, nextOrderId, nextOrderLevel);
|
|
||||||
}
|
|
||||||
|
|
||||||
var orderData = nextOrderList.First(data => data.id == nextOrderId);
|
|
||||||
// キャンセル時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);
|
|
||||||
}
|
|
||||||
|
|
||||||
private IDisposable SetTimer(int time)
|
private IDisposable SetTimer(int time)
|
||||||
{
|
{
|
||||||
timerDisposable?.Dispose();
|
timerDisposable?.Dispose();
|
||||||
|
@ -447,12 +398,4 @@ public class KitchenManager : MonoBehaviour
|
||||||
adButton.gameObject.SetActive(true);
|
adButton.gameObject.SetActive(true);
|
||||||
}).AddTo(this);
|
}).AddTo(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnDestroy()
|
|
||||||
{
|
|
||||||
if (SoundManager.ExistsInstance)
|
|
||||||
{
|
|
||||||
SoundManager.Instance.StopSE("se_Main_phone_sound");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -43,6 +43,7 @@ public static class Const {
|
||||||
public static readonly string LanguageDataTypeTag = "LanguageDataType";
|
public static readonly string LanguageDataTypeTag = "LanguageDataType";
|
||||||
public static readonly string LocalNotificationTag = "LocalNotification";
|
public static readonly string LocalNotificationTag = "LocalNotification";
|
||||||
public static readonly string ProductViewTypeTag = "ProductViewType";
|
public static readonly string ProductViewTypeTag = "ProductViewType";
|
||||||
|
public static readonly string ChangeCityFlagTag = "ChangeCityFlag";
|
||||||
|
|
||||||
// sns
|
// sns
|
||||||
public static readonly string LineURL = "http://nav.cx/aVZ8nEK";
|
public static readonly string LineURL = "http://nav.cx/aVZ8nEK";
|
||||||
|
|
Loading…
Reference in New Issue