X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Ftool.h;h=509561a1645466f9381833714a65621466c3f035;hb=37b7f094e3ea502339794f64e8bad22444c6fb54;hp=49d069aac3dccd432516afd0ebb08a4fd822a7eb;hpb=5fc791ac9a15ea6f234ca2d23041c83679255746;p=oweals%2Fminetest.git diff --git a/src/tool.h b/src/tool.h index 49d069aac..509561a16 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,40 +20,127 @@ with this program; if not, write to the Free Software Foundation, Inc., #ifndef TOOL_HEADER #define TOOL_HEADER +#include "irrlichttypes.h" #include +#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::map times; + int maxlevel; + int uses; + + ToolGroupCap(): + maxlevel(1), + uses(20) + {} + + bool getTime(int rating, float *time) const + { + std::map::const_iterator i = times.find(rating); + if(i == times.end()){ + *time = 0; + return false; + } + *time = i->second; + return true; + } +}; + + +// CLANG SUCKS DONKEY BALLS +typedef std::map ToolGCMap; +typedef std::map DamageGroup; + +struct ToolCapabilities +{ + float full_punch_interval; + int max_drop_level; + // CLANG SUCKS DONKEY BALLS + ToolGCMap groupcaps; + DamageGroup damageGroups; + + ToolCapabilities( + float full_punch_interval_=1.4, + int max_drop_level_=1, + // CLANG SUCKS DONKEY BALLS + ToolGCMap groupcaps_=ToolGCMap(), + 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 DigParams +{ + 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, u16 a_wear=0, + std::string a_main_group=""): + diggable(a_diggable), + time(a_time), + wear(a_wear), + main_group(a_main_group) + {} +}; + +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 +{ + bool did_punch; + int damage; + int wear; + + PunchDamageResult(): + did_punch(false), + damage(0), + wear(0) {} }; -std::string tool_get_imagename(const std::string &toolname); +struct ItemStack; -ToolDiggingProperties tool_get_digging_properties(const std::string &toolname); +PunchDamageResult getPunchDamage( + const ItemGroupList &armor_groups, + const ToolCapabilities *toolcap, + const ItemStack *punchitem, + float time_from_last_punch +); #endif