6 #include <dragonstd/bintree.h>
7 #include <dragonstd/list.h>
11 #define ITERATE_MAPBLOCK for (u8 x = 0; x < MAPBLOCK_SIZE; x++) for (u8 y = 0; y < MAPBLOCK_SIZE; y++) for (u8 z = 0; z < MAPBLOCK_SIZE; z++)
13 typedef struct MapNode
19 typedef MapNode MapBlockData[MAPBLOCK_SIZE][MAPBLOCK_SIZE][MAPBLOCK_SIZE];
31 pthread_rwlock_t rwlck;
38 void (*create_block)(MapBlock *block);
39 void (*delete_block)(MapBlock *block);
40 bool (*get_block)(MapBlock *block, bool create);
41 bool (*set_node) (MapBlock *block, v3u8 offset, MapNode *node, void *arg);
42 void (*after_set_node)(MapBlock *block, v3u8 offset, void *arg);
47 pthread_rwlock_t rwlck;
49 pthread_rwlock_t cached_rwlck;
51 MapCallbacks callbacks;
54 Map *map_create(MapCallbacks callbacks);
55 void map_delete(Map *map);
57 MapSector *map_get_sector(Map *map, v2s32 pos, bool create);
58 MapBlock *map_get_block(Map *map, v3s32 pos, bool create);
60 MapBlock *map_allocate_block(v3s32 pos);
61 void map_free_block(MapBlock *block);
63 Blob map_serialize_block(MapBlock *block);
64 bool map_deserialize_block(MapBlock *block, Blob buffer);
66 v3s32 map_node_to_block_pos(v3s32 pos, v3u8 *offset);
68 MapNode map_get_node(Map *map, v3s32 pos);
69 void map_set_node(Map *map, v3s32 pos, MapNode node, bool create, void *arg);
71 MapNode map_node_create(Node type, Blob buffer);
72 void map_node_delete(MapNode node);