]> git.lizzy.rs Git - dragonblocks_alpha.git/blob - src/item.h
c7940063e22261fe935ae44aa58abe03a89d5987
[dragonblocks_alpha.git] / src / item.h
1 #ifndef _ITEM_H_
2 #define _ITEM_H_
3
4 #include <stdbool.h>
5 #include <stddef.h>
6 #include "dig.h"
7 #include "types.h"
8
9 typedef enum {
10         ITEM_UNKNOWN,
11         ITEM_NONE,
12         ITEM_PICKAXE,
13         ITEM_AXE,
14         ITEM_SHOVEL,
15         COUNT_ITEM,
16 } ItemType;
17
18 typedef struct {
19         ItemType type;
20         u32 count; // i know future me is going to thank me for making it big
21         void *data;
22 } ItemStack;
23
24 typedef struct {
25         bool stackable;
26         size_t data_size;
27         DigClass dig_class;
28         struct {
29                 void (*create)(ItemStack *stack);
30                 void (*delete)(ItemStack *stack);
31                 void (*serialize)(Blob *buffer, void *data);
32                 void (*deserialize)(Blob *buffer, void *data);
33         } callbacks;
34 } ItemDef;
35
36 void item_stack_initialize(ItemStack *stack);
37 void item_stack_destroy(ItemStack *stack);
38
39 void item_stack_set(ItemStack *stack, ItemType type, u32 count, Blob buffer);
40 void item_stack_serialize(ItemStack *stack, SerializedItemStack *serialized);
41 void item_stack_deserialize(ItemStack *stack, SerializedItemStack *serialized);
42
43 extern ItemDef item_def[];
44
45 #endif // _ITEM_H_