示例#1
0
        public static List <CoinState> GetCoinStates(int rngIndex, float x, float y, float z)
        {
            int                   offset       = 91;
            CoinObject            lakitu       = CoinObject.Lakitu;
            List <CoinTrajectory> trajectories = lakitu.CalculateCoinTrajectories(rngIndex + offset);
            List <CoinState>      states       = trajectories.ConvertAll(trajectory =>
            {
                (double xSpeed, double zSpeed) = MoreMath.GetComponentsFromVector(
                    trajectory.HSpeed, MoreMath.TruncateToMultipleOf16(trajectory.Angle));
                return(new CoinState(
                           x, y, z,
                           (float)xSpeed, (float)trajectory.VSpeed, (float)zSpeed,
                           (float)trajectory.HSpeed, trajectory.Angle));
            });

            return(states);
        }
示例#2
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));
            }