Esempio n. 1
0
    private void OnSliderValueChanged(ESpliterSlider slider)
    {
        if (!_ignoreSliderChanges)
        {
            _ignoreSliderChanges = true;

            slider.Value.Value = Math.Round(slider.Value.Value, 2, MidpointRounding.AwayFromZero);
            if (slider.Value.Value == slider.oldValue)
            {
                _ignoreSliderChanges = false;
                return;
            }

            slider.UpdateFormula(Formula);

            double sign  = 1;
            double delta = Math.Round(slider.oldValue - slider.Value.Value, 2);
            if (delta < 0)
            {
                sign = -1;
            }
            slider.oldValue = slider.Value.Value;

            int  steps = (int)Math.Abs(delta / 0.01);
            bool _found;
            while (steps > 0)
            {
                _found = false;
                for (int j = 0; j < Values.Count; j++)
                {
                    if (((sign == -1 && Values[j].Value.Value > 0) || (sign == 1 && Values[j].Value.Value < 1)) && Node._TargetConnections[j] != slider.Edge)
                    {
                        Values[j].Value.Value = Math.Round(Values[j].Value.Value + (0.01 * sign), 2);
                        Values[j].oldValue    = Values[j].Value.Value;
                        Values[j].UpdateFormula(Formula);
                        _found = true;
                        steps--;
                        if (steps == 0)
                        {
                            break;
                        }
                    }
                }
                if (_found == false)
                {
                    break;
                }
            }

            _ignoreSliderChanges = false;
        }
    }
Esempio n. 2
0
    void OnEnable()
    {
        if (Node == null)
        {
            Node = GetComponent <ENode>();
        }

        if (Values.Count == 0)
        {
            Values = new List <ESpliterSlider>();
            double count      = Node._TargetConnections.Count;
            double startValue = 1;
            double splitValue = Math.Round(startValue / count, 2, MidpointRounding.AwayFromZero);
            double remainder  = ((100 * startValue) % count) / 100;

            _ignoreSliderChanges = true;
            for (int i = 0; i < count; i++)
            {
                ESpliterSlider slider = new ESpliterSlider(Node._TargetConnections[i]);

                if (i == 0)
                {
                    slider.Value.Value = splitValue + remainder;
                }
                else
                {
                    slider.Value.Value = splitValue;
                }

                slider.oldValue = slider.Value.Value;
                startValue     -= splitValue;
                slider.Value.Subscribe(_ => OnSliderValueChanged(slider)).AddTo(this);
                Values.Add(slider);
            }
            _ignoreSliderChanges = false;
        }
        else
        {
            _ignoreSliderChanges = true;
            for (int i = 0; i < Values.Count; i++)
            {
                ESpliterSlider ess = Values[i];
                ess.Edge = Node._TargetConnections[i];
                ess.Value.Subscribe(_ => OnSliderValueChanged(ess)).AddTo(this);
            }
            _ignoreSliderChanges = false;
        }
    }