AlphaTab.Rendering.Staves.BarLayoutingInfo.CalculateSpringConstants C# (CSharp) Method

CalculateSpringConstants() public method

public CalculateSpringConstants ( ) : void
return void
        public void CalculateSpringConstants()
        {
            var sortedSprings = _timeSortedSprings = new FastList<Spring>();
            _xMin = 0f;
            foreach (var time in Springs)
            {
                var spring = Springs[time];
                sortedSprings.Add(spring);
                if (spring.SpringWidth < _xMin)
                {
                    _xMin = spring.SpringWidth;
                }
            }

            sortedSprings.Sort((a, b) =>
            {
                if (a.TimePosition < b.TimePosition)
                {
                    return -1;
                }
                if (a.TimePosition > b.TimePosition)
                {
                    return 1;
                }
                return 0;
            });

            var totalSpringConstant = 0f;
            for (int i = 0; i < sortedSprings.Count; i++)
            {
                var currentSpring = sortedSprings[i];
                int duration;
                if (i == sortedSprings.Count - 1)
                {
                    duration = currentSpring.LongestDuration;
                }
                else
                {
                    var nextSpring = sortedSprings[i + 1];
                    duration = nextSpring.TimePosition - currentSpring.TimePosition;
                }

                currentSpring.SpringConstant = CalculateSpringConstant(currentSpring, duration);
                totalSpringConstant += 1 / currentSpring.SpringConstant;
            }
            TotalSpringConstant = 1 / totalSpringConstant;

            // calculate the force required to have at least the minimum size.
            for (int i = 0; i < sortedSprings.Count; i++)
            {
                var force = sortedSprings[i].SpringWidth * sortedSprings[i].SpringConstant;
                UpdateMinStretchForce(force);
            }
        }