X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Ftool.h;h=67631fe79beb4c2ddcc60a867befde9c7c45c327;hb=3caad3f3c9e319ca67d63231e8c64b2ace855fff;hp=a2a94f7fc94f8fecc492ae5525a5b76687823f1a;hpb=abceeee92f99b84ebb79968269835a4f509bfb90;p=oweals%2Fminetest.git diff --git a/src/tool.h b/src/tool.h index a2a94f7fc..67631fe79 100644 --- a/src/tool.h +++ b/src/tool.h @@ -1,18 +1,18 @@ /* -Minetest-c55 -Copyright (C) 2011 celeron55, Perttu Ahola +Minetest +Copyright (C) 2010-2013 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 +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 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. +GNU Lesser General Public License for more details. -You should have received a copy of the GNU General Public License along +You should have received a copy of the GNU Lesser 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. */ @@ -20,63 +20,116 @@ with this program; if not, write to the Free Software Foundation, Inc., #ifndef TOOL_HEADER #define TOOL_HEADER +#include "irrlichttypes.h" #include +#include +#include "itemgroup.h" -struct ToolDiggingProperties +struct ToolGroupCap { - // 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::unordered_map times; + int maxlevel = 1; + int uses = 20; + + ToolGroupCap() {} + + bool getTime(int rating, float *time) const + { + std::unordered_map::const_iterator i = times.find(rating); + if (i == times.end()) { + *time = 0; + return false; + } + *time = i->second; + return true; + } +}; + + +typedef std::unordered_map ToolGCMap; +typedef std::unordered_map DamageGroup; + +struct ToolCapabilities +{ + float full_punch_interval; + int max_drop_level; + ToolGCMap groupcaps; + DamageGroup damageGroups; + + ToolCapabilities( + float full_punch_interval_=1.4, + int max_drop_level_=1, + const ToolGCMap &groupcaps_ = ToolGCMap(), + const DamageGroup &damageGroups_ = DamageGroup() + ): + full_punch_interval(full_punch_interval_), + max_drop_level(max_drop_level_), + groupcaps(groupcaps_), + damageGroups(damageGroups_) {} + + void serialize(std::ostream &os, u16 version) const; + void deSerialize(std::istream &is); }; -struct ToolDefinition +struct DigParams { - std::string imagename; - ToolDiggingProperties properties; - - ToolDefinition(){} - ToolDefinition(const std::string &imagename_, - ToolDiggingProperties properties_): - imagename(imagename_), - properties(properties_) + bool diggable; + // Digging time in seconds + float time; + // Caused wear + u16 wear; + std::string main_group; + + DigParams(bool a_diggable = false, float a_time = 0.0f, u16 a_wear = 0, + const std::string &a_main_group = ""): + diggable(a_diggable), + time(a_time), + wear(a_wear), + main_group(a_main_group) {} }; -class IToolDefManager +DigParams getDigParams(const ItemGroupList &groups, + const ToolCapabilities *tp, float time_from_last_punch); + +DigParams getDigParams(const ItemGroupList &groups, + const ToolCapabilities *tp); + +struct HitParams +{ + s16 hp; + s16 wear; + + HitParams(s16 hp_=0, s16 wear_=0): + hp(hp_), + wear(wear_) + {} +}; + +HitParams getHitParams(const ItemGroupList &armor_groups, + const ToolCapabilities *tp, float time_from_last_punch); + +HitParams getHitParams(const ItemGroupList &armor_groups, + const ToolCapabilities *tp); + +struct PunchDamageResult { -public: - IToolDefManager(){} - virtual ~IToolDefManager(){} - virtual bool registerTool(std::string toolname, const ToolDefinition &def)=0; - virtual ToolDefinition* getToolDefinition(const std::string &toolname)=0; - virtual std::string getImagename(const std::string &toolname)=0; - virtual ToolDiggingProperties getDiggingProperties( - const std::string &toolname)=0; + bool did_punch = false; + int damage = 0; + int wear = 0; + + PunchDamageResult() {} }; -IToolDefManager* createToolDefManager(); +struct ItemStack; + +PunchDamageResult getPunchDamage( + const ItemGroupList &armor_groups, + const ToolCapabilities *toolcap, + const ItemStack *punchitem, + float time_from_last_punch +); #endif