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); }
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)); }