商品管理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