Files
factorygame/util/gamestate.c

61 lines
2.2 KiB
C

//
// Created by bruno on 11.6.2025.
//
#include "gamestate.h"
GameState gameState;
char *autosaveName = "autosave.dat";
int loadGameState(char *filename, Player *plr) {
fflush(stdout);
FILE *gameSave = fopen(filename, "rb");
if (gameSave) {
fseek(gameSave, 0L, SEEK_END);
long sz = ftell(gameSave);
if (sz != sizeof(gameState)) {
return 1;
}
rewind(gameSave);
fread(&gameState, sizeof(gameState), 1, gameSave);
fclose(gameSave);
memcpy(plr, &gameState.player, sizeof(gameState.player));
memcpy(tileMap, gameState.tileMap, sizeof(tileMap));
memcpy(backgroundMap, gameState.backgroundTileMap, sizeof(backgroundMap));
SDL_Rect *tmp = audioData.playerRect;
memcpy(&audioData, &gameState.audioData, sizeof(gameState.audioData));
audioData.playerRect = tmp;
audioData.totalSamples = 0;
memcpy(&neededUpdates, &gameState.neededUpdates, sizeof(gameState.neededUpdates));
memcpy(&entities, &gameState.entities, sizeof(gameState.entities));
openCount = gameState.openCount;
memcpy(&openList, &gameState.openList, sizeof(gameState.openList));
memcpy(&enemySpawn, &gameState.enemySpawn, sizeof(gameState.enemySpawn));
plr->cursor.targetTile = NULL;
plr->cursor.prevTargetTile = NULL;
return 0;
}
return 1;
}
void saveGameState(char *filename, Player *plr) {
memcpy(&gameState.player, plr, sizeof(gameState.player));
memcpy(gameState.tileMap, tileMap, sizeof(gameState.tileMap));
memcpy(gameState.backgroundTileMap, backgroundMap, sizeof(gameState.backgroundTileMap));
memcpy(&gameState.audioData, &audioData, sizeof(gameState.audioData));
memcpy(&gameState.neededUpdates, &neededUpdates, sizeof(neededUpdates));
memcpy(&gameState.entities, &entities, sizeof(entities));
memcpy(&gameState.openList, &openList, sizeof(openList));
memcpy(&gameState.enemySpawn, &enemySpawn, sizeof(enemySpawn));
gameState.openCount = openCount;
FILE *gameSave = fopen(filename, "wb");
if (!gameSave) {
perror("Failed to open file for saving");
return;
}
fwrite(&gameState, sizeof(gameState), 1, gameSave);
fclose(gameSave);
}