/** * Copyright (c) 2025 Dominic Masters * * This software is released under the MIT License. * https://opensource.org/licenses/MIT */ #pragma once #include "tile.h" #include "display/display.h" #define CHUNK_WIDTH 8 #define CHUNK_HEIGHT 8 #define CHUNK_TILE_COUNT (CHUNK_WIDTH * CHUNK_HEIGHT) #define CHUNK_ENTITY_COUNT_MAX 8 #define CHUNK_MAP_WIDTH (((DISPLAY_WIDTH / TILE_WIDTH_HEIGHT)/CHUNK_WIDTH)+2) #define CHUNK_MAP_HEIGHT (((DISPLAY_HEIGHT / TILE_WIDTH_HEIGHT)/CHUNK_HEIGHT)+2) #define CHUNK_MAP_COUNT (CHUNK_MAP_WIDTH * CHUNK_MAP_HEIGHT) typedef struct { uint16_t x, y; tile_t tilesBase[CHUNK_TILE_COUNT]; tile_t tilesBaseOverlay[CHUNK_TILE_COUNT]; uint32_t entityIDs[CHUNK_ENTITY_COUNT_MAX]; uint8_t entityCount; } chunk_t; typedef struct { chunk_t chunks[CHUNK_MAP_COUNT]; chunk_t *chunkOrder[CHUNK_MAP_COUNT]; uint16_t topLeftX; uint16_t topLeftY; } chunkmap_t; extern chunkmap_t CHUNK_MAP; /** * Initializes the chunk map. */ void chunkMapInit(); /** * Shifts the chunk map by the specified x and y offsets. * * @param x The x offset to shift the chunk map. * @param y The y offset to shift the chunk map. */ void chunkMapShift(const int16_t x, const int16_t y); /** * Sets the position of the chunk map to the specified coordinates. * * @param x The x coordinate of the top-left chunk. * @param y The y coordinate of the top-left chunk. */ void chunkMapSetPosition(const uint16_t x, const uint16_t y); /** * Gets the chunk at the specified chunk coordinates. * * @param chunkX The x coordinate of the chunk. * @param chunkY The y coordinate of the chunk. * @return A pointer to the chunk at the specified chunk coordinates, or NULL if * no chunk exists at those coordinates. */ chunk_t * chunkGetChunkAt(const uint16_t chunkX, const uint16_t chunkY); /** * Loads a chunk at the specified coordinates. * * @param chunk The chunk to load. * @param x The x coordinate of the chunk. * @param y The y coordinate of the chunk. */ void chunkLoad(chunk_t *chunk, const uint16_t x, const uint16_t y); /** * Unloads a chunk (that is currently loaded). * * @param chunk The chunk to unload. */ void chunkUnload(chunk_t *chunk);