コード例 #1
0
 void Start()
 {
     hpIndicator.Initialize();
     floatValue
     .Select <float, float>(Mathf.Clamp01)
     .Throttle(TimeSpan.FromSeconds(0.5F))
     .Subscribe(value => hpIndicator.AnimateValue(value))
     .AddTo(gameObject);
 }
コード例 #2
0
ファイル: PowerGauge.cs プロジェクト: john95206/OneWeek
        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
        }
コード例 #3
0
 void Start()
 {
     floatValue.Select <float, float>(Mathf.Clamp01).Subscribe(hpBar.SetRate).AddTo(gameObject);
 }