X-Git-Url: http://git.rohieb.name/hackover2013-badge-firmware.git/blobdiff_plain/8a947d16e5132fd133d67c76468c6323881de221..c672ffeb5b298b4b8580e24916da2c80b2518ac2:/badge/jumpnrun/tiles.h diff --git a/badge/jumpnrun/tiles.h b/badge/jumpnrun/tiles.h index e487e1c..8e47800 100644 --- a/badge/jumpnrun/tiles.h +++ b/badge/jumpnrun/tiles.h @@ -1,18 +1,18 @@ #ifndef INCLUDED_JUMPNRUN_TILES_H #define INCLUDED_JUMPNRUN_TILES_H -#include -#include -#include +#include "../util/fixed_point.h" +#include "../util/rectangle.h" +#include "../ui/sprite.h" #include -typedef enum { - JUMPNRUN_TILE_TOP = 1, - JUMPNRUN_TILE_BOTTOM = 2, - JUMPNRUN_TILE_LEFT = 4, - JUMPNRUN_TILE_RIGHT = 8 -} jumpnrun_tile_sides; +enum { + JUMPNRUN_COLLISION_TOP = 1, + JUMPNRUN_COLLISION_BOTTOM = 2, + JUMPNRUN_COLLISION_LEFT = 4, + JUMPNRUN_COLLISION_RIGHT = 8 +}; enum { JUMPNRUN_TILE_PIXEL_WIDTH = 5, @@ -20,9 +20,9 @@ enum { }; typedef struct jumpnrun_tile_position { - uint16_t x; - uint8_t y; -} jumpnrun_tile_position; + int16_t x; + int8_t y; +} __attribute__((packed)) jumpnrun_tile_position; typedef struct jumpnrun_tile_type { uint8_t lethal_sides; @@ -32,17 +32,17 @@ typedef struct jumpnrun_tile_type { typedef struct jumpnrun_tile { jumpnrun_tile_position pos; uint8_t type; -} jumpnrun_tile; +} __attribute__((packed)) jumpnrun_tile; typedef struct jumpnrun_tile_range { - size_t first; - size_t last; // actually one past last. + uint16_t first; + uint16_t last; // actually one past last. } jumpnrun_tile_range; -static inline fixed_point tile_left (jumpnrun_tile const *tile) { return FIXED_POINT(tile->pos.x * JUMPNRUN_TILE_PIXEL_WIDTH , 0); } -static inline fixed_point tile_top (jumpnrun_tile const *tile) { return FIXED_POINT(tile->pos.y * JUMPNRUN_TILE_PIXEL_HEIGHT, 0); } -static inline fixed_point tile_right (jumpnrun_tile const *tile) { return fixed_point_add(tile_left(tile), FIXED_POINT(JUMPNRUN_TILE_PIXEL_WIDTH , 0)); } -static inline fixed_point tile_bottom(jumpnrun_tile const *tile) { return fixed_point_add(tile_top (tile), FIXED_POINT(JUMPNRUN_TILE_PIXEL_HEIGHT, 0)); } +static inline fixed_point tile_left (jumpnrun_tile const *tile) { return FIXED_INT(tile->pos.x * JUMPNRUN_TILE_PIXEL_WIDTH ); } +static inline fixed_point tile_top (jumpnrun_tile const *tile) { return FIXED_INT(tile->pos.y * JUMPNRUN_TILE_PIXEL_HEIGHT); } +static inline fixed_point tile_right (jumpnrun_tile const *tile) { return fixed_point_add(tile_left(tile), FIXED_INT(JUMPNRUN_TILE_PIXEL_WIDTH )); } +static inline fixed_point tile_bottom(jumpnrun_tile const *tile) { return fixed_point_add(tile_top (tile), FIXED_INT(JUMPNRUN_TILE_PIXEL_HEIGHT)); } /************************************/ @@ -53,6 +53,10 @@ enum { JUMPNRUN_TILE_TYPE_TUBE_TOP_RIGHT, JUMPNRUN_TILE_TYPE_TUBE_LEFT, JUMPNRUN_TILE_TYPE_TUBE_RIGHT, + JUMPNRUN_TILE_TYPE_SPIKE_UP, + JUMPNRUN_TILE_TYPE_SPIKE_RIGHT, + JUMPNRUN_TILE_TYPE_SPIKE_DOWN, + JUMPNRUN_TILE_TYPE_SPIKE_LEFT, JUMPNRUN_TILE_TYPE_COUNT };