]> git.lizzy.rs Git - dragonblocks_alpha.git/blobdiff - src/map.c
Generate spawn hut
[dragonblocks_alpha.git] / src / map.c
index 8bd7268e3ed3c247600e60e8320e154fd2fa19f7..5da5acd8d58b8a1e3d535cd4aa7b8ca6faebcb61 100644 (file)
--- a/src/map.c
+++ b/src/map.c
@@ -2,7 +2,7 @@
 #include <stdbool.h>
 #include <unistd.h>
 #include <math.h>
-#include <endian.h>
+#include <endian.h/endian.h>
 #include <string.h>
 #include "map.h"
 #include "util.h"
@@ -12,25 +12,25 @@ Map *map_create(MapCallbacks callbacks)
        Map *map = malloc(sizeof(Map));
        pthread_rwlock_init(&map->rwlck, NULL);
        pthread_rwlock_init(&map->cached_rwlck, NULL);
-       map->sectors = bintree_create(sizeof(v2s32));
+       map->sectors = bintree_create(sizeof(v2s32), NULL);
        map->cached = NULL;
        map->callbacks = callbacks;
        return map;
 }
 
-static void free_block(void *value, void *arg)
+static void free_block(BintreeNode *node, void *arg)
 {
        Map *map = arg;
 
        if (map->callbacks.delete_block)
-               map->callbacks.delete_block(value);
+               map->callbacks.delete_block(node->value);
 
-       map_free_block(value);
+       map_free_block(node->value);
 }
 
-static void free_sector(void *value, void *arg)
+static void free_sector(BintreeNode *node, void *arg)
 {
-       MapSector *sector = value;
+       MapSector *sector = node->value;
 
        bintree_clear(&sector->blocks, &free_block, arg);
        pthread_rwlock_destroy(&sector->rwlck);
@@ -62,7 +62,7 @@ MapSector *map_get_sector(Map *map, v2s32 pos, bool create)
                sector = malloc(sizeof(MapSector));
                pthread_rwlock_init(&sector->rwlck, NULL);
                sector->pos = pos;
-               sector->blocks = bintree_create(sizeof(s32));
+               sector->blocks = bintree_create(sizeof(s32), NULL);
 
                bintree_add_node(&map->sectors, nodeptr, &pos, sector);
        }
@@ -147,7 +147,7 @@ bool map_deserialize_node(int fd, MapNode *node)
                return false;
 
        if (type >= NODE_UNLOADED)
-               type = NODE_INVALID;
+               type = NODE_UNKNOWN;
 
        *node = map_node_create(type);
 
@@ -182,7 +182,7 @@ bool map_deserialize_block(MapBlock *block, const char *data, size_t size)
                node.type = be32toh(node.type);
 
                if (node.type >= NODE_UNLOADED)
-                       node.type = NODE_INVALID;
+                       node.type = NODE_UNKNOWN;
 
                if (node_definitions[node.type].deserialize)
                        node_definitions[node.type].deserialize(&node);
@@ -217,9 +217,9 @@ void map_set_node(Map *map, v3s32 pos, MapNode node, bool create, void *arg)
        if (block) {
                pthread_mutex_lock(&block->mtx);
                if (! map->callbacks.set_node || map->callbacks.set_node(block, offset, &node, arg)) {
+                       block->data[offset.x][offset.y][offset.z] = node;
                        if (map->callbacks.after_set_node)
                                map->callbacks.after_set_node(block, offset, arg);
-                       block->data[offset.x][offset.y][offset.z] = node;
                }
                pthread_mutex_unlock(&block->mtx);
        }
@@ -229,7 +229,6 @@ MapNode map_node_create(Node type)
 {
        MapNode node;
        node.type = type;
-       memset(&node.state, 0, sizeof(NodeState));
 
        if (node.type != NODE_UNLOADED && node_definitions[node.type].create)
                node_definitions[node.type].create(&node);