// Copyright (c) 2023 Alex Diener. All rights reserved.

#ifndef __GameSavedState_H__
#define __GameSavedState_H__

#include "PROJECT_NAME/EntityPlayer.h"
#include "PROJECT_NAME/RoomSavedState.h"
#include "utilities/UndoStack.h"

typedef struct GameSavedState {
	unsigned int roomCount;
	RoomSavedState ** roomSaves;
	RoomSavedState * roomResetSave;
	unsigned int currentRoomIndex;
	void * playerData;
	unsigned int playerDataSize;
	void * roomResetPlayerData;
	unsigned int roomResetPlayerDataSize;
	unsigned int undoNodeCount;
	unsigned int currentUndoDepth;
	UndoStateDelta ** undoNodes;
} GameSavedState;

GameSavedState * GameSavedState_create(unsigned int roomCount, unsigned int currentRoomIndex, EntityPlayer * player, EntityPlayer * roomResetPlayer);
void GameSavedState_dispose(GameSavedState * save);

void GameSavedState_encodeUndoStack(GameSavedState * save, UndoStack * undoStack);
EntityPlayer * GameSavedState_decodePlayer(GameSavedState * save, void * playerData, struct RoomState * roomState);
void GameSavedState_decodeUndoStack(GameSavedState * save, UndoStack * undoStack);

#endif
