int jump_count;
color_t color;
- /* TODO(#110): introduce checkpoints */
vec_t checkpoint;
int play_die_cue;
RETURN_LT0(player->lt);
}
+solid_ref_t player_as_solid(player_t *player)
+{
+ solid_ref_t ref = {
+ .tag = SOLID_PLAYER,
+ .ptr = (void*) player
+ };
+
+ return ref;
+}
+
int player_render(const player_t * player,
- SDL_Renderer *renderer,
const camera_t *camera)
{
assert(player);
- assert(renderer);
assert(camera);
switch (player->state) {
case PLAYER_STATE_ALIVE:
- return rigid_rect_render(player->alive_body, renderer, camera);
+ return rigid_rect_render(player->alive_body, camera);
case PLAYER_STATE_DYING:
- return dying_rect_render(player->dying_body, renderer, camera);
+ return dying_rect_render(player->dying_body, camera);
default: {}
}
}
void player_update(player_t *player,
- const platforms_t *platforms,
float delta_time)
{
assert(player);
- assert(platforms);
switch (player->state) {
case PLAYER_STATE_ALIVE: {
- rigid_rect_update(player->alive_body, platforms, delta_time);
-
- if (rigid_rect_touches_ground(player->alive_body)) {
- player->jump_count = 0;
- }
+ rigid_rect_update(player->alive_body, delta_time);
const rect_t hitbox = rigid_rect_hitbox(player->alive_body);
}
}
+void player_collide_with_solid(player_t *player, solid_ref_t solid)
+{
+ if (player->state == PLAYER_STATE_ALIVE) {
+ rigid_rect_collide_with_solid(player->alive_body, solid);
+
+ if (rigid_rect_touches_ground(player->alive_body)) {
+ player->jump_count = 0;
+ }
+ }
+}
+
+void player_impact_rigid_rect(player_t * player,
+ rigid_rect_t *rigid_rect)
+{
+ if (player->state == PLAYER_STATE_ALIVE) {
+ rigid_rect_impact_rigid_rect(player->alive_body, rigid_rect);
+ }
+}
+
void player_move_left(player_t *player)
{
assert(player);
}
int player_sound(player_t *player,
- sound_medium_t *sound_medium)
+ sound_samples_t *sound_samples)
{
if (player->play_die_cue) {
player->play_die_cue = 0;
- if (sound_medium_play_sound(sound_medium, 0, 1) < 0) {
+ if (sound_samples_play_sound(sound_samples, 0, 0) < 0) {
return -1;
}
}
return 0;
}
+
+rect_t player_hitbox(const player_t *player)
+{
+ if (player->state == PLAYER_STATE_ALIVE) {
+ return rigid_rect_hitbox(player->alive_body);
+ } else {
+ return rect(0.0f, 0.0f, 0.0f, 0.0f);
+ }
+}
+
+void player_rect_object_collide(player_t *player,
+ rect_t object,
+ int sides[RECT_SIDE_N])
+{
+ if (player->state == PLAYER_STATE_ALIVE) {
+ rigid_body_object_collide(player->alive_body, object, sides);
+ }
+}