Added Game_World_Player and dying/respawning.

This commit is contained in:
2025-12-18 15:59:14 +01:00
parent 0074ecd57b
commit cd507c544d
11 changed files with 298 additions and 187 deletions

View File

@@ -92,21 +92,15 @@ static void state_tick(Presentation_State *state) {
.left = IsKeyPressed(KEY_LEFT) || IsKeyPressed(KEY_A)
};
Locally_Controlled_Player *player = &instance->locally_controlled_players[0];
if(!simulation_input_equal(input, player->prev_input)) {
if(!simulation_input_empty(input)) {
game_instance_push_local_input(instance, 0, input);
player->prev_input = input;
}
}
else if(instance->amount_of_local_players > 1) {
for(uint8_t i = 0; i < instance->amount_of_local_players; i++) {
Simulation_Game_Input input = gather_input_for_local_player(i);
Locally_Controlled_Player *player = &instance->locally_controlled_players[i];
if(!simulation_input_equal(input, player->prev_input)) {
if(!simulation_input_empty(input)) {
game_instance_push_local_input(instance, i, input);
player->prev_input = input;
}
}
}
@@ -121,11 +115,8 @@ static void state_tick(Presentation_State *state) {
for(uint16_t i = 0; i < instance->amount_of_local_players; i++) {
// Pop input from local-player's input_queue and set the player's input to it, if we have one.
Simulation_Game_Input input = {0};
if(game_instance_pop_local_input(instance, i, &input)) {
// TODO: SS - We should probably check if this input is invalid for the snake. (pressing "go right" when going left, for example.)
// If it is invalid, the next input in the queue should be tried.
game_session_set_player_input(session, i, input);
}
game_instance_pop_local_input(instance, i, &input);
game_session_set_player_input(session, i, input);
}
game_session_tick(session);
@@ -237,8 +228,8 @@ static void state_render(Presentation_State *state) {
Color tint = (Color) { 255, 255, 255, 255 };
// Set the snake's tint based on player-index.
for(uint16_t i = 0; i < sim_world->max_players; i++) {
Simulation_Player *player = &sim_world->players[i];
for(uint16_t i = 0; i < world->max_players; i++) {
Game_World_Player *player = &world->players[i];
if(!player->active) {
continue;
}