]> git.lizzy.rs Git - dragonblocks_alpha.git/blob - src/item.c
Add items
[dragonblocks_alpha.git] / src / item.c
1 #include <stdlib.h>
2 #include "item.h"
3
4 void item_stack_initialize(ItemStack *stack)
5 {
6         stack->type = ITEM_NONE;
7         stack->count = 1;
8         stack->data = NULL;
9
10         if (item_defs[stack->type].create)
11                 item_defs[stack->type].create(stack);   
12 }
13
14 void item_stack_destroy(ItemStack *stack)
15 {
16         if (item_defs[stack->type].delete)
17                 item_defs[stack->type].delete(stack);   
18
19         if (stack->data) {
20                 free(stack->data);
21                 stack->data = NULL;
22         }
23 }
24
25 void item_stack_set(ItemStack *stack, ItemType type, u32 count, Blob buffer)
26 {
27         item_stack_destroy(stack);
28
29         stack->type = type;
30         stack->count = count;
31         stack->data = item_defs[stack->type].data_size > 0 ?
32                 malloc(item_defs[stack->type].data_size) : NULL;
33
34         if (item_defs[stack->type].create)
35                 item_defs[stack->type].create(stack);
36
37         if (item_defs[stack->type].deserialize)
38                 item_defs[stack->type].deserialize(&buffer, stack->data);
39 }
40
41 void item_stack_serialize(ItemStack *stack, SerializedItemStack *serialized)
42 {
43         serialized->type = stack->type;
44         serialized->count = stack->count;
45         serialized->data = (Blob) {0, NULL};
46
47         if (item_defs[stack->type].serialize)
48                 item_defs[stack->type].serialize(&serialized->data, stack->data);
49 }
50
51 void item_stack_deserialize(ItemStack *stack, SerializedItemStack *serialized)
52 {
53         ItemType type = serialized->type;
54
55         if (type >= COUNT_ITEM)
56                 type = ITEM_UNKNOWN;
57         
58         item_stack_set(stack, type, serialized->count, serialized->data);
59 }
60
61 ItemDef item_defs[COUNT_ITEM] = {
62         // unknown
63         {
64                 .stackable = false,
65                 .data_size = 0,
66                 .create = NULL,
67                 .delete = NULL,
68                 .serialize = NULL,
69                 .deserialize = NULL,
70         },
71         // none
72         {
73                 .stackable = false,
74                 .data_size = 0,
75                 .create = NULL,
76                 .delete = NULL,
77                 .serialize = NULL,
78                 .deserialize = NULL,
79         },
80         // pickaxe
81         {
82                 .stackable = false,
83                 .data_size = 0,
84                 .create = NULL,
85                 .delete = NULL,
86                 .serialize = NULL,
87                 .deserialize = NULL,
88         },
89         // axe
90         {
91                 .stackable = false,
92                 .data_size = 0,
93                 .create = NULL,
94                 .delete = NULL,
95                 .serialize = NULL,
96                 .deserialize = NULL,
97         },
98 };