aboutsummaryrefslogtreecommitdiff
path: root/src/materials.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/materials.h')
-rw-r--r--src/materials.h98
1 files changed, 98 insertions, 0 deletions
diff --git a/src/materials.h b/src/materials.h
new file mode 100644
index 000000000..ae2deac88
--- /dev/null
+++ b/src/materials.h
@@ -0,0 +1,98 @@
+/*
+Minetest-c55
+Copyright (C) 2010 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
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License along
+with this program; if not, write to the Free Software Foundation, Inc.,
+51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+
+#ifndef MATERIALS_HEADER
+#define MATERIALS_HEADER
+
+/*
+ Material properties
+*/
+
+#include "common_irrlicht.h"
+#include "inventory.h"
+#include <string>
+
+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;
+};
+
+class MaterialProperties
+{
+public:
+ MaterialProperties()
+ {
+ dstream<<__FUNCTION_NAME<<std::endl;
+ }
+
+ void setDiggingProperties(const std::string toolname,
+ const DiggingProperties &prop)
+ {
+ m_digging_properties[toolname] = prop;
+ }
+
+ DiggingProperties getDiggingProperties(const std::string toolname)
+ {
+ core::map<std::string, DiggingProperties>::Node *n;
+ n = m_digging_properties.find(toolname);
+ if(n == NULL)
+ {
+ // Not diggable by this tool, try to get defaults
+ n = m_digging_properties.find("");
+ if(n == NULL)
+ {
+ // Not diggable at all
+ return DiggingProperties();
+ }
+ }
+ // Return found properties
+ return n->getValue();
+ }
+
+private:
+ // toolname="": default properties (digging by hand)
+ // Key is toolname
+ core::map<std::string, DiggingProperties> m_digging_properties;
+};
+
+void initializeMaterialProperties();
+
+// Material correspond to the CONTENT_* constants
+MaterialProperties * getMaterialProperties(u8 material);
+// For getting the default properties, set tool=""
+DiggingProperties getDiggingProperties(u8 material, const std::string &tool);
+
+#endif
+