idk
This commit is contained in:
@@ -19,10 +19,12 @@ void rpgCameraInit(void) {
|
|||||||
void rpgCameraUpdate(void) {
|
void rpgCameraUpdate(void) {
|
||||||
switch(RPG_CAMERA.mode) {
|
switch(RPG_CAMERA.mode) {
|
||||||
case RPG_CAMERA_MODE_FREE:
|
case RPG_CAMERA_MODE_FREE:
|
||||||
|
chunkpos_t chunkPos;
|
||||||
|
worldPosToChunkPos(&RPG_CAMERA.free, &chunkPos);
|
||||||
mapPositionSet((chunkpos_t){
|
mapPositionSet((chunkpos_t){
|
||||||
.x = (RPG_CAMERA.free.x / CHUNK_WIDTH) - (MAP_CHUNK_WIDTH / 2),
|
.x = chunkPos.x - (MAP_CHUNK_WIDTH / 2),
|
||||||
.y = (RPG_CAMERA.free.y / CHUNK_HEIGHT) - (MAP_CHUNK_HEIGHT / 2),
|
.y = chunkPos.y - (MAP_CHUNK_HEIGHT / 2),
|
||||||
.z = (RPG_CAMERA.free.z / CHUNK_DEPTH) - (MAP_CHUNK_DEPTH / 2)
|
.z = chunkPos.z - (MAP_CHUNK_DEPTH / 2)
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -32,10 +34,12 @@ void rpgCameraUpdate(void) {
|
|||||||
|
|
||||||
// Update map position to match camera. By default map wants to know the
|
// Update map position to match camera. By default map wants to know the
|
||||||
// top left but we want to set the center, so we need to sub half map size
|
// top left but we want to set the center, so we need to sub half map size
|
||||||
|
chunkpos_t chunkPos;
|
||||||
|
worldPosToChunkPos(&entity->position, &chunkPos);
|
||||||
mapPositionSet((chunkpos_t){
|
mapPositionSet((chunkpos_t){
|
||||||
.x = (entity->position.x / CHUNK_WIDTH) - (MAP_CHUNK_WIDTH / 2),
|
.x = chunkPos.x - (MAP_CHUNK_WIDTH / 2),
|
||||||
.y = (entity->position.y / CHUNK_HEIGHT) - (MAP_CHUNK_HEIGHT / 2),
|
.y = chunkPos.y - (MAP_CHUNK_HEIGHT / 2),
|
||||||
.z = (entity->position.z / CHUNK_DEPTH) - (MAP_CHUNK_DEPTH / 2)
|
.z = chunkPos.z - (MAP_CHUNK_DEPTH / 2)
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,4 +8,5 @@ target_sources(${DUSK_TARGET_NAME}
|
|||||||
PRIVATE
|
PRIVATE
|
||||||
chunk.c
|
chunk.c
|
||||||
map.c
|
map.c
|
||||||
|
worldpos.c
|
||||||
)
|
)
|
||||||
@@ -146,18 +146,15 @@ chunkindex_t mapGetChunkIndexAt(const chunkpos_t position) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
if(
|
if(
|
||||||
relPos.x < 0 || relPos.x >= MAP_CHUNK_WIDTH ||
|
relPos.x < 0 || relPos.y < 0 || relPos.z < 0 ||
|
||||||
relPos.y < 0 || relPos.y >= MAP_CHUNK_HEIGHT ||
|
relPos.x >= MAP_CHUNK_WIDTH ||
|
||||||
relPos.z < 0 || relPos.z >= MAP_CHUNK_DEPTH
|
relPos.y >= MAP_CHUNK_HEIGHT ||
|
||||||
|
relPos.z >= MAP_CHUNK_DEPTH
|
||||||
) {
|
) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return chunkPosToIndex(&relPos);
|
||||||
(relPos.z * MAP_CHUNK_WIDTH * MAP_CHUNK_HEIGHT) +
|
|
||||||
(relPos.y * MAP_CHUNK_WIDTH) +
|
|
||||||
relPos.x
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
chunk_t* mapGetChunkByIndex(const uint8_t index) {
|
chunk_t* mapGetChunkByIndex(const uint8_t index) {
|
||||||
|
|||||||
@@ -11,4 +11,18 @@ void chunkPosToWorldPos(const chunkpos_t* chunkPos, worldpos_t* out) {
|
|||||||
out->x = (worldunit_t)(chunkPos->x * CHUNK_WIDTH);
|
out->x = (worldunit_t)(chunkPos->x * CHUNK_WIDTH);
|
||||||
out->y = (worldunit_t)(chunkPos->y * CHUNK_HEIGHT);
|
out->y = (worldunit_t)(chunkPos->y * CHUNK_HEIGHT);
|
||||||
out->z = (worldunit_t)(chunkPos->z * CHUNK_DEPTH);
|
out->z = (worldunit_t)(chunkPos->z * CHUNK_DEPTH);
|
||||||
|
}
|
||||||
|
|
||||||
|
void worldPosToChunkPos(const worldpos_t* worldPos, chunkpos_t* out) {
|
||||||
|
out->x = (chunkunit_t)(worldPos->x / CHUNK_WIDTH);
|
||||||
|
out->y = (chunkunit_t)(worldPos->y / CHUNK_HEIGHT);
|
||||||
|
out->z = (chunkunit_t)(worldPos->z / CHUNK_DEPTH);
|
||||||
|
}
|
||||||
|
|
||||||
|
chunkindex_t chunkPosToIndex(const chunkpos_t* pos) {
|
||||||
|
return (chunkindex_t)(
|
||||||
|
(pos->z * MAP_CHUNK_WIDTH * MAP_CHUNK_HEIGHT) +
|
||||||
|
(pos->y * MAP_CHUNK_WIDTH) +
|
||||||
|
pos->x
|
||||||
|
);
|
||||||
}
|
}
|
||||||
@@ -8,8 +8,8 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include "dusk.h"
|
#include "dusk.h"
|
||||||
|
|
||||||
#define CHUNK_WIDTH 4
|
#define CHUNK_WIDTH 16
|
||||||
#define CHUNK_HEIGHT 4
|
#define CHUNK_HEIGHT 16
|
||||||
#define CHUNK_DEPTH 32
|
#define CHUNK_DEPTH 32
|
||||||
#define CHUNK_TILE_COUNT (CHUNK_WIDTH * CHUNK_HEIGHT * CHUNK_DEPTH)
|
#define CHUNK_TILE_COUNT (CHUNK_WIDTH * CHUNK_HEIGHT * CHUNK_DEPTH)
|
||||||
|
|
||||||
@@ -18,7 +18,7 @@
|
|||||||
#define MAP_CHUNK_DEPTH 1
|
#define MAP_CHUNK_DEPTH 1
|
||||||
#define MAP_CHUNK_COUNT (MAP_CHUNK_WIDTH * MAP_CHUNK_HEIGHT * MAP_CHUNK_DEPTH)
|
#define MAP_CHUNK_COUNT (MAP_CHUNK_WIDTH * MAP_CHUNK_HEIGHT * MAP_CHUNK_DEPTH)
|
||||||
|
|
||||||
typedef int32_t worldunit_t;
|
typedef int16_t worldunit_t;
|
||||||
typedef int16_t chunkunit_t;
|
typedef int16_t chunkunit_t;
|
||||||
typedef int8_t chunkindex_t;
|
typedef int8_t chunkindex_t;
|
||||||
|
|
||||||
@@ -39,4 +39,20 @@ typedef struct chunkpos_t {
|
|||||||
* @param worldPos The world position.
|
* @param worldPos The world position.
|
||||||
* @param out The output chunk position.
|
* @param out The output chunk position.
|
||||||
*/
|
*/
|
||||||
void chunkPosToWorldPos(const chunkpos_t* chunkPos, worldpos_t* out);
|
void chunkPosToWorldPos(const chunkpos_t* chunkPos, worldpos_t* out);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts a chunk position to a world position.
|
||||||
|
*
|
||||||
|
* @param worldPos The world position.
|
||||||
|
* @param out The output chunk position.
|
||||||
|
*/
|
||||||
|
void worldPosToChunkPos(const worldpos_t* worldPos, chunkpos_t* out);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts a chunk position to a world position.
|
||||||
|
*
|
||||||
|
* @param worldPos The world position.
|
||||||
|
* @param out The output chunk position.
|
||||||
|
*/
|
||||||
|
chunkindex_t chunkPosToIndex(const chunkpos_t* pos);
|
||||||
Reference in New Issue
Block a user