Fixed segfault that happend when you'd exit the ingame-state.

This commit is contained in:
2025-12-11 18:37:40 +01:00
parent f4404457ee
commit 0045d2788c
4 changed files with 11 additions and 9 deletions

View File

@@ -1,5 +1,6 @@
#include <stdlib.h> #include <stdlib.h>
#include <assert.h> #include <assert.h>
#include <stdio.h>
#include "presentation/states/state_ingame.h" #include "presentation/states/state_ingame.h"
#include "presentation/states/state_main_menu.h" #include "presentation/states/state_main_menu.h"
@@ -29,18 +30,16 @@ int main() {
break; break;
} }
Presentation_State *state = presentation_state_machine.current;
// Tick. // Tick.
if(state != NULL && state->tick != NULL) { if(presentation_state_machine.current != NULL && presentation_state_machine.current->tick != NULL) {
state->tick(state); presentation_state_machine.current->tick(presentation_state_machine.current);
} }
// Render. // Render.
BeginDrawing(); BeginDrawing();
{ {
if(state != NULL && state->render != NULL) { if(presentation_state_machine.current != NULL && presentation_state_machine.current->render != NULL) {
state->render(state); presentation_state_machine.current->render(presentation_state_machine.current);
} }
} }
EndDrawing(); EndDrawing();

View File

@@ -91,7 +91,10 @@ static void state_render(Presentation_State *state) {
ClearBackground((Color) { 240, 236, 226, 255 }); ClearBackground((Color) { 240, 236, 226, 255 });
Simulation_World *sim_world = &g_current_session->simulation_world; Simulation_World *sim_world = &g_current_session->simulation_world;
assert(sim_world != NULL);
Game_World *world = sim_world->game_world; Game_World *world = sim_world->game_world;
assert(world != NULL);
Grid *grid = &world->grid; Grid *grid = &world->grid;
uint32_t grid_total_size = grid->width * grid->height; uint32_t grid_total_size = grid->width * grid->height;

View File

@@ -10,7 +10,7 @@ static void state_enter(Presentation_State *state) {
Presentation_State_Main_Menu_Context *ctx = (Presentation_State_Main_Menu_Context *)state->context; Presentation_State_Main_Menu_Context *ctx = (Presentation_State_Main_Menu_Context *)state->context;
(void)ctx; (void)ctx;
printf("Entered main menu\n"); ctx->mode = Main_Menu_Mode_Home;
} }
static void state_tick(Presentation_State *state) { static void state_tick(Presentation_State *state) {

View File

@@ -87,10 +87,10 @@ void game_session_init_default_settings(bool is_singleplayer, Game_Session_Setti
static void game_session_tick(Game_Session *session) { static void game_session_tick(Game_Session *session) {
// Update input. // Update input.
for(uint16_t i = 0; i < session->settings.max_players; i++) { for(uint16_t i = 0; i < session->settings.max_players; i++) {
Game_Session_Player *session_player = &session->players[i]; Game_Session_Player *session_player = &session->players[i];
{ // Check if any players have joined/disconnected by comparing against the previous session_player. { // Check if any players have joined/disconnected by comparing against the previous session_player.
Game_Session_Player *session_player_prev = &session->players_prev[i]; Game_Session_Player *session_player_prev = &session->players_prev[i];
bool was_active = session_player_prev->active; bool was_active = session_player_prev->active;
bool is_active = session_player->active; bool is_active = session_player->active;