void Start() { hpIndicator.Initialize(); floatValue .Select <float, float>(Mathf.Clamp01) .Throttle(TimeSpan.FromSeconds(0.5F)) .Subscribe(value => hpIndicator.AnimateValue(value)) .AddTo(gameObject); }
private void OnInitialized() { #region 推進力の追加 // ボタンを押したらRushScore加算 var onButtonDown = gameManager.InputProvider .OnButtonDown .Where(_ => gameManager.IsPlayable.Value) //.Do(x => Debug.Log($"Is ButtonDownable: {x}")) .Where(x => x) .Share(); onButtonDown .Subscribe(_ => { _rushScore.Value += 1 + RushBonus; //var value = _rushScore.Value + 1 + RushBonus; //_rushScore.Value = value > MaxPower ? MaxPower - 1 : value; }); // ホールド時間を加算 gameManager.InputProvider .OnHold .Where(x => gameManager.IsPlayable.Value) //.Do(x => Debug.Log($"Is Holdable: {x}")) .Where(x => x) .Subscribe(_ => { _holdFrame.Value += 1 + HoldBonus; }); // ボタン押してないときは減衰 Observable.IntervalFrame(1) .Where(_ => gameManager.IsPlayable.Value) .Where(_ => _currentPower.Value >= 0) .Subscribe(_ => _currentPower.Value -= 1) .AddTo(gameObject); gameManager.OnLounch .Subscribe(_ => { Observable.IntervalFrame(1) .Where(x => _currentPower.Value >= 0) .Subscribe(x => { _currentPower.Value -= 0.8f; }); }); #endregion #region ゲージ量(内部値)の反映 // 推進力を合算 Observable.CombineLatest(_rushScore, _holdFrame) .Select(x => x.Sum()) .Select(value => value / CurrentPuls.Value) .Subscribe(x => currentForce.Value = x); // Animation currentForce .Subscribe(force => { var power = gameManager.IsPlayable.Value ? Mathf.Min(_currentPower.Value + force, MaxPower * 2.5f) : _currentPower.Value + force; DOTween .To( () => _currentPower.Value, value => _currentPower.Value = value, power, gaugeDureation); }); #endregion #region ゲージのUIへの反映 var currentGauge = _currentPower // ゲージの最大値を超えないようにする .Select(power => Mathf.Clamp(power / MaxPower, 0.0f, 1.0f)) .Do(value => _currentGaugeScale.Value = value) .Share(); currentGauge .Subscribe(power => { var gauge = gameManager.UiProvider.Gauge; gauge.transform.localScale = new Vector3( gauge.transform.localScale.x, power, gauge.transform.localScale.z); if (power >= 1.0f) { gauge.color = Color.red; } else { gauge.color = Color.yellow; } }).AddTo(gameObject); currentGauge .Where(g => g >= 1.0f) .SelectMany(Observable.Timer(TimeSpan.FromSeconds(merginTime))) .TakeUntil(currentGauge.Where(g => g < 1.0f)) .RepeatUntilDestroy(gameObject) .Subscribe(_ => { _isReadyLaunch.OnNext(Unit.Default); }); #endregion }
void Start() { floatValue.Select <float, float>(Mathf.Clamp01).Subscribe(hpBar.SetRate).AddTo(gameObject); }