diff options
Diffstat (limited to 'src/materials.h')
-rw-r--r-- | src/materials.h | 98 |
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 + |