X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Ftool.h;h=c2444a834c0100eee6b91cdbb40cd4fece03ead8;hb=refs%2Fheads%2Fmaster;hp=67631fe79beb4c2ddcc60a867befde9c7c45c327;hpb=1425c6def156840b359b90b4f32b9c7b8f005731;p=dragonfireclient.git diff --git a/src/tool.h b/src/tool.h index 67631fe79..c2444a834 100644 --- a/src/tool.h +++ b/src/tool.h @@ -17,13 +17,15 @@ 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 ItemDefinition; struct ToolGroupCap { @@ -31,7 +33,7 @@ struct ToolGroupCap int maxlevel = 1; int uses = 20; - ToolGroupCap() {} + ToolGroupCap() = default; bool getTime(int rating, float *time) const { @@ -43,6 +45,9 @@ struct ToolGroupCap *time = i->second; return true; } + + void toJson(Json::Value &object) const; + void fromJson(const Json::Value &json); }; @@ -55,21 +60,26 @@ struct ToolCapabilities int max_drop_level; ToolGCMap groupcaps; DamageGroup damageGroups; + int punch_attack_uses; ToolCapabilities( - float full_punch_interval_=1.4, - int max_drop_level_=1, + float full_punch_interval_ = 1.4f, + int max_drop_level_ = 1, const ToolGCMap &groupcaps_ = ToolGCMap(), - const DamageGroup &damageGroups_ = DamageGroup() + 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_) + 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); }; struct DigParams @@ -78,10 +88,10 @@ struct DigParams // Digging time in seconds float time; // Caused wear - u16 wear; + u32 wear; // u32 because wear could be 65536 (single-use tool) std::string main_group; - DigParams(bool a_diggable = false, float a_time = 0.0f, u16 a_wear = 0, + DigParams(bool a_diggable = false, float a_time = 0.0f, u32 a_wear = 0, const std::string &a_main_group = ""): diggable(a_diggable), time(a_time), @@ -91,24 +101,24 @@ struct DigParams }; DigParams getDigParams(const ItemGroupList &groups, - const ToolCapabilities *tp, float time_from_last_punch); - -DigParams getDigParams(const ItemGroupList &groups, - const ToolCapabilities *tp); + const ToolCapabilities *tp, + const u16 initial_wear = 0); struct HitParams { - s16 hp; - s16 wear; + s32 hp; + // Caused wear + u32 wear; // u32 because wear could be 65536 (single-use weapon) - HitParams(s16 hp_=0, s16 wear_=0): + HitParams(s32 hp_ = 0, u32 wear_ = 0): hp(hp_), wear(wear_) {} }; HitParams getHitParams(const ItemGroupList &armor_groups, - const ToolCapabilities *tp, float time_from_last_punch); + const ToolCapabilities *tp, float time_from_last_punch, + u16 initial_wear = 0); HitParams getHitParams(const ItemGroupList &armor_groups, const ToolCapabilities *tp); @@ -119,7 +129,7 @@ struct PunchDamageResult int damage = 0; int wear = 0; - PunchDamageResult() {} + PunchDamageResult() = default; }; struct ItemStack; @@ -128,8 +138,9 @@ PunchDamageResult getPunchDamage( const ItemGroupList &armor_groups, const ToolCapabilities *toolcap, const ItemStack *punchitem, - float time_from_last_punch + float time_from_last_punch, + u16 initial_wear = 0 ); -#endif - +u32 calculateResultWear(const u32 uses, const u16 initial_wear); +f32 getToolRange(const ItemDefinition &def_selected, const ItemDefinition &def_hand);