84 lines
2.2 KiB
C
84 lines
2.2 KiB
C
/**
|
|
* 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); |