#include "equipment.h" #include "macros.h" #include "tabtargeting/actor_body.h" DamageEvent::DamageEvent(int damage, ActorBody *source) : compound_damage{damage} , initial_damage{damage} , source{source} {} void DamageStats::_bind_methods() { BIND_PROPERTY(Variant::INT, damage_add); BIND_PROPERTY(Variant::INT, damage_mul); BIND_PROPERTY(Variant::INT, defend_add); BIND_PROPERTY(Variant::INT, defend_mul); } DamageEvent DamageStats::apply(DamageEvent event, ActorBody *owner) { if(owner == event.get_source()) { event.compound_damage *= this->damage_mul; event.compound_damage += this->damage_add; } else { event.compound_damage *= this->defend_mul; event.compound_damage += this->defend_add; } return event; } void DamageStats::set_damage_add(int val) { this->damage_add = val; } int DamageStats::get_damage_add() const { return this->damage_add; } void DamageStats::set_damage_mul(float val) { this->damage_mul = val; } float DamageStats::get_damage_mul() const { return this->damage_mul; } void DamageStats::set_defend_add(int val) { this->defend_add = val; } int DamageStats::get_defend_add() const { return this->defend_add; } void DamageStats::set_defend_mul(float val) { this->defend_mul = val; } float DamageStats::get_defend_mul() const { return this->defend_mul; } void EquipItem::_bind_methods() { BIND_HPROPERTY(Variant::OBJECT, stats, PROPERTY_HINT_RESOURCE_TYPE, "DamageStats"); } DamageEvent EquipItem::apply(DamageEvent event, ActorBody *owner) { return this->stats->apply(event, owner); } void EquipItem::set_stats(Ref stats) { this->stats = stats; } Ref EquipItem::get_stats() const { return this->stats; } void Weapon::_bind_methods() { BIND_PROPERTY(Variant::INT, base_damage); } void Weapon::set_base_damage(int amount) { this->base_damage = amount; } int Weapon::get_base_damage() const { return this->base_damage; } DamageEvent Weapon::create_base_damage_event(ActorBody *source) { return DamageEvent(this->base_damage, source); } void Armor::_bind_methods() { BIND_HPROPERTY(Variant::INT, armor_type, PROPERTY_HINT_ENUM, "Helmet, Chest, Legs"); } void Armor::set_armor_type(int type) { this->type = ArmorType(type); } int Armor::get_armor_type() const { return this->type; } void Equipment::_bind_methods() { BIND_HPROPERTY(Variant::OBJECT, weapon, PROPERTY_HINT_RESOURCE_TYPE, "Weapon"); BIND_HPROPERTY(Variant::OBJECT, helmet, PROPERTY_HINT_RESOURCE_TYPE, "Armor"); BIND_HPROPERTY(Variant::OBJECT, chest, PROPERTY_HINT_RESOURCE_TYPE, "Armor"); BIND_HPROPERTY(Variant::OBJECT, legs, PROPERTY_HINT_RESOURCE_TYPE, "Armor"); } DamageEvent Equipment::apply(DamageEvent event, ActorBody *target) { } void Equipment::set_weapon(Ref weapon) { this->weapon = weapon; } Ref Equipment::get_weapon() const { return this->weapon; } void Equipment::set_helmet(Ref helmet) { this->helmet = helmet; } Ref Equipment::get_helmet() const { return this->helmet; } void Equipment::set_chest(Ref chest) { this->chest = chest; } Ref Equipment::get_chest() const { return this->chest; } void Equipment::set_legs(Ref legs) { this->legs = legs; } Ref Equipment::get_legs() const { return this->legs; }