// Game Boy Advance library for Logic Machines F'05 // Version 6, November 16th, 2005 #ifndef __GBAMATH__ #define __GBAMATH__ typedef long real; #define REAL_SHIFT 10 #define REAL_SCALE 1024 #define REAL(n) ((n) * REAL_SCALE) #define INT(n) ((n) / REAL_SCALE) #define FRAC(n) ((n) & (REAL_SCALE-1)) #define FLOAT(n) ((float)(n) / REAL_SCALE) #define mulr(a, b) (((long long)(a) * (long long)(b)) >> REAL_SHIFT) #define divr(a, b) (((long long)(a) << REAL_SHIFT) / (long long)(b)) // all angles in gbamath are in degrees. hurray real sqrtr(real x); real asinr(real x); real absr(real x); real sinr(real a); real cosr(real a); typedef struct { real x, y; } realpoint; real GetDistanceBetweenPoints(realpoint *pointOne, realpoint *pointTwo); real GetAngleBetweenPoints(realpoint *pointOne, realpoint *pointTwo); real NormalizeAngle(real angle); real ChaseAngle(real targetAngle, real currentAngle, real degreesToRotate); real GetDeltaBetweenAngles(real angleOne, real angleTwo); typedef struct { real magnitude; real direction; real lastDirection; real cos, sin; } vector; void InitVector(vector *theVector); void MovePointUsingVector(realpoint *sourcePoint, vector *theVector); void AddVectors(vector *resultVector, vector *theVector); real GetXComponentOfVector(vector *theVector); real GetYComponentOfVector(vector *theVector); void CollideVectors(vector *v1, vector *v2); void CreateVectorFromPoint(vector *resultVector, realpoint *point); void AccelerateVector(vector *theVector, vector *theAcceleration, real maxMagnitude); real AccelerateQuantity(real theQuantity, real theAcceleration, real maxQuantity); #endif