商品が無い場合、宣伝ボタンを非表示にする処理を追加

This commit is contained in:
kimura 2021-11-22 13:56:24 +09:00
parent a614121390
commit 4d787b7c8e
1 changed files with 57 additions and 47 deletions

View File

@ -25,9 +25,11 @@ public class MarketManager : MonoBehaviour
List<ProductData> productDataList; List<ProductData> productDataList;
private readonly Subject<int> resetRefreshTimer = new Subject<int>(); private readonly Subject<int> resetRefreshTimer = new Subject<int>();
private readonly CompositeDisposable ShopClosedCompositeDisposable = new CompositeDisposable();
private void Start() private void Start()
{ {
ShopClosedCompositeDisposable.AddTo(this);
resetRefreshTimer.AddTo(this); resetRefreshTimer.AddTo(this);
market = Market.Instance; market = Market.Instance;
@ -46,26 +48,25 @@ public class MarketManager : MonoBehaviour
var controller = market.SetTutorialCustomer(); var controller = market.SetTutorialCustomer();
walkerMask.SetTargetArrow(controller.transform); walkerMask.SetTargetArrow(controller.transform);
controller.State controller.State
.Where(x => x == CustomerState.Wait) .FirstOrDefault(x => x == CustomerState.Wait)
.Take(1) .Subscribe(_ => { }, () =>
.Subscribe(state => { }, () =>
{ {
walkerMask.SetArrowActive(false); walkerMask.SetArrowActive(false);
}).AddTo(controller).AddTo(this); }).AddTo(controller).AddTo(this);
walkerMask.SetTargetArrow(controller.transform);
controller.State controller.State
.Where(x => x == CustomerState.EatingLeave) .FirstOrDefault(x => x == CustomerState.EatingLeave)
.Delay(TimeSpan.FromSeconds(3f)) .Delay(TimeSpan.FromSeconds(3f))
.Take(1) .Subscribe(_ => { }, () =>
.Subscribe(_ =>
{ {
// チュートリアル終了 // チュートリアル終了
gameData.FinishTutorial(); gameData.FinishTutorial();
GameDataManager.SaveGameData(); GameDataManager.SaveGameData();
walkerMask.gameObject.SetActive(false); walkerMask.gameObject.SetActive(false);
resetRefreshTimer.OnNext((int) DateTime.FromBinary(gameData.increaseCustomerTime).Subtract(DateTime.UtcNow).TotalSeconds); resetRefreshTimer.OnNext((int) DateTime.FromBinary(gameData.increaseCustomerTime).Subtract(DateTime.UtcNow).TotalSeconds);
rewardButtonView.gameObject.SetActive(true); TutorialManager.Instance.ShowTutorialConversation(12, () =>
TutorialManager.Instance.ShowTutorialConversation(12); {
SetShopView(market.CurrentShopState.Value);
});
}).AddTo(controller).AddTo(this); }).AddTo(controller).AddTo(this);
}); });
} }
@ -218,45 +219,54 @@ public class MarketManager : MonoBehaviour
}).AddTo(this); }).AddTo(this);
// 開閉店 // 開閉店
CompositeDisposable shopStateCompositeDisposable = new CompositeDisposable(); market.CurrentShopState
shopStateCompositeDisposable.AddTo(this); .Where(_ => !gameData.isFirstPlay)
market.CurrentShopState.Subscribe(state => .Subscribe(state =>
{
shopStateCompositeDisposable.Clear();
switch (state)
{ {
case ShopState.Open: SetShopView(state);
BrotherPinkView.Instance.SetNormal(); }).AddTo(this);
closeSign.SetActive(false); }
break;
case ShopState.Busy: private void SetShopView(ShopState state)
break; {
case ShopState.Close: ShopClosedCompositeDisposable.Clear();
if (market.CustomerList.Count(x => x.State.Value == CustomerState.Order) == 0) switch (state)
{ {
BrotherPinkView.Instance.SetSleepy(); case ShopState.Open:
closeSign.SetActive(true); // 宣伝ボタン表示
} rewardButtonView.gameObject.SetActive(true);
else BrotherPinkView.Instance.SetNormal();
{ closeSign.SetActive(false);
// お客さんがいなくなったあと、閉店の看板を出す break;
Observable.CombineLatest( case ShopState.Busy:
market.CustomerList break;
.Select(x => x.State) case ShopState.Close:
.Where(x => x.Value == CustomerState.Order)) // 宣伝ボタン非表示
.FirstOrDefault(states => states.Count(x => x == CustomerState.Order) == 0) rewardButtonView.gameObject.SetActive(false);
.Delay(TimeSpan.FromSeconds(2f)) if (market.CustomerList.Count(x => x.State.Value == CustomerState.Order) == 0)
.Subscribe(_ => {
{ BrotherPinkView.Instance.SetSleepy();
BrotherPinkView.Instance.SetSleepy(); closeSign.SetActive(true);
closeSign.SetActive(true); }
}).AddTo(shopStateCompositeDisposable); else
} {
break; // お客さんがいなくなったあと、閉店の看板を出す
default: Observable.CombineLatest(
throw new ArgumentOutOfRangeException(nameof(state), state, null); market.CustomerList
} .Select(x => x.State)
}).AddTo(this); .Where(x => x.Value == CustomerState.Order))
.FirstOrDefault(states => states.Count(x => x == CustomerState.Order) == 0)
.Delay(TimeSpan.FromSeconds(2f))
.Subscribe(_ =>
{
BrotherPinkView.Instance.SetSleepy();
closeSign.SetActive(true);
}).AddTo(ShopClosedCompositeDisposable);
}
break;
default:
throw new ArgumentOutOfRangeException(nameof(state), state, null);
}
} }
private void CoinEffect(int count) private void CoinEffect(int count)