diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index ca5a7756d..cc783855c 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -94,6 +94,7 @@ configure_file( ) set(common_SRCS + tool.cpp mapnode_contentfeatures.cpp luaentity_common.cpp scriptapi.cpp diff --git a/src/inventory.cpp b/src/inventory.cpp index ec1a81b18..ea5b69636 100644 --- a/src/inventory.cpp +++ b/src/inventory.cpp @@ -34,6 +34,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "player.h" #include "log.h" #include "mapnode_contentfeatures.h" +#include "tool.h" /* InventoryItem @@ -166,6 +167,15 @@ InventoryItem *MaterialItem::createCookResult() const return item_material_create_cook_result(m_content); } +/* + ToolItem +*/ + +std::string ToolItem::getImageBasename() const +{ + return tool_get_imagename(m_toolname); +} + /* CraftItem */ diff --git a/src/inventory.h b/src/inventory.h index c202d5533..b163fde90 100644 --- a/src/inventory.h +++ b/src/inventory.h @@ -52,7 +52,7 @@ public: virtual InventoryItem* clone() = 0; #ifndef SERVER // Return the name of the image for this item - virtual std::string getBasename() const { return ""; } + virtual std::string getImageBasename() const { return ""; } // Shall return an image of the item (or NULL) virtual video::ITexture * getImage() const { return NULL; } // Shall return an image of the item without embellishments (or NULL) @@ -300,44 +300,16 @@ public: { return new ToolItem(m_toolname, m_wear); } + + std::string getImageBasename() const; + #ifndef SERVER - std::string getBasename() const { - if(m_toolname == "WPick") - return "tool_woodpick.png"; - else if(m_toolname == "STPick") - return "tool_stonepick.png"; - else if(m_toolname == "SteelPick") - return "tool_steelpick.png"; - else if(m_toolname == "MesePick") - return "tool_mesepick.png"; - else if(m_toolname == "WShovel") - return "tool_woodshovel.png"; - else if(m_toolname == "STShovel") - return "tool_stoneshovel.png"; - else if(m_toolname == "SteelShovel") - return "tool_steelshovel.png"; - else if(m_toolname == "WAxe") - return "tool_woodaxe.png"; - else if(m_toolname == "STAxe") - return "tool_stoneaxe.png"; - else if(m_toolname == "SteelAxe") - return "tool_steelaxe.png"; - else if(m_toolname == "WSword") - return "tool_woodsword.png"; - else if(m_toolname == "STSword") - return "tool_stonesword.png"; - else if(m_toolname == "SteelSword") - return "tool_steelsword.png"; - else - return "cloud.png"; -} - video::ITexture * getImage() const { if(g_texturesource == NULL) return NULL; - std::string basename = getBasename(); + std::string basename = getImageBasename(); /* Calculate a progress value with sane amount of @@ -358,7 +330,7 @@ public: if(g_texturesource == NULL) return NULL; - return g_texturesource->getTextureRaw(getBasename()); + return g_texturesource->getTextureRaw(getImageBasename()); } #endif std::string getText() diff --git a/src/materials.cpp b/src/materials.cpp index a27691496..d905ca291 100644 --- a/src/materials.cpp +++ b/src/materials.cpp @@ -1,75 +1,7 @@ #include "materials.h" #include "mapnode.h" #include "mapnode_contentfeatures.h" - - -struct ToolProperties -{ - // time = basetime + sum(feature here * feature in MaterialProperties) - 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; - - ToolProperties(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): - basetime(a), - dt_weight(b), - dt_crackiness(c), - dt_crumbliness(d), - dt_cuttability(e), - basedurability(f), - dd_weight(g), - dd_crackiness(h), - dd_crumbliness(i), - dd_cuttability(j) - {} -}; - -ToolProperties getToolProperties(const std::string &toolname) -{ - // weight, crackiness, crumbleness, cuttability - if(toolname == "WPick") - return ToolProperties(2.0, 0,-1,2,0, 50, 0,0,0,0); - else if(toolname == "STPick") - return ToolProperties(1.5, 0,-1,2,0, 100, 0,0,0,0); - else if(toolname == "SteelPick") - return ToolProperties(1.0, 0,-1,2,0, 300, 0,0,0,0); - - else if(toolname == "MesePick") - return ToolProperties(0, 0,0,0,0, 1337, 0,0,0,0); - - else if(toolname == "WShovel") - return ToolProperties(2.0, 0.5,2,-1.5,0.3, 50, 0,0,0,0); - else if(toolname == "STShovel") - return ToolProperties(1.5, 0.5,2,-1.5,0.1, 100, 0,0,0,0); - else if(toolname == "SteelShovel") - return ToolProperties(1.0, 0.5,2,-1.5,0.0, 300, 0,0,0,0); - - // weight, crackiness, crumbleness, cuttability - else if(toolname == "WAxe") - return ToolProperties(2.0, 0.5,-0.2,1,-0.5, 50, 0,0,0,0); - else if(toolname == "STAxe") - return ToolProperties(1.5, 0.5,-0.2,1,-0.5, 100, 0,0,0,0); - else if(toolname == "SteelAxe") - return ToolProperties(1.0, 0.5,-0.2,1,-0.5, 300, 0,0,0,0); - - else if(toolname == "WSword") - return ToolProperties(3.0, 3,0,1,-1, 50, 0,0,0,0); - else if(toolname == "STSword") - return ToolProperties(2.5, 3,0,1,-1, 100, 0,0,0,0); - else if(toolname == "SteelSword") - return ToolProperties(2.0, 3,0,1,-1, 300, 0,0,0,0); - - // Properties of hand - return ToolProperties(0.5, 1,0,-1,0, 50, 0,0,0,0); -} +#include "tool.h" DiggingProperties getDiggingProperties(u16 material, const std::string &tool) { @@ -79,7 +11,7 @@ DiggingProperties getDiggingProperties(u16 material, const std::string &tool) if(mp.diggability == DIGGABLE_CONSTANT) return DiggingProperties(true, mp.constant_time, 0); - ToolProperties tp = getToolProperties(tool); + ToolDiggingProperties tp = tool_get_digging_properties(tool); float time = tp.basetime; time += tp.dt_weight * mp.weight; diff --git a/src/tool.cpp b/src/tool.cpp new file mode 100644 index 000000000..4a4f0e467 --- /dev/null +++ b/src/tool.cpp @@ -0,0 +1,93 @@ +/* +Minetest-c55 +Copyright (C) 2011 celeron55, Perttu Ahola + +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. +*/ + +#include "tool.h" + +std::string tool_get_imagename(const std::string &toolname) +{ + if(toolname == "WPick") + return "tool_woodpick.png"; + else if(toolname == "STPick") + return "tool_stonepick.png"; + else if(toolname == "SteelPick") + return "tool_steelpick.png"; + else if(toolname == "MesePick") + return "tool_mesepick.png"; + else if(toolname == "WShovel") + return "tool_woodshovel.png"; + else if(toolname == "STShovel") + return "tool_stoneshovel.png"; + else if(toolname == "SteelShovel") + return "tool_steelshovel.png"; + else if(toolname == "WAxe") + return "tool_woodaxe.png"; + else if(toolname == "STAxe") + return "tool_stoneaxe.png"; + else if(toolname == "SteelAxe") + return "tool_steelaxe.png"; + else if(toolname == "WSword") + return "tool_woodsword.png"; + else if(toolname == "STSword") + return "tool_stonesword.png"; + else if(toolname == "SteelSword") + return "tool_steelsword.png"; + else + return "cloud.png"; +} + +ToolDiggingProperties tool_get_digging_properties(const std::string &toolname) +{ + // weight, crackiness, crumbleness, cuttability + if(toolname == "WPick") + return ToolDiggingProperties(2.0, 0,-1,2,0, 50, 0,0,0,0); + else if(toolname == "STPick") + return ToolDiggingProperties(1.5, 0,-1,2,0, 100, 0,0,0,0); + else if(toolname == "SteelPick") + return ToolDiggingProperties(1.0, 0,-1,2,0, 300, 0,0,0,0); + + else if(toolname == "MesePick") + return ToolDiggingProperties(0, 0,0,0,0, 1337, 0,0,0,0); + + else if(toolname == "WShovel") + return ToolDiggingProperties(2.0, 0.5,2,-1.5,0.3, 50, 0,0,0,0); + else if(toolname == "STShovel") + return ToolDiggingProperties(1.5, 0.5,2,-1.5,0.1, 100, 0,0,0,0); + else if(toolname == "SteelShovel") + return ToolDiggingProperties(1.0, 0.5,2,-1.5,0.0, 300, 0,0,0,0); + + // weight, crackiness, crumbleness, cuttability + else if(toolname == "WAxe") + return ToolDiggingProperties(2.0, 0.5,-0.2,1,-0.5, 50, 0,0,0,0); + else if(toolname == "STAxe") + return ToolDiggingProperties(1.5, 0.5,-0.2,1,-0.5, 100, 0,0,0,0); + else if(toolname == "SteelAxe") + return ToolDiggingProperties(1.0, 0.5,-0.2,1,-0.5, 300, 0,0,0,0); + + else if(toolname == "WSword") + return ToolDiggingProperties(3.0, 3,0,1,-1, 50, 0,0,0,0); + else if(toolname == "STSword") + return ToolDiggingProperties(2.5, 3,0,1,-1, 100, 0,0,0,0); + else if(toolname == "SteelSword") + return ToolDiggingProperties(2.0, 3,0,1,-1, 300, 0,0,0,0); + + // Properties of hand + return ToolDiggingProperties(0.5, 1,0,-1,0, 50, 0,0,0,0); +} + + diff --git a/src/tool.h b/src/tool.h new file mode 100644 index 000000000..49d069aac --- /dev/null +++ b/src/tool.h @@ -0,0 +1,59 @@ +/* +Minetest-c55 +Copyright (C) 2011 celeron55, Perttu Ahola + +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 TOOL_HEADER +#define TOOL_HEADER + +#include + +struct ToolDiggingProperties +{ + // time = basetime + sum(feature here * feature in MaterialProperties) + 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 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): + basetime(a), + dt_weight(b), + dt_crackiness(c), + dt_crumbliness(d), + dt_cuttability(e), + basedurability(f), + dd_weight(g), + dd_crackiness(h), + dd_crumbliness(i), + dd_cuttability(j) + {} +}; + +std::string tool_get_imagename(const std::string &toolname); + +ToolDiggingProperties tool_get_digging_properties(const std::string &toolname); + +#endif +