]> git.lizzy.rs Git - nothing.git/blobdiff - src/game/level/player.c
create_lt() -> {0}
[nothing.git] / src / game / level / player.c
index ca328b48c5b9cedc06fac8df8e76e2c8caefa226..7d991f84cd3e19aae95588c616950993971bbc1d 100644 (file)
@@ -28,7 +28,7 @@ typedef enum Player_state {
 } Player_state;
 
 struct Player {
-    Lt *lt;
+    Lt lt;
     Player_state state;
 
     RigidBodies *rigid_bodies;
@@ -49,13 +49,13 @@ Player *create_player_from_line_stream(LineStream *line_stream, RigidBodies *rig
 {
     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);
     }
@@ -86,8 +86,7 @@ Player *create_player_from_line_stream(LineStream *line_stream, RigidBodies *rig
 
     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,
@@ -130,7 +129,11 @@ int player_render(const Player * player,
             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:
@@ -163,6 +166,7 @@ void player_update(Player *player,
         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,
@@ -241,6 +245,7 @@ void player_die(Player *player)
         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);
     }
 }