#include #include #include #include #ifndef UTIL_H #define UTIL_H #define SET_BIT(b, n) (b | (0x1 << n)) #define CLEAR_BIT(b, n) (b & ~(0x1 << n)) #define IS_BIT_SET(b, n) ((b >> n) & 0x1) #define TOGGLE_BIT(b, n) (b ^ (0x1 << n)) #define HAS_FLAG(v, f) ((v & f) == f) // Fast math macros. #define SLDJ_SQRT(number) sldjSqrtTable[(uint16_t)(number)] #define SLDJ_SIN(number) sldjSinTable[(uint16_t)(number)] #define SLDJ_COS(number) sldjCosTable[(uint16_t)(number)] #define SLDJ_TAN(number) sldjTanTable[(uint16_t)(number)] #define SLDJ_HYPOT2(x, y) (SLDJ_SQRT(x * x + y * y)) #define SLDJ_HYPOT3(x, y, z) (SLDJ_SQRT(x * x + y * y + z * z)) #define SLDJ_RANDOM16(seed) (seed = (75 * seed + 74) % 65537) #define SLDJ_RANDOM32(seed) (seed = (1664525 * seed + 1013904223) % 4294967296) // Stuff stolen from raylib/raymath #ifndef RL_COLOR_TYPE #define RL_COLOR_TYPE typedef struct Color { unsigned char r; unsigned char g; unsigned char b; unsigned char a; } Color; #endif #ifndef PI #define PI 3.14159265358979323846f #endif #ifndef DEG2RAD #define DEG2RAD (PI/180.0f) #endif #ifndef RAD2DEG #define RAD2DEG (180.0f/PI) #endif // Used for sending information to a scanner. typedef struct SldjContext { uint16_t viewportWidth; uint16_t viewportHeight; uint8_t targetFps; uint16_t xCount; uint16_t yCount; } SldjContext; // Tables. extern float sldjSqrtTable[65536]; extern float sldjSinTable[361]; extern float sldjCosTable[361]; extern float sldjTanTable[361]; #endif