// Copyright (c) 2023 Alex Diener. All rights reserved. #ifndef __GameData_H__ #define __GameData_H__ #include "gamemath/Rect4i.h" #include "gamemath/Vector2i.h" #include "gamemath/Vector2u.h" #include "PROJECT_NAME/Music.h" #include "tileset/TileMapEditData.h" #include "utilities/Atom.h" typedef enum RoomLayerType { ROOM_LAYER_TYPE_GROUND = 0, ROOM_LAYER_TYPE_OBSTACLE = 1, ROOM_LAYER_TYPE_ENTITY = 2 } RoomLayerType; typedef enum TilePropertyBits { TILE_STATIC_FLOOR = 0x01, TILE_STATIC_WALL = 0x02, TILE_OUT_OF_BOUNDS = 0x1000 } TilePropertyBits; typedef struct RoomLayerData { RoomLayerType type; Vector2i offset; TileInstanceGrid tileGrid; } RoomLayerData; typedef struct RoomData { TileMapID identifier; int zoneLayer; Vector2i zonePosition; Vector2u size; unsigned int layerCount; RoomLayerData * layers; MusicID musicID; } RoomData; typedef struct GameData { unsigned int roomCount; RoomData * rooms; TileMapID startingRoomIdentifier; char * startingRoomEntranceName; } GameData; GameData * GameData_create(void); void GameData_dispose(GameData * data); RoomData * GameData_getRoomDataByIdentifier(GameData * zone, TileMapID roomIdentifier, unsigned int * outRoomIndex); unsigned int GameData_getRoomIndexAtZonePosition(GameData * zone, int zoneLayer, Vector2i zonePosition); DataHashTable * RoomData_getRoomEntranceByName(RoomData * room, const char * entranceName, Vector2i * outPosition); Rect4i RoomData_getLocalBounds(RoomData * room); TilePropertyBits getTileProperties(TileID tileID); #endif