1 #ifndef INCLUDED_JUMPNRUN_ENEMIES_H
2 #define INCLUDED_JUMPNRUN_ENEMIES_H
4 #include "../ui/sprite.h"
5 #include "../util/rectangle.h"
10 struct jumpnrun_game_state
;
11 struct jumpnrun_level
;
12 struct jumpnrun_tile_range
;
14 struct jumpnrun_enemy
;
16 typedef struct jumpnrun_enemy_type
{
17 unsigned animation_ticks_per_frame
;
18 size_t animation_length
;
19 badge_sprite
const *animation_frames
;
25 void (*collision_tiles
)(struct jumpnrun_enemy
*self
,
26 vec2d
*desired_position
,
27 struct jumpnrun_level
*lv
,
28 struct jumpnrun_tile_range
const *visible_tiles
);
29 void (*collision_player
)(struct jumpnrun_enemy
*self
,
30 struct jumpnrun_game_state
*state
,
31 vec2d
*player_inertia_mod
);
32 void (*game_tick
)(struct jumpnrun_enemy
*self
,
33 struct jumpnrun_game_state
*state
,
34 struct jumpnrun_level
*lv
,
35 struct jumpnrun_tile_range
const *visible_tiles
,
36 vec2d
*player_inertia_mod
);
37 } jumpnrun_enemy_type
;
39 typedef struct jumpnrun_enemy
{
40 jumpnrun_moveable base
;
44 jumpnrun_enemy_type
const *type
;
47 static inline rectangle
const *enemy_box (jumpnrun_enemy
const *enemy
) { return &enemy
->base
.current_box
; }
48 static inline vec2d
enemy_position (jumpnrun_enemy
const *enemy
) { return enemy
->base
.current_box
.pos
; }
49 static inline rectangle
enemy_hitbox (jumpnrun_enemy
const *enemy
) { rectangle r
= enemy
->type
->hitbox
; rectangle_move_rel(&r
, enemy_position(enemy
)); return r
; }
50 static inline badge_sprite
const *enemy_sprite (jumpnrun_enemy
const *enemy
) { return &enemy
->type
->animation_frames
[enemy
->base
.anim_frame
]; }
51 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
; }
54 JUMPNRUN_ENEMY_SPAWNED
= 1,
55 JUMPNRUN_ENEMY_UNAVAILABLE
= 2
59 JUMPNRUN_ENEMY_TYPE_CAT
,
60 JUMPNRUN_ENEMY_TYPE_MUSHROOM
,
61 JUMPNRUN_ENEMY_TYPE_KANINCHEN
,
63 JUMPNRUN_ENEMY_TYPE_COUNT
66 extern jumpnrun_enemy_type
const jumpnrun_enemy_type_data
[JUMPNRUN_ENEMY_TYPE_COUNT
];
68 void jumpnrun_process_enemy(jumpnrun_enemy
*self
,
69 badge_framebuffer
*fb
,
70 struct jumpnrun_game_state
*state
,
71 struct jumpnrun_level
*lv
,
72 struct jumpnrun_tile_range
const *visible_tiles
,
73 vec2d
*player_inertia_mod
);