Esempio n. 1
0
        private protected (_CurveNode <T> A, _CurveNode <T> B, float Amount) FindSample(float offset)
        {
            if (_Keys.Count == 0)
            {
                return(default(_CurveNode <T>), default(_CurveNode <T>), 0);
            }

            var(keyA, keyB, amount) = CurveSampler.FindRangeContainingOffset(_Keys.Keys, offset);

            return(_Keys[keyA], _Keys[keyB], amount);
        }
Esempio n. 2
0
        /// <summary>
        /// Sets the outgoing tangent to an existing point.
        /// </summary>
        /// <param name="offset">The offset of the existing point.</param>
        /// <param name="tangent">The tangent value.</param>
        public void SetOutgoingTangent(float offset, T tangent)
        {
            Guard.IsTrue(_Keys.ContainsKey(offset), nameof(offset));

            tangent = CloneValue(tangent);

            var(keyA, keyB, _) = CurveSampler.FindRangeContainingOffset(_Keys.Keys, offset);

            if (keyA == keyB)
            {
                var a = _Keys[keyA];

                a.Degree          = 3;
                a.OutgoingTangent = tangent;

                _Keys[keyA] = a;
            }
            else
            {
                var a = _Keys[keyA];
                var b = _Keys[keyB];

                if (keyA != keyB)
                {
                    if (a.Degree == 1)
                    {
                        b.IncomingTangent = GetTangent(a.Point, b.Point);
                    }
                    _Keys[keyB] = b;
                }

                a.Degree = 3;

                a.OutgoingTangent = tangent;

                _Keys[keyA] = a;
            }
        }
Esempio n. 3
0
        /// <summary>
        /// Sets the incoming tangent to an existing point.
        /// </summary>
        /// <param name="offset">The offset of the existing point.</param>
        /// <param name="tangent">The tangent value.</param>
        public void SetIncomingTangent(float offset, T tangent)
        {
            Guard.IsTrue(_Keys.ContainsKey(offset), nameof(offset));

            offset -= float.Epsilon;

            var(keyA, keyB, _) = CurveSampler.FindRangeContainingOffset(_Keys.Keys, offset);

            var a = _Keys[keyA];
            var b = _Keys[keyB];

            if (a.Degree == 1)
            {
                a.OutgoingTangent = GetTangent(a.Point, b.Point);
            }

            a.Degree = 3;

            b.IncomingTangent = tangent;

            _Keys[keyA] = a;
            _Keys[keyB] = b;
        }