/** * @file iterator.h * @brief The work order handed to a registry sweep. * * There is no iterator object with a `next()` on it. Traversal is SDL's -- * `SDL_EnumerateProperties` over a registry -- and this struct is the `userdata` * carried into each callback, telling it *which* entries to touch and *what* to * do to each one. akgl_registry_iterate_actor and * akgl_registry_iterate_character are the callbacks that read it; * akgl_game_update, akgl_physics_simulate, and akgl_render_2d_draw_world are the * entry points that take one. * * The operations are independent bits, not an enum: a single sweep can update, * scale, and render, and they run in that fixed order regardless of how the bits * were set. Passing `NULL` where an `akgl_Iterator *` is expected is not an * error at the top-level entry points -- each substitutes its own default set -- * but it *is* an error once inside a callback. */ #ifndef _AKGL_ITERATOR_H_ #define _AKGL_ITERATOR_H_ #include /** @brief Selects operations and an optional layer for actor traversal. */ typedef struct { uint32_t flags; /**< Bitwise OR of the `AKGL_ITERATOR_OP_*` values below. */ uint8_t layerid; /**< Layer to restrict the sweep to. Read only when #AKGL_ITERATOR_OP_LAYERMASK is set. */ } akgl_Iterator; #define AKGL_ITERATOR_OP_UPDATE (1 << 0) // 1 Call the actor's updatefunc #define AKGL_ITERATOR_OP_RENDER (1 << 1) // 2 Call the actor's renderfunc #define AKGL_ITERATOR_OP_RELEASE (1 << 2) // 4 Release the object back to its heap layer #define AKGL_ITERATOR_OP_LAYERMASK (1 << 3) // 8 Skip anything whose layer != layerid #define AKGL_ITERATOR_OP_TILEMAPSCALE (1 << 4) // 16 Scale actors to the tilemap; otherwise force scale 1.0 #define AKGL_ITERATOR_OP_UNDEFINED_5 (1 << 5) // 32 #define AKGL_ITERATOR_OP_UNDEFINED_6 (1 << 6) // 64 #define AKGL_ITERATOR_OP_UNDEFINED_7 (1 << 7) // 128 #define AKGL_ITERATOR_OP_UNDEFINED_8 (1 << 8) // 256 #define AKGL_ITERATOR_OP_UNDEFINED_9 (1 << 9) // 512 #define AKGL_ITERATOR_OP_UNDEFINED_10 (1 << 10) // 1024 #define AKGL_ITERATOR_OP_UNDEFINED_11 (1 << 11) // 2048 #define AKGL_ITERATOR_OP_UNDEFINED_12 (1 << 12) // 4096 #define AKGL_ITERATOR_OP_UNDEFINED_13 (1 << 13) // 8192 #define AKGL_ITERATOR_OP_UNDEFINED_14 (1 << 14) // 16384 #define AKGL_ITERATOR_OP_UNDEFINED_15 (1 << 15) // 32768 #define AKGL_ITERATOR_OP_UNDEFINED_16 (1 << 16) // 65536 #define AKGL_ITERATOR_OP_UNDEFINED_17 (1 << 17) // 131072 #define AKGL_ITERATOR_OP_UNDEFINED_18 (1 << 18) // 262144 #define AKGL_ITERATOR_OP_UNDEFINED_19 (1 << 19) // 524288 #define AKGL_ITERATOR_OP_UNDEFINED_20 (1 << 20) // 1048576 #define AKGL_ITERATOR_OP_UNDEFINED_21 (1 << 21) // 2097152 #define AKGL_ITERATOR_OP_UNDEFINED_22 (1 << 22) // 4194304 #define AKGL_ITERATOR_OP_UNDEFINED_23 (1 << 23) // 8388608 #define AKGL_ITERATOR_OP_UNDEFINED_24 (1 << 24) // 16777216 #define AKGL_ITERATOR_OP_UNDEFINED_25 (1 << 25) // 33554432 #define AKGL_ITERATOR_OP_UNDEFINED_26 (1 << 26) // 67108864 #define AKGL_ITERATOR_OP_UNDEFINED_27 (1 << 27) // 134217728 #define AKGL_ITERATOR_OP_UNDEFINED_28 (1 << 28) // 268435456 #define AKGL_ITERATOR_OP_UNDEFINED_29 (1 << 29) // 536870912 #define AKGL_ITERATOR_OP_UNDEFINED_30 (1 << 30) // 1073741824 #define AKGL_ITERATOR_OP_UNDEFINED_31 (1 << 31) // 2147483648 #endif // _AKGL_ITERATOR_H_