ハートがゲージ加算方法変更/ ハートゲージ満タン時に通知するFulledHeartを追加
This commit is contained in:
		
							parent
							
								
									63517fe9af
								
							
						
					
					
						commit
						4403ab4598
					
				|  | @ -3,6 +3,7 @@ using System.Collections.Generic; | |||
| using System.Linq; | ||||
| using TMPro; | ||||
| using UniRx; | ||||
| using UniRx.Triggers; | ||||
| using UnityEngine; | ||||
| using UnityEngine.UI; | ||||
| 
 | ||||
|  | @ -11,14 +12,17 @@ public class HeartMeter : SingletonMonoBehaviour<HeartMeter> | |||
|     [SerializeField] private Slider slider; | ||||
|     [SerializeField] private TextMeshProUGUI heartLevel; | ||||
|     [SerializeField] private GameObject maxObject; | ||||
|     [SerializeField] private float duration = .5f; | ||||
| 
 | ||||
|     private Coroutine coroutine; | ||||
|     private List<ShopLevelData> shopLevelList = new List<ShopLevelData>(); | ||||
|     private int currentHeartCount; | ||||
|     private int maxLevel; | ||||
|     private readonly CompositeDisposable compositeDisposable = new CompositeDisposable(); | ||||
|     private readonly ReactiveProperty<float> viewHeartCount = new ReactiveProperty<float>(); | ||||
|     private readonly ReactiveProperty<int> shopLevel = new ReactiveProperty<int>(); | ||||
|     private CompositeDisposable compositeDisposable = new CompositeDisposable(); | ||||
|     private readonly ReactiveProperty<bool> fulledHeart = new ReactiveProperty<bool>(); | ||||
|     public IObservable<bool> FulledHeart => fulledHeart.DistinctUntilChanged(); | ||||
| 
 | ||||
|     private float minHeart; | ||||
|     private float maxHeart; | ||||
|  | @ -32,7 +36,11 @@ public class HeartMeter : SingletonMonoBehaviour<HeartMeter> | |||
|     { | ||||
|         shopLevel.AddTo(this); | ||||
|         viewHeartCount.AddTo(this); | ||||
|         fulledHeart.AddTo(this); | ||||
|         compositeDisposable.AddTo(this); | ||||
| #if UNITY_EDITOR | ||||
|         fulledHeart.Subscribe(x => { Debug.Log($"fulled:{x}"); }); | ||||
| #endif | ||||
|     } | ||||
| 
 | ||||
|     public void Initialize(int newShopLevel = 0, int newHeartCount = 0) | ||||
|  | @ -57,7 +65,7 @@ public class HeartMeter : SingletonMonoBehaviour<HeartMeter> | |||
|         SetShopLevel(newShopLevel); | ||||
|     } | ||||
|      | ||||
|     public void SetHeart(int heartCount) | ||||
|     private void SetHeart(int heartCount) | ||||
|     { | ||||
|         currentHeartCount = heartCount; | ||||
|         viewHeartCount.SetValueAndForceNotify(heartCount); | ||||
|  | @ -75,6 +83,7 @@ public class HeartMeter : SingletonMonoBehaviour<HeartMeter> | |||
|         maxHeart = shopLevelList.FirstOrDefault(data => data.shopLevel == level + 1)?.heart ?? minHeart; | ||||
|         if (animate) | ||||
|         { | ||||
|             fulledHeart.Value = false; | ||||
|             var tmpCount = currentHeartCount - (int)minHeart; | ||||
|             SetHeart((int)minHeart); | ||||
|             AddHeart(tmpCount); | ||||
|  | @ -82,19 +91,27 @@ public class HeartMeter : SingletonMonoBehaviour<HeartMeter> | |||
|         else | ||||
|         { | ||||
|             viewHeartCount.SetValueAndForceNotify(currentHeartCount); | ||||
|             fulledHeart.Value = currentHeartCount >= maxHeart && shopLevel.Value < maxLevel; | ||||
|         } | ||||
|     } | ||||
|     public void AddHeart(int value) | ||||
|     { | ||||
|         this.SafeStopCoroutine(coroutine); | ||||
|         currentHeartCount += value; | ||||
|         coroutine = this.CallWaitForSeconds(1f, () => | ||||
|         coroutine = this.CallWaitForSeconds(duration, () => | ||||
|         { | ||||
|             SetHeart(currentHeartCount); | ||||
|         }); | ||||
|         this.CallLerp(1f, f => | ||||
|         { | ||||
|             viewHeartCount.Value = Mathf.Min(currentHeartCount, viewHeartCount.Value + value * f); | ||||
|         }); | ||||
|         var fixValue = Mathf.Min(value, maxHeart); | ||||
|         this.UpdateAsObservable() | ||||
|             .Select(_ => Time.deltaTime / duration) | ||||
|             .Take(TimeSpan.FromSeconds(duration)) | ||||
|             .Subscribe(t => | ||||
|             { | ||||
|                 viewHeartCount.Value += fixValue * t; | ||||
|             }, () => | ||||
|             { | ||||
|                 fulledHeart.Value = currentHeartCount >= maxHeart && shopLevel.Value < maxLevel; | ||||
|             }).AddTo(this); | ||||
|     } | ||||
| } | ||||
		Loading…
	
		Reference in New Issue