]> git.lizzy.rs Git - minetest.git/blobdiff - src/materials.cpp
GameDef compiles
[minetest.git] / src / materials.cpp
index e3a24b9e34f8d16d58b5da7396e70ceabf3472cc..d89b1e07950aced430c3cff2730f15dfdac422dc 100644 (file)
@@ -1,20 +1,36 @@
 #include "materials.h"
 #include "mapnode.h"
+#include "nodedef.h"
+#include "tooldef.h"
 
-// NOTE: DEPRECATED
-
-DiggingPropertiesList * getDiggingPropertiesList(u8 content)
+DiggingProperties getDiggingProperties(u16 content, ToolDiggingProperties *tp,
+               INodeDefManager *nodemgr)
 {
-       return &content_features(content).digging_properties;
-}
+       assert(tp);
+       const MaterialProperties &mp = nodemgr->get(content).material;
+       if(mp.diggability == DIGGABLE_NOT)
+               return DiggingProperties(false, 0, 0);
+       if(mp.diggability == DIGGABLE_CONSTANT)
+               return DiggingProperties(true, mp.constant_time, 0);
 
-DiggingProperties getDiggingProperties(u8 content, const std::string &tool)
-{
-       DiggingPropertiesList *mprop = getDiggingPropertiesList(content);
-       if(mprop == NULL)
-               // Not diggable
-               return DiggingProperties();
-       
-       return mprop->get(tool);
+       float time = tp->basetime;
+       time += tp->dt_weight * mp.weight;
+       time += tp->dt_crackiness * mp.crackiness;
+       time += tp->dt_crumbliness * mp.crumbliness;
+       time += tp->dt_cuttability * mp.cuttability;
+       if(time < 0.2)
+               time = 0.2;
+
+       float durability = tp->basedurability;
+       durability += tp->dd_weight * mp.weight;
+       durability += tp->dd_crackiness * mp.crackiness;
+       durability += tp->dd_crumbliness * mp.crumbliness;
+       durability += tp->dd_cuttability * mp.cuttability;
+       if(durability < 1)
+               durability = 1;
+
+       float wear = 1.0 / durability;
+       u16 wear_i = wear/65535.;
+       return DiggingProperties(true, time, wear_i);
 }