X-Git-Url: https://git.rohieb.name/hackover2013-badge-firmware.git/blobdiff_plain/4cb2d309b35bc7acc33483bdcd0af2a749206369..9c281c1d45fb710afc2884f99760113062b6a301:/badge/jumpnrun/enemies.h diff --git a/badge/jumpnrun/enemies.h b/badge/jumpnrun/enemies.h index 64348cb..5b6da64 100644 --- a/badge/jumpnrun/enemies.h +++ b/badge/jumpnrun/enemies.h @@ -23,17 +23,20 @@ typedef struct jumpnrun_enemy_type { vec2d spawn_inertia; void (*collision_tiles)(struct jumpnrun_enemy *self, - vec2d *desired_position, - struct jumpnrun_level *lv, - struct jumpnrun_tile_range const *visible_tiles); + vec2d *desired_position, + struct jumpnrun_level *lv, + struct jumpnrun_tile_range const *visible_tiles); void (*collision_player)(struct jumpnrun_enemy *self, - struct jumpnrun_game_state *state, - vec2d *player_inertia_mod); - void (*game_tick)(struct jumpnrun_enemy *self, - struct jumpnrun_game_state *state, + struct jumpnrun_game_state *state, + vec2d *player_inertia_mod); + void (*collision_shots)(struct jumpnrun_enemy *self, + struct jumpnrun_game_state *state); + + void (*move_tick)(struct jumpnrun_enemy *self, + struct jumpnrun_game_state *state, struct jumpnrun_level *lv, struct jumpnrun_tile_range const *visible_tiles, - vec2d *player_inertia_mod); + vec2d *player_inertia_mod); } jumpnrun_enemy_type; typedef struct jumpnrun_enemy { @@ -44,21 +47,33 @@ typedef struct jumpnrun_enemy { jumpnrun_enemy_type const *type; } jumpnrun_enemy; +enum { + JUMPNRUN_ENEMY_SPAWNED = 1, + JUMPNRUN_ENEMY_UNAVAILABLE = 2, + JUMPNRUN_ENEMY_FACING_RIGHT = 4, + JUMPNRUN_ENEMY_EVENT_TRIGGER1 = 128 +}; + static inline rectangle const *enemy_box (jumpnrun_enemy const *enemy) { return &enemy->base.current_box ; } static inline vec2d enemy_position (jumpnrun_enemy const *enemy) { return enemy->base.current_box.pos; } static inline rectangle enemy_hitbox (jumpnrun_enemy const *enemy) { rectangle r = enemy->type->hitbox; rectangle_move_rel(&r, enemy_position(enemy)); return r; } static inline badge_sprite const *enemy_sprite (jumpnrun_enemy const *enemy) { return &enemy->type->animation_frames[enemy->base.anim_frame]; } -static inline uint8_t enemy_render_flags(jumpnrun_enemy const *enemy) { return fixed_point_lt(enemy->base.inertia.x, FIXED_POINT(0, 0)) ? 0 : BADGE_BLT_MIRRORED; } -enum { - JUMPNRUN_ENEMY_SPAWNED = 1, - JUMPNRUN_ENEMY_UNAVAILABLE = 2 -}; +static inline bool enemy_facing_right(jumpnrun_enemy const *enemy) { return (enemy->flags & JUMPNRUN_ENEMY_FACING_RIGHT) || fixed_point_gt(enemy->base.inertia.x, FIXED_INT(0)); } +static inline uint8_t enemy_render_flags(jumpnrun_enemy const *enemy) { return enemy_facing_right(enemy) ? BADGE_BLT_MIRRORED : 0; } enum { JUMPNRUN_ENEMY_TYPE_CAT, JUMPNRUN_ENEMY_TYPE_MUSHROOM, - JUMPNRUN_ENEMY_TYPE_KANINCHEN, + JUMPNRUN_ENEMY_TYPE_BUNNY, + JUMPNRUN_ENEMY_TYPE_SNAKE, + JUMPNRUN_ENEMY_TYPE_SPIRAL, + JUMPNRUN_ENEMY_TYPE_ROTOR, + JUMPNRUN_ENEMY_TYPE_DOG, + JUMPNRUN_ENEMY_TYPE_GIRAFFE, + JUMPNRUN_ENEMY_TYPE_BIRD, + JUMPNRUN_ENEMY_TYPE_BIRD_STRAIGHT, + JUMPNRUN_ENEMY_TYPE_BIRD_DIP, JUMPNRUN_ENEMY_TYPE_COUNT }; @@ -66,9 +81,9 @@ enum { extern jumpnrun_enemy_type const jumpnrun_enemy_type_data[JUMPNRUN_ENEMY_TYPE_COUNT]; void jumpnrun_process_enemy(jumpnrun_enemy *self, - badge_framebuffer *fb, - struct jumpnrun_game_state *state, - struct jumpnrun_level *lv, - struct jumpnrun_tile_range const *visible_tiles, - vec2d *player_inertia_mod); + badge_framebuffer *fb, + struct jumpnrun_game_state *state, + struct jumpnrun_level *lv, + struct jumpnrun_tile_range const *visible_tiles, + vec2d *player_inertia_mod); #endif