]> git.lizzy.rs Git - dragonfireclient.git/blob - src/materials.cpp
Modified windows build parameters a bit to make it build
[dragonfireclient.git] / src / materials.cpp
1 #include "materials.h"
2
3 #define MATERIAL_PROPERTIES_COUNT 256
4
5 // These correspond to the CONTENT_* constants
6 MaterialProperties g_material_properties[MATERIAL_PROPERTIES_COUNT];
7
8 bool g_material_properties_initialized = false;
9
10 void setStoneLikeDiggingProperties(u8 material, float toughness)
11 {
12         g_material_properties[material].setDiggingProperties("",
13                         DiggingProperties(true, 15.0*toughness, 0));
14         
15         g_material_properties[material].setDiggingProperties("WPick",
16                         DiggingProperties(true, 1.3*toughness, 65535./30.*toughness));
17         g_material_properties[material].setDiggingProperties("STPick",
18                         DiggingProperties(true, 0.65*toughness, 65535./100.*toughness));
19
20         /*g_material_properties[material].setDiggingProperties("MesePick",
21                         DiggingProperties(true, 0.0*toughness, 65535./20.*toughness));*/
22 }
23
24 void initializeMaterialProperties()
25 {
26         /*
27                 Now, the g_material_properties array is already initialized
28                 by the constructors to such that no digging is possible.
29
30                 Add some digging properties to them.
31         */
32         
33         setStoneLikeDiggingProperties(CONTENT_STONE, 1.0);
34
35         g_material_properties[CONTENT_GRASS].setDiggingProperties("",
36                         DiggingProperties(true, 0.4, 0));
37
38         g_material_properties[CONTENT_TORCH].setDiggingProperties("",
39                         DiggingProperties(true, 0.0, 0));
40
41         g_material_properties[CONTENT_TREE].setDiggingProperties("",
42                         DiggingProperties(true, 1.5, 0));
43
44         g_material_properties[CONTENT_LEAVES].setDiggingProperties("",
45                         DiggingProperties(true, 0.35, 0));
46
47         g_material_properties[CONTENT_GRASS_FOOTSTEPS].setDiggingProperties("",
48                         DiggingProperties(true, 0.5, 0));
49
50         setStoneLikeDiggingProperties(CONTENT_MESE, 0.5);
51
52         g_material_properties[CONTENT_MUD].setDiggingProperties("",
53                         DiggingProperties(true, 0.4, 0));
54
55         setStoneLikeDiggingProperties(CONTENT_COALSTONE, 1.5);
56
57         g_material_properties[CONTENT_WOOD].setDiggingProperties("",
58                         DiggingProperties(true, 1.0, 0));
59         
60         g_material_properties[CONTENT_SAND].setDiggingProperties("",
61                         DiggingProperties(true, 0.4, 0));
62         
63         g_material_properties[CONTENT_CHEST].setDiggingProperties("",
64                         DiggingProperties(true, 1.0, 0));
65         
66         setStoneLikeDiggingProperties(CONTENT_FURNACE, 1.0);
67         
68         g_material_properties[CONTENT_SIGN_WALL].setDiggingProperties("",
69                         DiggingProperties(true, 0.0, 0));
70
71         /*
72                 Add MesePick to everything
73         */
74         for(u16 i=0; i<MATERIAL_PROPERTIES_COUNT; i++)
75         {
76                 g_material_properties[i].setDiggingProperties("MesePick",
77                                 DiggingProperties(true, 0.0, 65535./1337));
78         }
79
80         g_material_properties_initialized = true;
81 }
82
83 MaterialProperties * getMaterialProperties(u8 material)
84 {
85         assert(g_material_properties_initialized);
86         return &g_material_properties[material];
87 }
88
89 DiggingProperties getDiggingProperties(u8 material, const std::string &tool)
90 {
91         MaterialProperties *mprop = getMaterialProperties(material);
92         if(mprop == NULL)
93                 // Not diggable
94                 return DiggingProperties();
95         
96         return mprop->getDiggingProperties(tool);
97 }
98