/* Web64 SDK header printout: web64/trajectory.h * Generated by scripts/copy-web64-ide-source.mjs. * The IDE resolves this header as a read-only virtual SDK document. */ #ifndef WEB64_TRAJECTORY_H #define WEB64_TRAJECTORY_H #include #include #define WEB64_TRAJECTORY_ABI_VERSION 1 #define WEB64_TRAJECTORY_MAX_SEGMENTS 1024 #define WEB64_TRAJECTORY_BATCH_MAX_STATES 255 #define WEB64_TRAJECTORY_CONTROL_INDEX_MASK 1023 #define WEB64_TRAJECTORY_NEGATE_X 1024 #define WEB64_TRAJECTORY_NEGATE_Y 2048 #define WEB64_TRAJECTORY_LOOP 4096 #define WEB64_TRAJECTORY_PING_PONG 8192 #define WEB64_TRAJECTORY_REVERSE 16384 #define WEB64_TRAJECTORY_COMPLETE 32768 #define WEB64_TRAJECTORY_OPTIONS_MASK 31744 #define WEB64_TRAJECTORY_CORRECTION_X_NEGATIVE 1 #define WEB64_TRAJECTORY_CORRECTION_Y_NEGATIVE 2 #define WEB64_TRAJECTORY_OK 0 #define WEB64_TRAJECTORY_EVENT_SEGMENT 1 #define WEB64_TRAJECTORY_EVENT_LOOP 2 #define WEB64_TRAJECTORY_EVENT_DIRECTION 4 #define WEB64_TRAJECTORY_EVENT_COMPLETE 8 #define WEB64_TRAJECTORY_INVALID_ARGUMENT 16 #define WEB64_TRAJECTORY_INVALID_PATTERN 32 #define WEB64_TRAJECTORY_INVALID_DURATION 64 #define WEB64_TRAJECTORY_INVALID_STATE 128 #define WEB64_TRAJECTORY_SEGMENT_DELTA_X 0 #define WEB64_TRAJECTORY_SEGMENT_DELTA_Y 1 #define WEB64_TRAJECTORY_SEGMENT_DURATION 2 #define WEB64_TRAJECTORY_SEGMENT_SIZE 3 #define WEB64_TRAJECTORY_PATTERN_SEGMENTS 0 #define WEB64_TRAJECTORY_PATTERN_COUNT 2 #define WEB64_TRAJECTORY_PATTERN_SIZE 4 #define WEB64_TRAJECTORY_STATE_PATTERN 0 #define WEB64_TRAJECTORY_STATE_X 2 #define WEB64_TRAJECTORY_STATE_Y 4 #define WEB64_TRAJECTORY_STATE_STEP_X 6 #define WEB64_TRAJECTORY_STATE_STEP_Y 8 #define WEB64_TRAJECTORY_STATE_CONTROL 10 #define WEB64_TRAJECTORY_STATE_DURATION 12 #define WEB64_TRAJECTORY_STATE_FRAMES_REMAINING 13 #define WEB64_TRAJECTORY_STATE_REMAINDER_X 14 #define WEB64_TRAJECTORY_STATE_REMAINDER_Y 15 #define WEB64_TRAJECTORY_STATE_ERROR_X 16 #define WEB64_TRAJECTORY_STATE_ERROR_Y 17 #define WEB64_TRAJECTORY_STATE_CORRECTION 18 #define WEB64_TRAJECTORY_STATE_SIZE 19 typedef struct { char delta_x; char delta_y; uint8_t duration; } Web64TrajectorySegment; typedef struct { Web64TrajectorySegment *segments; uint16_t count; } Web64TrajectoryPattern; typedef struct { Web64TrajectoryPattern *pattern; web64_pos_t x; web64_pos_t y; int16_t step_x; int16_t step_y; uint16_t control; uint8_t duration; uint8_t frames_remaining; uint8_t remainder_x; uint8_t remainder_y; uint8_t error_x; uint8_t error_y; uint8_t correction; } Web64TrajectoryState; /* Patterns and state are caller-owned and remain directly readable/writable from C or assembly. */ /* These transparent adapters copy only the public Q12.4 result; they link no runtime and trigger no downstream phase. */ #define WEB64_TRAJECTORY_APPLY_BODY(state, body) (body).x = (state).x; (body).y = (state).y #define WEB64_TRAJECTORY_APPLY_POSITION(state, x_positions, y_positions, index) (x_positions)[(index)] = (state).x; (y_positions)[(index)] = (state).y /* Checked calls validate before mutation. Fast calls require a previously validated immutable pattern and valid state. */ _web64_rt uint8_t web64_trajectory_validate(const Web64TrajectoryPattern *pattern); _web64_rt uint8_t web64_trajectory_init(Web64TrajectoryState *state, const Web64TrajectoryPattern *pattern, uint16_t x, uint16_t y, uint16_t options); _web64_rt uint8_t web64_trajectory_init_fast(Web64TrajectoryState *state, const Web64TrajectoryPattern *pattern, uint16_t x, uint16_t y, uint16_t options); _web64_rt uint8_t web64_trajectory_step(Web64TrajectoryState *state); _web64_rt uint8_t web64_trajectory_step_fast(Web64TrajectoryState *state); /* Batch calls preserve input order and write one event byte per state. Checked batch preflights non-null, non-wrapping, non-overlapping state/event spans before mutation. The fast entry requires those valid spans plus contiguous lockstep states sharing one pattern/index/phase and traversal mode; X/Y negation may differ. */ _web64_rt uint8_t web64_trajectory_step_batch(Web64TrajectoryState *states, uint8_t count, uint8_t *events); _web64_rt uint8_t web64_trajectory_step_batch_fast(Web64TrajectoryState *states, uint8_t count, uint8_t *events); #endif