// Copyright (c) 2023 Alex Diener. All rights reserved. #ifndef __GameState_H__ #define __GameState_H__ typedef struct GameState GameState; #define GameState_superclass StemObject #include "PROJECT_NAME/EntityPlayer.h" #include "PROJECT_NAME/GameData.h" #include "PROJECT_NAME/GameSavedState.h" #include "PROJECT_NAME/RoomState.h" #include "stemobject/StemObject.h" #include "utilities/EventDispatcher.h" struct GameState_roomChangedEvent { unsigned int oldRoomIndex; unsigned int newRoomIndex; }; #define GameState_ivars \ StemObject_ivars \ \ EventDispatcher * eventDispatcher; \ GameData * gameData; \ unsigned int roomCount; \ RoomState ** rooms; \ RoomState * currentRoomStateCopy; \ EntityPlayer * roomResetPlayer; \ unsigned int currentRoomIndex; \ EntityPlayer * player; #define GameState_vtable(self_type) \ StemObject_vtable(self_type) stemobject_declare(GameState) GameState * GameState_create(GameData * gameData, GameSavedState * savedState); bool GameState_init(GameState * self, GameData * gameData, GameSavedState * savedState); void GameState_dispose(GameState * self); void GameState_advanceTurn(GameState * self); void GameState_changeRoom(GameState * self, unsigned int newRoomIndex); void GameState_resetCurrentRoom(GameState * self); GameSavedState * GameState_createSave(GameState * self); #endif