X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Ftool.h;h=59dd501f51de3a75b0694ff42cf47cf6c18df6cd;hb=48f885e3102cb1c4ebb3f5fddf2d7e70d95c0522;hp=49d069aac3dccd432516afd0ebb08a4fd822a7eb;hpb=5fc791ac9a15ea6f234ca2d23041c83679255746;p=dragonfireclient.git diff --git a/src/tool.h b/src/tool.h index 49d069aac..59dd501f5 100644 --- a/src/tool.h +++ b/src/tool.h @@ -1,59 +1,141 @@ /* -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. */ -#ifndef TOOL_HEADER -#define TOOL_HEADER +#pragma once +#include "irrlichttypes.h" #include +#include +#include "itemgroup.h" +#include -struct ToolDiggingProperties +struct ItemDefinition; + +struct ToolGroupCap +{ + std::unordered_map times; + int maxlevel = 1; + int uses = 20; + + ToolGroupCap() = default; + + 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; + } + + void toJson(Json::Value &object) const; + void fromJson(const Json::Value &json); +}; + + +typedef std::unordered_map ToolGCMap; +typedef std::unordered_map DamageGroup; + +struct ToolCapabilities { - // 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) + float full_punch_interval; + int max_drop_level; + ToolGCMap groupcaps; + DamageGroup damageGroups; + int punch_attack_uses; + + ToolCapabilities( + float full_punch_interval_ = 1.4f, + int max_drop_level_ = 1, + const ToolGCMap &groupcaps_ = ToolGCMap(), + const DamageGroup &damageGroups_ = DamageGroup(), + int punch_attack_uses_ = 0 + ): + full_punch_interval(full_punch_interval_), + max_drop_level(max_drop_level_), + groupcaps(groupcaps_), + damageGroups(damageGroups_), + punch_attack_uses(punch_attack_uses_) {} + + void serialize(std::ostream &os, u16 version) const; + void deSerialize(std::istream &is); + void serializeJson(std::ostream &os) const; + void deserializeJson(std::istream &is); }; -std::string tool_get_imagename(const std::string &toolname); +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.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) + {} +}; + +DigParams getDigParams(const ItemGroupList &groups, + const ToolCapabilities *tp); + +struct HitParams +{ + s16 hp; + u16 wear; + + HitParams(s16 hp_ = 0, u16 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 = false; + int damage = 0; + int wear = 0; + + PunchDamageResult() = default; +}; -ToolDiggingProperties tool_get_digging_properties(const std::string &toolname); +struct ItemStack; -#endif +PunchDamageResult getPunchDamage( + const ItemGroupList &armor_groups, + const ToolCapabilities *toolcap, + const ItemStack *punchitem, + float time_from_last_punch +); +f32 getToolRange(const ItemDefinition &def_selected, const ItemDefinition &def_hand);