61 lines
2.2 KiB
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);
|
|
} |