]> git.lizzy.rs Git - dragonblocks_alpha.git/blob - src/node.h
3e7e9307fb25202abbec7da37b444054b9e1ab1f
[dragonblocks_alpha.git] / src / node.h
1 #ifndef _NODE_H_
2 #define _NODE_H_
3
4 #include <stdbool.h>
5 #include <stddef.h>
6 #include "types.h"
7
8 #define NODE_DEFINITION(type) ((type) < NODE_UNLOADED ? &node_definitions[NODE_UNKNOWN] : &node_definitions[(type)]);
9
10 typedef enum {
11         NODE_UNKNOWN,       // Used for unknown nodes received from server (caused by outdated clients)
12         NODE_AIR,
13         NODE_GRASS,
14         NODE_DIRT,
15         NODE_STONE,
16         NODE_SNOW,
17         NODE_OAK_WOOD,
18         NODE_OAK_LEAVES,
19         NODE_PINE_WOOD,
20         NODE_PINE_LEAVES,
21         NODE_PALM_WOOD,
22         NODE_PALM_LEAVES,
23         NODE_SAND,
24         NODE_WATER,
25         NODE_LAVA,
26         NODE_VULCANO_STONE,
27         NODE_UNLOADED,      // Used for nodes in unloaded chunks
28 } NodeType;
29
30 struct TerrainNode;
31
32 typedef struct {
33         bool solid;
34         size_t data_size;
35         void (*create)(struct TerrainNode *node);
36         void (*delete)(struct TerrainNode *node);
37         void (*serialize)(Blob *buffer, void *data);
38         void (*deserialize)(Blob *buffer, void *data);
39 } NodeDefinition;
40
41 extern NodeDefinition node_definitions[];
42
43 #endif