/* Web64 SDK header printout: web64/motion.h * Generated by scripts/copy-web64-ide-source.mjs. * The IDE resolves this header as a read-only virtual SDK document. */ #ifndef WEB64_MOTION_H #define WEB64_MOTION_H #include #define WEB64_MOTION_HIT_MIN_X 1 #define WEB64_MOTION_HIT_MAX_X 2 #define WEB64_MOTION_HIT_MIN_Y 4 #define WEB64_MOTION_HIT_MAX_Y 8 typedef struct { web64_pos_t x; web64_pos_t y; web64_vel_t vx; web64_vel_t vy; } Web64Body2D; typedef struct { uint16_t acceleration; uint16_t braking; uint16_t maximum; uint16_t gravity; uint16_t terminal; } Web64MotionProfile; _web64_rt int16_t web64_motion_axis(int16_t velocity, int8_t intent, uint16_t acceleration, uint16_t braking, uint16_t maximum); _web64_rt int16_t web64_motion_steer_s16(int16_t velocity, int8_t intent, uint8_t acceleration, uint8_t braking, uint8_t reversal, uint8_t maximum); _web64_rt void web64_motion_integrate(uint16_t *position, int16_t velocity); _web64_rt uint8_t web64_motion_clamp(uint16_t *position, int16_t *velocity, uint16_t minimum, uint16_t maximum); _web64_rt void web64_motion_wrap(uint16_t *position, uint16_t minimum, uint16_t maximum); _web64_rt void web64_motion_integrate_s16(int16_t *position, int16_t velocity); _web64_rt uint8_t web64_motion_clamp_s16(int16_t *position, int16_t *velocity, int16_t minimum, int16_t maximum); _web64_rt void web64_motion_wrap_s16(int16_t *position, int16_t minimum, int16_t maximum); #define web64_motion_apply_gravity(velocity, gravity, terminal) web64_motion_axis((velocity), 1, (gravity), 0, (terminal)) #define web64_motion_jump(velocity, impulse) ((velocity) = (web64_vel_t)(-(int16_t)(impulse))) #define web64_motion_brake(velocity, braking) web64_motion_axis((velocity), 0, 0, (braking), 0x7fff) #define web64_motion_platform(body, intent, profile) ((body)->vx = web64_motion_axis((body)->vx, (intent), (profile)->acceleration, (profile)->braking, (profile)->maximum), (body)->vy = web64_motion_apply_gravity((body)->vy, (profile)->gravity, (profile)->terminal), web64_motion_integrate(&(body)->x, (body)->vx), web64_motion_integrate(&(body)->y, (body)->vy)) #endif