} Player_state;
struct Player {
- Lt *lt;
+ Lt lt;
Player_state state;
RigidBodies *rigid_bodies;
{
trace_assert(line_stream);
- Lt *lt = create_lt();
+ Lt lt = {0};
if (lt == NULL) {
return NULL;
}
- Player *player = PUSH_LT(lt, nth_alloc(sizeof(Player)), free);
+ Player *player = PUSH_LT(lt, nth_calloc(1, sizeof(Player)), free);
if (player == NULL) {
RETURN_LT(lt, NULL);
}
player->alive_body_id = rigid_bodies_add(
rigid_bodies,
- rect(x, y, PLAYER_WIDTH, PLAYER_HEIGHT),
- color);
+ rect(x, y, PLAYER_WIDTH, PLAYER_HEIGHT));
player->dying_body = PUSH_LT(
lt,
return -1;
}
- return rigid_bodies_render(player->rigid_bodies, player->alive_body_id, camera);
+ return rigid_bodies_render(
+ player->rigid_bodies,
+ player->alive_body_id,
+ player->color,
+ camera);
}
case PLAYER_STATE_DYING:
explosion_update(player->dying_body, delta_time);
if (explosion_is_done(player->dying_body)) {
+ rigid_bodies_disable(player->rigid_bodies, player->alive_body_id, false);
rigid_bodies_transform_velocity(
player->rigid_bodies,
player->alive_body_id,
player->play_die_cue = 1;
explosion_start(player->dying_body, vec(hitbox.x, hitbox.y));
player->state = PLAYER_STATE_DYING;
+ rigid_bodies_disable(player->rigid_bodies, player->alive_body_id, true);
}
}