商品管理View追加
This commit is contained in:
parent
55d4f541f5
commit
3099d51483
|
|
@ -0,0 +1,104 @@
|
|||
using System;
|
||||
using UniRx;
|
||||
using UniRx.Triggers;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
|
||||
public enum TankState
|
||||
{
|
||||
Unavailable,
|
||||
Lock,
|
||||
Unlock,
|
||||
Selected,
|
||||
}
|
||||
public class ProductManagementTankView : MonoBehaviour
|
||||
{
|
||||
[SerializeField] private GameObject selectedIndicateObject;
|
||||
[SerializeField] private GameObject tankObject;
|
||||
[SerializeField] private Image popcornImage;
|
||||
[SerializeField] private Image packageImage;
|
||||
[SerializeField] private Text tankNumber;
|
||||
[SerializeField] private Text tankStock;
|
||||
private string tankStockFormat = "{0}/{1} 個";
|
||||
private string tankEmptyText = "空っぽ";
|
||||
[SerializeField] private TankRarityView rarityView;
|
||||
[SerializeField] private Button detailButton;
|
||||
[SerializeField] private GameObject arrow;
|
||||
// 未購入
|
||||
[SerializeField] private GameObject lockedTankObject;
|
||||
[SerializeField] private Text lockedTankNumber;
|
||||
[SerializeField] private Text price;
|
||||
[SerializeField] private Button purchaseButton;
|
||||
private int tankNumberInt;
|
||||
private readonly BoolReactiveProperty isEmply = new BoolReactiveProperty();
|
||||
private readonly BoolReactiveProperty detailButtonActive = new BoolReactiveProperty();
|
||||
public int TankNumber => tankNumberInt;
|
||||
|
||||
private readonly ReactiveProperty<TankState> state = new ReactiveProperty<TankState>();
|
||||
public IReadOnlyReactiveProperty<TankState> State => state;
|
||||
public IObservable<Unit> DetailButtonObservable => detailButton.OnClickAsObservable().TakeUntilDestroy(this);
|
||||
public IObservable<Unit> PurchaseButtonObservable => purchaseButton.OnClickAsObservable().TakeUntilDestroy(this);
|
||||
public IObservable<Unit> TankClickObservable { get; private set; }
|
||||
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
var eventTrigger = gameObject.AddComponent<ObservableEventTrigger>();
|
||||
TankClickObservable = eventTrigger.OnPointerClickAsObservable().TakeUntilDestroy(this).AsUnitObservable();
|
||||
}
|
||||
|
||||
private void Start()
|
||||
{
|
||||
isEmply.AddTo(this);
|
||||
detailButtonActive.AddTo(this);
|
||||
state.Subscribe(x =>
|
||||
{
|
||||
tankObject.SetActive(x != TankState.Lock && x != TankState.Unavailable);
|
||||
lockedTankObject.SetActive(x == TankState.Lock || x == TankState.Unavailable);
|
||||
purchaseButton.gameObject.SetActive(x == TankState.Lock);
|
||||
selectedIndicateObject.SetActive(x == TankState.Selected);
|
||||
}).AddTo(this);
|
||||
isEmply.Subscribe(active =>
|
||||
{
|
||||
packageImage.gameObject.SetActive(!active);
|
||||
popcornImage.gameObject.SetActive(!active);
|
||||
rarityView.gameObject.SetActive(!active);
|
||||
}).AddTo(this);
|
||||
isEmply.CombineLatest(detailButtonActive, (b, b1) => !b && b1)
|
||||
.Subscribe(active =>
|
||||
{
|
||||
detailButton.gameObject.SetActive(active);
|
||||
}).AddTo(this);
|
||||
}
|
||||
|
||||
public void Initialize(int number, int tankPrice)
|
||||
{
|
||||
state.Value = TankState.Unavailable;
|
||||
tankNumberInt = number;
|
||||
tankNumber.text = $"{number}";
|
||||
lockedTankNumber.text = $"{number}";
|
||||
price.text = $"{tankPrice}";
|
||||
}
|
||||
|
||||
public void SetData(StorageTank tank)
|
||||
{
|
||||
isEmply.Value = tank.Stock == 0;
|
||||
tankStock.text = isEmply.Value ? tankEmptyText : String.Format(tankStockFormat, tank.Stock, tank.Capacity);
|
||||
rarityView.SetHasRarity(tank.Stocks);
|
||||
}
|
||||
|
||||
public void SetState(TankState tankState)
|
||||
{
|
||||
state.Value = tankState;
|
||||
}
|
||||
|
||||
public void SetArrow(bool active)
|
||||
{
|
||||
arrow.SetActive(active);
|
||||
}
|
||||
|
||||
public void SetDetailButtonActive(bool active)
|
||||
{
|
||||
detailButtonActive.Value = active;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
fileFormatVersion: 2
|
||||
guid: cb86ab823f03425b97e7c977c5e65267
|
||||
timeCreated: 1631500410
|
||||
|
|
@ -0,0 +1,55 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using UniRx;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
|
||||
public enum ProductRefillMode
|
||||
{
|
||||
OneByOne,
|
||||
TankByTank,
|
||||
}
|
||||
public class ProductManagementView : MonoBehaviour
|
||||
{
|
||||
[SerializeField] private List<ProductManagementTankView> tankList = new List<ProductManagementTankView>();
|
||||
[SerializeField] private GameObject oneByOneOn;
|
||||
[SerializeField] private GameObject tankByTankOn;
|
||||
[SerializeField] private Button oneByOneOff;
|
||||
[SerializeField] private Button tankByTankOff;
|
||||
|
||||
public ReactiveProperty<ProductRefillMode> RefillType => refillType;
|
||||
private readonly ReactiveProperty<ProductRefillMode> refillType = new ReactiveProperty<ProductRefillMode>();
|
||||
private void Start()
|
||||
{
|
||||
refillType.AddTo(this);
|
||||
oneByOneOff.OnClickAsObservable().Select(_ => ProductRefillMode.OneByOne)
|
||||
.Merge(tankByTankOff.OnClickAsObservable().Select(_ => ProductRefillMode.TankByTank))
|
||||
.Subscribe(type =>
|
||||
{
|
||||
refillType.Value = type;
|
||||
}).AddTo(this);
|
||||
refillType.Subscribe(type =>
|
||||
{
|
||||
oneByOneOn.SetActive(type == ProductRefillMode.OneByOne);
|
||||
oneByOneOff.gameObject.SetActive(type != ProductRefillMode.OneByOne);
|
||||
tankByTankOn.SetActive(type == ProductRefillMode.TankByTank);
|
||||
tankByTankOff.gameObject.SetActive(type != ProductRefillMode.TankByTank);
|
||||
}).AddTo(this);
|
||||
}
|
||||
|
||||
public List<ProductManagementTankView> SetTanks(List<int> priceList)
|
||||
{
|
||||
var i = 1;
|
||||
foreach (var tankView in tankList)
|
||||
{
|
||||
tankView.Initialize(i, priceList[i - 1]);
|
||||
i++;
|
||||
}
|
||||
return tankList;
|
||||
}
|
||||
|
||||
public void SetRefillType(ProductRefillMode mode)
|
||||
{
|
||||
refillType.Value = mode;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 6fb8a3338e924cbe9255939ad1ab6017
|
||||
timeCreated: 1631500384
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
|
||||
public class RarityStockView : MonoBehaviour
|
||||
{
|
||||
private static readonly string textFormat = "{0}×{1}個";
|
||||
[SerializeField] private Text normalText;
|
||||
[SerializeField] private ProductRarity rarity;
|
||||
public ProductRarity Rarity => rarity;
|
||||
|
||||
public void SetText(int price, int stock)
|
||||
{
|
||||
normalText.text = string.Format(textFormat, price, stock);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
fileFormatVersion: 2
|
||||
guid: b0dc9cb18f7548c6a51cf39c843c54ef
|
||||
timeCreated: 1631684472
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
|
||||
public class RaritySummaryView : MonoBehaviour
|
||||
{
|
||||
[SerializeField] private List<RarityStockView> rarityStockViews;
|
||||
|
||||
public void SetHasRarity(List<(ProductRarity rarity, int price, int stock)> dataList)
|
||||
{
|
||||
foreach (var data in dataList)
|
||||
{
|
||||
rarityStockViews.First(x => x.Rarity == data.rarity)?.SetText(data.price, data.stock);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 756a75c73f084205b9473c046ff47a94
|
||||
timeCreated: 1631632399
|
||||
|
|
@ -0,0 +1,47 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using UniRx;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
|
||||
public class TankDetailView : MonoBehaviour
|
||||
{
|
||||
public static readonly string TankDetailDataTag = "TankDetailData";
|
||||
private static readonly int OpenTrigger = Animator.StringToHash("OpenTrigger");
|
||||
private static readonly int CloseTrigger = Animator.StringToHash("CloseTrigger");
|
||||
private static readonly string totalStockFormat = "所持数:{0}";
|
||||
private static readonly string tankStockFormat = "タンク{0}:{1}";
|
||||
|
||||
[SerializeField] private Animator backgroundAnimator;
|
||||
[SerializeField] private Text tankNumber;
|
||||
[SerializeField] private Text totalStock;
|
||||
[SerializeField] private Text tankStock;
|
||||
[SerializeField] private Text price;
|
||||
[SerializeField] private Text name;
|
||||
[SerializeField] private Text text;
|
||||
[SerializeField] private Image popcornImage;
|
||||
[SerializeField] private RaritySummaryView raritySummaryView;
|
||||
[SerializeField] private Button closeButton;
|
||||
|
||||
private void Start()
|
||||
{
|
||||
var data = LocalCacheManager.Load<(int tankNum, int totalStock, StorageTank tankData, RecipeData recipeData, List<(ProductRarity rarity, int price, int stock)> raritySummaryData)>(TankDetailDataTag);
|
||||
closeButton.OnClickAsObservable().Subscribe(_ =>
|
||||
{
|
||||
transform.SetLocalScale(0);
|
||||
backgroundAnimator.SetTrigger(CloseTrigger);
|
||||
this.CallWaitForSeconds(.25f, () =>
|
||||
{
|
||||
TransitionManager.Instance.UnloadScene(GameScenes.PopcornDescription);
|
||||
});
|
||||
}).AddTo(this);
|
||||
|
||||
tankNumber.text = $"{data.tankNum}";
|
||||
totalStock.text = string.Format(totalStockFormat, data.totalStock);
|
||||
tankStock.text = string.Format(tankStockFormat, data.tankNum, data.tankData.Stock);
|
||||
price.text = $"{data.recipeData.Price}";
|
||||
name.text = $"{data.recipeData.Name}";
|
||||
text.text = $"";
|
||||
raritySummaryView.SetHasRarity(data.raritySummaryData);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 503f73b9937449a58919451f7b823757
|
||||
timeCreated: 1631631272
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using UnityEngine;
|
||||
|
||||
public class TankRarityView : MonoBehaviour
|
||||
{
|
||||
[SerializeField] private GameObject normalOn;
|
||||
[SerializeField] private GameObject normalOff;
|
||||
[SerializeField] private GameObject yellowOn;
|
||||
[SerializeField] private GameObject yellowOff;
|
||||
[SerializeField] private GameObject copperOn;
|
||||
[SerializeField] private GameObject copperOff;
|
||||
[SerializeField] private GameObject silverOn;
|
||||
[SerializeField] private GameObject silverOff;
|
||||
[SerializeField] private GameObject goldOn;
|
||||
[SerializeField] private GameObject goldOff;
|
||||
[SerializeField] private GameObject rainbowOn;
|
||||
[SerializeField] private GameObject rainbowOff;
|
||||
|
||||
public void SetHasRarity(List<ProductStockData> stocks)
|
||||
{
|
||||
var rarities = stocks.Where(x => x.Stock > 0).Select(x => x.Rarity).ToList();
|
||||
normalOn.SetActive(rarities.Contains(ProductRarity.Normal));
|
||||
normalOff.SetActive(!rarities.Contains(ProductRarity.Normal));
|
||||
yellowOn.SetActive(rarities.Contains(ProductRarity.Yellow));
|
||||
yellowOff.SetActive(!rarities.Contains(ProductRarity.Yellow));
|
||||
copperOn.SetActive(rarities.Contains(ProductRarity.Copper));
|
||||
copperOff.SetActive(!rarities.Contains(ProductRarity.Copper));
|
||||
silverOn.SetActive(rarities.Contains(ProductRarity.Silver));
|
||||
silverOff.SetActive(!rarities.Contains(ProductRarity.Silver));
|
||||
goldOn.SetActive(rarities.Contains(ProductRarity.Gold));
|
||||
goldOff.SetActive(!rarities.Contains(ProductRarity.Gold));
|
||||
rainbowOn.SetActive(rarities.Contains(ProductRarity.Rainbow));
|
||||
rainbowOff.SetActive(!rarities.Contains(ProductRarity.Rainbow));
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
fileFormatVersion: 2
|
||||
guid: bb57f12f265d434da0a003594c0d20d1
|
||||
timeCreated: 1631509426
|
||||
Loading…
Reference in New Issue