106 lines
2.0 KiB
C
106 lines
2.0 KiB
C
/**
|
|
* 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); |