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 static List <int> GetInGameAngles() { if (_inGameAngles == null) { _inGameAngles = new List <int>(); List <int> allAngles = Enumerable.Range(0, 65536).ToList(); foreach (int angle in allAngles) { (double x, double z) = MoreMath.GetComponentsFromVector(1, angle); int inGameAngle = InGameAngleTo(x, z); if (!_inGameAngles.Contains(inGameAngle)) { _inGameAngles.Add(inGameAngle); } } } return(new List <int>(_inGameAngles)); }
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)); }