カスタマイズ機能長押し対応

This commit is contained in:
kimura 2022-05-19 15:07:46 +09:00
parent 7430e815af
commit fe48169373
1 changed files with 38 additions and 19 deletions

View File

@ -1,5 +1,6 @@
using System; using System;
using UniRx; using UniRx;
using UniRx.Triggers;
using UnityEngine; using UnityEngine;
using UnityEngine.UI; using UnityEngine.UI;
@ -24,8 +25,8 @@ namespace MyGame.Scenes.marketing.Scripts
[SerializeField] private Text unlockLevelText; [SerializeField] private Text unlockLevelText;
[SerializeField] private Text priceText; [SerializeField] private Text priceText;
[SerializeField] private Transform iconTarget; [SerializeField] private Transform iconTarget;
float pressTime = .5f;
private IObservable<Unit> ClickObservable => button.OnClickAsObservable().TakeUntilDestroy(this);
public IObservable<Unit> PurchaseObservable => purchaseSubject; public IObservable<Unit> PurchaseObservable => purchaseSubject;
private readonly Subject<Unit> purchaseSubject = new Subject<Unit>(); private readonly Subject<Unit> purchaseSubject = new Subject<Unit>();
public IObservable<Unit> SelectObservable => selectSubject; public IObservable<Unit> SelectObservable => selectSubject;
@ -49,25 +50,43 @@ namespace MyGame.Scenes.marketing.Scripts
selectedFrameObject.SetActive(state == ShopCustomizeItemState.Selected); selectedFrameObject.SetActive(state == ShopCustomizeItemState.Selected);
unselectedObject.SetActive(state == ShopCustomizeItemState.Purchased); unselectedObject.SetActive(state == ShopCustomizeItemState.Purchased);
}).AddTo(this); }).AddTo(this);
ClickObservable.ThrottleFirst(TimeSpan.FromSeconds(.2f)).Subscribe(_ =>
{ button.OnPointerDownAsObservable()
switch (itemState.Value) .Select(_ =>
Observable.Amb(
Observable.Timer(TimeSpan.FromSeconds(pressTime)).Select(x => true),
button.OnPointerUpAsObservable().Select(x => false))
)
.Switch()
.Subscribe(longPress =>
{ {
case ShopCustomizeItemState.Lock: if (longPress)
break; {
case ShopCustomizeItemState.Unlock: if (itemState.Value == ShopCustomizeItemState.Purchased)
purchaseSubject.OnNext(Unit.Default); {
break; detailSubject.OnNext(Unit.Default);
case ShopCustomizeItemState.Purchased: }
selectSubject.OnNext(Unit.Default); }
break; else
case ShopCustomizeItemState.Selected: {
detailSubject.OnNext(Unit.Default); switch (itemState.Value)
break; {
default: case ShopCustomizeItemState.Lock:
throw new ArgumentOutOfRangeException(); break;
} case ShopCustomizeItemState.Unlock:
}).AddTo(this); purchaseSubject.OnNext(Unit.Default);
break;
case ShopCustomizeItemState.Purchased:
selectSubject.OnNext(Unit.Default);
break;
case ShopCustomizeItemState.Selected:
detailSubject.OnNext(Unit.Default);
break;
default:
throw new ArgumentOutOfRangeException();
}
}
}).AddTo(this);
} }
public void SetState(ShopCustomizeItemState state) public void SetState(ShopCustomizeItemState state)