equipment-test/modules/tabtargeting/equipment.cpp
2025-06-13 15:12:22 +02:00

155 lines
3.6 KiB
C++

#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}
{}
int DamageEvent::get_initial_damage() const {
return this->initial_damage;
}
ActorBody *DamageEvent::get_source() const {
return this->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<DamageStats> stats) {
this->stats = stats;
}
Ref<DamageStats> 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) {
if(this->weapon.is_valid())
event = this->weapon->apply(event, target);
if(this->helmet.is_valid())
event = this->helmet->apply(event, target);
if(this->chest.is_valid())
event = this->chest->apply(event, target);
if(this->legs.is_valid())
event = this->legs->apply(event, target);
return event;
}
void Equipment::set_weapon(Ref<Weapon> weapon) {
this->weapon = weapon;
}
Ref<Weapon> Equipment::get_weapon() const {
return this->weapon;
}
void Equipment::set_helmet(Ref<Armor> helmet) {
this->helmet = helmet;
}
Ref<Armor> Equipment::get_helmet() const {
return this->helmet;
}
void Equipment::set_chest(Ref<Armor> chest) {
this->chest = chest;
}
Ref<Armor> Equipment::get_chest() const {
return this->chest;
}
void Equipment::set_legs(Ref<Armor> legs) {
this->legs = legs;
}
Ref<Armor> Equipment::get_legs() const {
return this->legs;
}