Hopefully last commit
This commit is contained in:
61
util/gamestate.c
Normal file
61
util/gamestate.c
Normal file
@@ -0,0 +1,61 @@
|
||||
//
|
||||
// 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);
|
||||
}
|
Reference in New Issue
Block a user