From 0712851e3e1d9f58cde35665faf33a0368717a74 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Madar=C3=A1sz?= Date: Mon, 11 Jan 2021 15:42:36 +0100 Subject: [PATCH] world api --- code/apps/server/header/blocks.h | 8 ++++++-- code/apps/server/header/world.h | 5 ++++- code/apps/server/source/blocks.c | 10 +++++----- code/apps/server/source/world.c | 17 ++++++++++++++++- 4 files changed, 31 insertions(+), 9 deletions(-) diff --git a/code/apps/server/header/blocks.h b/code/apps/server/header/blocks.h index f7500ab..cf18ff4 100644 --- a/code/apps/server/header/blocks.h +++ b/code/apps/server/header/blocks.h @@ -6,9 +6,13 @@ #define BLOCKS_ERROR_NOTFOUND -0x0002 #define BLOCKS_ERROR_INVALID -0x0003 +typedef enum { + BLOCK_FLAG_COLLISION = (1 << 0) +} block_flags; + int32_t blocks_init(void); int32_t blocks_destroy(void); // persisting buffer -char *blocks_get_name(uint32_t id); -uint32_t blocks_get_flags(uint32_t id); +char *blocks_get_name(uint8_t id); +uint32_t blocks_get_flags(uint8_t id); diff --git a/code/apps/server/header/world.h b/code/apps/server/header/world.h index 49d4534..d4fe9b6 100644 --- a/code/apps/server/header/world.h +++ b/code/apps/server/header/world.h @@ -7,4 +7,7 @@ #define WORLD_ERROR_INVALID_DIMENSIONS -0x0003 #define WORLD_ERROR_INVALID_BUFFER -0x0004 -int32_t world_gen(int32_t seed, uint8_t width, uint8_t height, uint8_t *buffer, uint32_t size); +int32_t world_gen(int32_t seed, uint8_t width, uint8_t height); +int32_t world_destroy(void); + +uint32_t world_buf(uint8_t const **ptr); diff --git a/code/apps/server/source/blocks.c b/code/apps/server/source/blocks.c index bcc5a65..f2ac048 100644 --- a/code/apps/server/source/blocks.c +++ b/code/apps/server/source/blocks.c @@ -6,7 +6,7 @@ #define BLOCK_NAMELEN 80 typedef struct { - uint32_t id; + uint8_t id; char name[BLOCK_NAMELEN]; uint32_t flags; } block; @@ -16,11 +16,11 @@ static uint32_t blocks_count = 0; int blocks_comparer(void const *a, void const *b) { block *ba = (block*)a; - uint32_t bb = *(uint32_t*)b; + uint8_t bb = *(uint8_t*)b; return ba->id < bb ? -1 : ba->id > bb; } -static block *blocks_find(uint32_t id) { +static block *blocks_find(uint8_t id) { ZPL_ASSERT_NOT_NULL(blocks); int32_t index = zpl_binary_search((void*)blocks, blocks_count, sizeof(block), (void*)&id, blocks_comparer); ZPL_ASSERT_MSG(index != -1, "block could not be found"); @@ -39,12 +39,12 @@ int32_t blocks_destroy(void) { return BLOCKS_ERROR_NONE; } -char *blocks_get_name(uint32_t id) { +char *blocks_get_name(uint8_t id) { ZPL_ASSERT_NOT_NULL(blocks); return blocks_find(id)->name; } -uint32_t blocks_get_flags(uint32_t id) { +uint32_t blocks_get_flags(uint8_t id) { ZPL_ASSERT_NOT_NULL(blocks); return blocks_find(id)->flags; } diff --git a/code/apps/server/source/world.c b/code/apps/server/source/world.c index 3aade0c..cf3c15a 100644 --- a/code/apps/server/source/world.c +++ b/code/apps/server/source/world.c @@ -1,5 +1,20 @@ #include "world.h" +#include "zpl.h" -int32_t world_gen(int32_t seed, uint8_t width, uint8_t height, uint8_t *buffer, uint32_t size) { +static uint8_t *world = NULL; +static uint32_t world_size = 0; + +int32_t world_gen(int32_t seed, uint8_t width, uint8_t height) { return WORLD_ERROR_NONE; } + +int32_t world_destroy(void) { + return WORLD_ERROR_NONE; +} + +uint32_t world_buf(uint8_t const **ptr) { + ZPL_ASSERT_NOT_NULL(world); + ZPL_ASSERT_NOT_NULL(ptr); + *ptr = world; + return world_size; +}