Пример #1
0
            public CoinState GetNextState()
            {
                float newXSpeed = (float)MoreMath.MoveNumberTowards(XSpeed, 0, 0.001f * XSpeed * XSpeed);
                float newZSpeed = (float)MoreMath.MoveNumberTowards(ZSpeed, 0, 0.001f * ZSpeed * ZSpeed);
                float newHSpeed = (float)Math.Sqrt(newXSpeed * newXSpeed + newZSpeed * newZSpeed);
                float newYSpeed = Math.Max(-78, YSpeed - 4);

                float newX = X + newXSpeed;
                float newZ = Z + newZSpeed;
                float newY = Y + newYSpeed;

                ushort newAngle = Angle;

                (double newXSpeed2, double newZSpeed2) = MoreMath.GetComponentsFromVector(
                    newHSpeed, MoreMath.TruncateToMultipleOf16(newAngle));
                newXSpeed = (float)newXSpeed2;
                newZSpeed = (float)newZSpeed2;

                return(new CoinState(
                           newX, newY, newZ,
                           newXSpeed, newYSpeed, newZSpeed,
                           newHSpeed, newAngle));
            }