Esempio n. 1
0
        // Rotates radian to targetRadian, taking the shortest distance. Lerp argument is amount to rotate by.
        // Note: lerp of 0.05 may be a good starting point.
        public static FInt RotateTo(FInt radian, FInt targetRadian, FInt lerp)
        {
            // Return Target Radian if the value has been reached.
            if (FInt.Abs(targetRadian - radian) <= lerp || FInt.Abs(targetRadian - radian) >= (FInt.PI * 2 - lerp))
            {
                return(targetRadian);
            }

            // Clamp / Wrap Target Radian as needed.
            if (FInt.Abs(targetRadian - radian) > FInt.PI)
            {
                if (targetRadian < radian)
                {
                    targetRadian += FInt.PI * 2;
                }
                else
                {
                    targetRadian -= FInt.PI * 2;
                }
            }

            // Return Radian Rotation
            if (targetRadian > radian)
            {
                radian += lerp;
            }
            else
            {
                radian -= lerp;
            }

            return(radian);
        }
Esempio n. 2
0
        // Rotates degree to targetDegree (between 0 and 360), taking the shortest distance. Lerp argument is amount to rotate by.
        // Note: Lerp of 0.5 may be good place to start.
        public static FInt RotateTo(FInt degree, FInt targetDegree, FInt lerp)
        {
            FInt diff = targetDegree - degree + 360;

            // Return Target Degree if it's been matched.
            if (FInt.Abs(diff) <= lerp)
            {
                return(targetDegree);
            }

            // Otherwise, return next step:
            if (diff > 0)
            {
                degree += lerp;
            }
            else
            {
                degree -= lerp;
            }

            return(FPDegrees.Normalize(degree));
        }
Esempio n. 3
0
        //// Calculate a smooth interpolation percent between the `min` and `max`
        //static getSmoothStepPercent( value: number, min: number, max: number ): number {
        //	value = (value - min) / (max - min);
        //	return value * value * (3 - 2 * value);
        //}

        //static getSmootherStepPercent( value: number, min: number, max: number ): number {
        //	value = Math.max(0, Math.min(1, (value - min) / (max - min)));
        //	return value * value * value * (value * (value * 6 - 15) + 10);
        //}

        // Ease a value back and forth between two values.
        public static FInt EaseBothDir(FInt val1, FInt val2, FInt weight)
        {
            return(val1 + FInt.Abs(FInt.Sin((weight + FInt.Create(0.75)) * FInt.PI * 2) / 2 + FInt.Create(0.5)) * (val2 - val1));
        }