購入ボタンの挙動修正

This commit is contained in:
kimura 2021-09-10 14:33:55 +09:00
parent c1eb72cb26
commit a23e3e5c72
4 changed files with 24 additions and 14 deletions

View File

@ -242,6 +242,8 @@ MonoBehaviour:
onObject: {fileID: 8536603422629144349} onObject: {fileID: 8536603422629144349}
offObject: {fileID: 8536603424418812070} offObject: {fileID: 8536603424418812070}
soldOutObject: {fileID: 8536603424566114136} soldOutObject: {fileID: 8536603424566114136}
learnedObject: {fileID: 8536603424476639146}
purchasedObject: {fileID: 1735230268650569057}
--- !u!114 &1342298367473717200 --- !u!114 &1342298367473717200
MonoBehaviour: MonoBehaviour:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0

View File

@ -5,15 +5,18 @@ using UnityEngine.UI;
public class ShopItemPurchaseButton : MonoBehaviour public class ShopItemPurchaseButton : MonoBehaviour
{ {
private ShopItemType itemType;
[SerializeField] private Button purchaseButton; [SerializeField] private Button purchaseButton;
[SerializeField] private GameObject onObject; [SerializeField] private GameObject onObject;
[SerializeField] private GameObject offObject; [SerializeField] private GameObject offObject;
[SerializeField] private GameObject soldOutObject; [SerializeField] private GameObject soldOutObject;
[SerializeField] private GameObject learnedObject;
[SerializeField] private GameObject purchasedObject;
private ShopItemType itemType;
private bool isPurchased;
public IObservable<Unit> ClickObservable => purchaseButton.OnClickAsObservable().TakeUntilDestroy(this); public IObservable<Unit> ClickObservable => purchaseButton.OnClickAsObservable().TakeUntilDestroy(this);
public void SetItemType(ShopItemType type) public void SetItemType(ItemCategory category, ShopItemType type)
{ {
itemType = type; itemType = type;
switch (type) switch (type)
@ -22,13 +25,19 @@ public class ShopItemPurchaseButton : MonoBehaviour
soldOutObject.SetActive(false); soldOutObject.SetActive(false);
break; break;
case ShopItemType.NonConsumable: case ShopItemType.NonConsumable:
offObject.SetActive(false); learnedObject.SetActive(category == ItemCategory.Recipe);
purchasedObject.SetActive(category == ItemCategory.Pan);
break; break;
default: default:
throw new ArgumentOutOfRangeException(nameof(type), type, null); throw new ArgumentOutOfRangeException(nameof(type), type, null);
} }
} }
public void SetItemPurchased(bool active)
{
isPurchased = active;
}
public void SetButtonActive(bool active) public void SetButtonActive(bool active)
{ {
switch (itemType) switch (itemType)
@ -38,8 +47,9 @@ public class ShopItemPurchaseButton : MonoBehaviour
offObject.SetActive(!active); offObject.SetActive(!active);
break; break;
case ShopItemType.NonConsumable: case ShopItemType.NonConsumable:
onObject.SetActive(active); onObject.SetActive(active && !isPurchased);
soldOutObject.SetActive(!active); offObject.SetActive(!active && !isPurchased);
soldOutObject.SetActive(isPurchased);
break; break;
default: default:
throw new ArgumentOutOfRangeException(); throw new ArgumentOutOfRangeException();

View File

@ -23,12 +23,13 @@ public class ShopItemView : MonoBehaviour
{ {
stockCount.transform.parent.gameObject.SetActive(false); stockCount.transform.parent.gameObject.SetActive(false);
} }
purchaseButton.SetItemType(shopData.ConsumeType); purchaseButton.SetItemType(shopData.Category, shopData.ConsumeType);
} }
public void SetStockCount(int stock) public void SetStockCount(int stock)
{ {
stockCount.text = $"{stock}"; stockCount.text = $"{stock}";
purchaseButton.SetItemPurchased(stock > 0);
} }
public void SetItemActive(bool active) public void SetItemActive(bool active)

View File

@ -25,16 +25,13 @@ public class Shopping : MonoBehaviour
// コインを監視して購入可能状態を切り替え // コインを監視して購入可能状態を切り替え
changeCoinSubject.Subscribe(ownCoin => changeCoinSubject.Subscribe(ownCoin =>
{ {
if (shopData.ConsumeType == ShopItemType.NonConsumable && GetItemAmount(shopData) > 0) itemView.SetItemActive(shopData.price <= ownCoin);
{
itemView.SetItemActive(false);
return;
}
itemView.SetItemActive(shopData.price < ownCoin);
}).AddTo(this); }).AddTo(this);
// アイテム購入クリック購読 // アイテム購入クリック購読
itemView.PurchaseButtonObservable.Subscribe(_ => itemView.PurchaseButtonObservable
{ .Where(_ => shopData.price <= CoinManager.Instance.OwnCoin)
.Subscribe(_ =>
{
// アイテムを増やす // アイテムを増やす
AddItem(shopData); AddItem(shopData);
itemView.SetStockCount(GetItemAmount(shopData)); itemView.SetStockCount(GetItemAmount(shopData));