/** * Copyright (c) 2025 Dominic Masters * * This software is released under the MIT License. * https://opensource.org/licenses/MIT */ #pragma once #include "rpg/overworld/chunk.h" #define MAP_FILE_PATH_MAX 128 typedef struct map_s { char_t filePath[MAP_FILE_PATH_MAX]; char_t dirPath[MAP_FILE_PATH_MAX]; char_t fileName[MAP_FILE_PATH_MAX]; chunk_t chunks[MAP_CHUNK_COUNT]; chunk_t *chunkOrder[MAP_CHUNK_COUNT]; chunkpos_t chunkPosition; } map_t; extern map_t MAP; /** * Initializes the map. * * @return An error code. */ errorret_t mapInit(); /** * Checks if a map is loaded. * * @return true if a map is loaded, false otherwise. */ bool_t mapIsLoaded(); /** * Loads a map from the given file path. * * @param path The file path. * @param position The initial chunk position. * @return An error code. */ errorret_t mapLoad( const char_t *path, const chunkpos_t position ); /** * Updates the map. */ void mapUpdate(); /** * Disposes of the map. */ void mapDispose(); /** * Sets the map position and updates chunks accordingly. * * @param newPos The new chunk position. * @return An error code. */ errorret_t mapPositionSet(const chunkpos_t newPos); /** * Unloads a chunk. * * @param chunk The chunk to unload. */ void mapChunkUnload(chunk_t* chunk); /** * Loads a chunk. * * @param chunk The chunk to load. * @return An error code. */ errorret_t mapChunkLoad(chunk_t* chunk); /** * Gets the index of a chunk, within the world, at the given position. * * @param position The chunk position. * @return The index of the chunk, or -1 if out of bounds. */ chunkindex_t mapGetChunkIndexAt(const chunkpos_t position); /** * Gets a chunk by its index. * * @param chunkIndex The index of the chunk. * @return A pointer to the chunk. */ chunk_t * mapGetChunk(const uint8_t chunkIndex); /** * Gets the tile at the given world position. * * @param position The world position. * @return The tile at that position, or TILE_NULL if the chunk is unloaded. */ tile_t mapGetTile(const worldpos_t position);