]> git.lizzy.rs Git - dragonfireclient.git/blobdiff - src/materials.h
Tool progress bar tweaking
[dragonfireclient.git] / src / materials.h
index 62bce16694a677f672db290b0405a7fd9eda6eb5..face7d5df7277784bc6337a4b66147cd45424c91 100644 (file)
@@ -1,6 +1,6 @@
 /*
 Minetest-c55
-Copyright (C) 2010 celeron55, Perttu Ahola <celeron55@gmail.com>
+Copyright (C) 2010-2011 celeron55, Perttu Ahola <celeron55@gmail.com>
 
 This program is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
@@ -26,6 +26,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 
 #include "common_irrlicht.h"
 #include <string>
+#include <iostream>
 
 enum Diggability
 {
@@ -55,44 +56,84 @@ struct MaterialProperties
        // Sword is best for cuttable light stuff.
        float cuttability;
        // If high, ignites easily
-       //float flammability;
+       float flammability;
 
        MaterialProperties():
                diggability(DIGGABLE_NOT),
                constant_time(0.5),
-               weight(1),
-               crackiness(1),
-               crumbliness(1),
-               cuttability(1)
+               weight(0),
+               crackiness(0),
+               crumbliness(0),
+               cuttability(0),
+               flammability(0)
        {}
+
+       void serialize(std::ostream &os);
+       void deSerialize(std::istream &is);
+};
+
+struct ToolDiggingProperties
+{
+       // time = basetime + sum(feature here * feature in MaterialProperties)
+       float full_punch_interval;
+       float basetime;
+       float dt_weight;
+       float dt_crackiness;
+       float dt_crumbliness;
+       float dt_cuttability;
+       float basedurability;
+       float dd_weight;
+       float dd_crackiness;
+       float dd_crumbliness;
+       float dd_cuttability;
+
+       ToolDiggingProperties(float full_punch_interval_=2.0,
+                       float a=0.75, float b=0, float c=0, float d=0, float e=0,
+                       float f=50, float g=0, float h=0, float i=0, float j=0);
+
+       void serialize(std::ostream &os);
+       void deSerialize(std::istream &is);
 };
 
 struct DiggingProperties
 {
-       DiggingProperties():
-               diggable(false),
-               time(0.0),
-               wear(0)
-       {
-       }
-       DiggingProperties(bool a_diggable, float a_time, u16 a_wear):
-               diggable(a_diggable),
-               time(a_time),
-               wear(a_wear)
-       {
-       }
        bool diggable;
        // Digging time in seconds
        float time;
        // Caused wear
        u16 wear;
+
+       DiggingProperties(bool a_diggable=false, float a_time=0, u16 a_wear=0):
+               diggable(a_diggable),
+               time(a_time),
+               wear(a_wear)
+       {}
 };
 
-class ToolDiggingProperties;
 class INodeDefManager;
 
-DiggingProperties getDiggingProperties(u16 content, ToolDiggingProperties *tp,
-               INodeDefManager *nodemgr);
+DiggingProperties getDiggingProperties(const MaterialProperties *mp,
+               const ToolDiggingProperties *tp, float time_from_last_punch);
+
+DiggingProperties getDiggingProperties(const MaterialProperties *mp,
+               const ToolDiggingProperties *tp);
+
+DiggingProperties getDiggingProperties(u16 content,
+               const ToolDiggingProperties *tp, INodeDefManager *nodemgr);
+
+struct HittingProperties
+{
+       s16 hp;
+       s16 wear;
+
+       HittingProperties(s16 hp_=0, s16 wear_=0):
+               hp(hp_),
+               wear(wear_)
+       {}
+};
+
+HittingProperties getHittingProperties(const MaterialProperties *mp,
+               const ToolDiggingProperties *tp, float time_from_last_punch);
 
 #endif