]> git.lizzy.rs Git - dragonblocks_alpha.git/blob - src/map.h
Move code to src/
[dragonblocks_alpha.git] / src / map.h
1 #ifndef _MAP_H_
2 #define _MAP_H_
3
4 #include <stdbool.h>
5 #include "array.h"
6 #include "linkedlist.h"
7 #include "node.h"
8 #include "types.h"
9
10 #define ITERATE_MAPBLOCK for (u8 x = 0; x < 16; x++) for (u8 y = 0; y < 16; y++) for (u8 z = 0; z < 16; z++)
11
12 typedef struct
13 {
14         Node type;
15         LinkedList meta;
16 } MapNode;
17
18 typedef struct
19 {
20         MapNode data[16][16][16];
21         v3s32 pos;
22 } MapBlock;
23
24 typedef struct
25 {
26         Array blocks;
27         v2s32 pos;
28         u64 hash;
29 } MapSector;
30
31 typedef struct
32 {
33         Array sectors;
34 } Map;
35
36 MapSector *map_get_sector(Map *map, v2s32 pos, bool create);
37 MapBlock *map_get_block(Map *map, v3s32 pos, bool create);
38
39 bool map_deserialize_node(int fd, MapNode *buf);
40 bool map_serialize_block(int fd, MapBlock *block);
41 bool map_deserialize_block(int fd, Map *map);
42
43 void map_delete_block(MapBlock *); // ToDo
44 void map_unload_block(MapBlock *); // ToDo
45
46 v3s32 map_node_to_block_pos(v3s32 pos, v3u8 *offset);
47
48 MapNode map_get_node(Map *map, v3s32 pos);
49 void map_set_node(Map *map, v3s32 pos, MapNode node);
50 MapNode map_node_create(Node type);
51 void map_node_clear(MapNode *node);
52
53 Map *map_create();
54 void map_delete(Map *map);
55
56 #endif