レベルアップ時に大量注文の新着を確認する処理を追加

This commit is contained in:
kimura 2021-12-15 10:51:56 +09:00
parent e6c045e2b1
commit d5e4308503
1 changed files with 64 additions and 51 deletions

View File

@ -21,7 +21,8 @@ public class KitchenManager : MonoBehaviour
[SerializeField] private BulkOrderIndicatorView orderIndicatorView; [SerializeField] private BulkOrderIndicatorView orderIndicatorView;
private readonly Subject<Unit> showAdDialogSubject = new Subject<Unit>(); private readonly Subject<Unit> showAdDialogSubject = new Subject<Unit>();
IDisposable timerDisposable = null; private IDisposable timerDisposable = null;
private IDisposable tapPhoneDisposable;
// Start is called before the first frame update // Start is called before the first frame update
void Start() void Start()
@ -41,6 +42,8 @@ public class KitchenManager : MonoBehaviour
var bulkOrderData = bulkOrderList.FirstOrDefault(data => data.id == gameData.OrderIdInProgress); var bulkOrderData = bulkOrderList.FirstOrDefault(data => data.id == gameData.OrderIdInProgress);
var achieved = bulkOrderData is null || gameData.DeliveredOrder.Contains(bulkOrderData.id) || gameData.AchievedOrderLevel == bulkOrderData.shopLevel; 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;
CheckOrderAndSetPhoneTap();
// 大量注文達成通知 // 大量注文達成通知
if (bulkOrderData == null) if (bulkOrderData == null)
@ -58,7 +61,13 @@ public class KitchenManager : MonoBehaviour
var completed = gameData.CompletedProductList.Count == orderList.Count(x => x != 0); var completed = gameData.CompletedProductList.Count == orderList.Count(x => x != 0);
orderIndicatorView.SetBadgeActive(completed && !achieved && !cancelled); orderIndicatorView.SetBadgeActive(completed && !achieved && !cancelled);
} }
// 大量注文の調理から戻ってきたときにダイアログ開く
if (LocalCacheManager.Load(Const.ProductViewTypeTag, ProductViewType.Default) == ProductViewType.BulkOrder)
{
BulkOrderShowDialogWithSetup();
}
// tutorial // tutorial
if (!gameData.FinishedFlags.HasFlag(TutorialFlag.FirstPlay)) if (!gameData.FinishedFlags.HasFlag(TutorialFlag.FirstPlay))
{ {
@ -116,7 +125,7 @@ public class KitchenManager : MonoBehaviour
.DelaySubscription(TimeSpan.FromSeconds(.4f)) .DelaySubscription(TimeSpan.FromSeconds(.4f))
.Subscribe(_ => .Subscribe(_ =>
{ {
ShopLevelUp.ShowDialog(gameData.ViewedShopLevel + 1); ShopLevelUp.ShowDialog(gameData.ViewedShopLevel + 1, CheckOrderAndSetPhoneTap);
}).AddTo(this); }).AddTo(this);
GameDataObserver.Instance.HeartObserver GameDataObserver.Instance.HeartObserver
@ -197,66 +206,70 @@ public class KitchenManager : MonoBehaviour
adButton.gameObject.SetActive(false); adButton.gameObject.SetActive(false);
kitchenView.SetNormalAnimation(); kitchenView.SetNormalAnimation();
} }
#if UNITY_EDITOR #if UNITY_EDITOR
Debug.Log($"remaining: {remaining}"); Debug.Log($"remaining: {remaining}");
Market.StockFlavorLog(); Market.StockFlavorLog();
#endif #endif
var result = CheckBulkOrder();
orderIndicatorView.SetIndicate(result.newOrder, achieved || cancelled);
if (LocalCacheManager.Load(Const.ProductViewTypeTag, ProductViewType.Default) == ProductViewType.BulkOrder)
{
BulkOrderShowDialogWithSetup();
}
if (!result.newOrder) // 大量注文タップ時の挙動設定
void CheckOrderAndSetPhoneTap()
{ {
if (gameData.OrderIdInProgress != gameData.CancelOrderId) var result = CheckBulkOrder();
orderIndicatorView.SetIndicate(result.newOrder, achieved || cancelled);
if (!result.newOrder)
{ {
orderIndicatorView.TappedPhone if (gameData.OrderIdInProgress != gameData.CancelOrderId)
.ThrottleFirst(TimeSpan.FromSeconds(1f)) {
.Subscribe(_ => 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))
{ {
BulkOrderShowDialogWithSetup(); var nextMessageIndex = nextMessageList.FindIndex(data => data.id == gameData.OrderTextId) + 1;
}).AddTo(this); 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);
} }
} }
else }
{
SoundManager.Instance.StopSE("se_Main_phone_sound"); private void SetPhoneTap()
{
var messageList = SpreadsheetDataManager.Instance.GetBaseDataList<BulkOrderTextData>(Const.BulkOrderTextDataSheet); tapPhoneDisposable?.Dispose();
var nextMessageList = messageList.Where(data => data.shopLevel == result.nextOrderLevel).ToList(); tapPhoneDisposable = orderIndicatorView.TappedPhone
orderIndicatorView.TappedPhone.Take(1).Subscribe(_ => .ThrottleFirst(TimeSpan.FromSeconds(1f))
.Subscribe(_ =>
{ {
// タップで更新 BulkOrderShowDialogWithSetup();
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);
// 通知をタップ後タップ動作を切り替える
orderIndicatorView.SetIndicate(false, false);
orderIndicatorView.TappedPhone
.ThrottleFirst(TimeSpan.FromSeconds(1f))
.Subscribe(__ =>
{
BulkOrderShowDialogWithSetup();
}).AddTo(this);
}).AddTo(this); }).AddTo(this);
}
} }
private void BulkOrderShowDialogWithSetup() private void BulkOrderShowDialogWithSetup()