From 8d4860f5534b105c35e2b2a640163461076f321d Mon Sep 17 00:00:00 2001 From: Deukhoofd Date: Thu, 13 Feb 2020 14:48:09 +0100 Subject: [PATCH] Support for Heal function for Creatures. --- src/Battling/EventHooks/EventData.hpp | 14 ++++++++++++++ src/Battling/Models/Creature.cpp | 13 +++++++++++++ src/Battling/Models/Creature.hpp | 2 ++ 3 files changed, 29 insertions(+) diff --git a/src/Battling/EventHooks/EventData.hpp b/src/Battling/EventHooks/EventData.hpp index f23f364..32bc0f9 100644 --- a/src/Battling/EventHooks/EventData.hpp +++ b/src/Battling/EventHooks/EventData.hpp @@ -28,6 +28,20 @@ namespace CreatureLib::Battling { uint32_t GetOriginalHealth() const { return _originalHealth; } uint32_t GetNewHealth() const { return _newHealth; } }; + + class HealEvent : public EventData { + Creature* _creature; + uint32_t _originalHealth; + uint32_t _newHealth; + + public: + HealEvent(Creature* c, uint32_t oHealth, uint32_t newHealth) + : _creature(c), _originalHealth(oHealth), _newHealth(newHealth) {} + EventDataKind GetKind() override { return EventDataKind ::Damage; } + Creature* GetCreature() const { return _creature; } + uint32_t GetOriginalHealth() const { return _originalHealth; } + uint32_t GetNewHealth() const { return _newHealth; } + }; } #endif // CREATURELIB_EVENTDATA_HPP diff --git a/src/Battling/Models/Creature.cpp b/src/Battling/Models/Creature.cpp index 4ffc26d..a12015a 100644 --- a/src/Battling/Models/Creature.cpp +++ b/src/Battling/Models/Creature.cpp @@ -112,6 +112,19 @@ void Battling::Creature::Damage(uint32_t damage, Battling::DamageSource source) } } +void Battling::Creature::Heal(uint32_t amount) { + if (amount > GetMaxHealth() - _currentHealth) { + amount = GetMaxHealth() - _currentHealth; + } + // HOOK: On Heal + auto newHealth = _currentHealth + amount; + auto battle = this->GetBattle(); + if (battle != nullptr) { + battle->TriggerEventListener(new HealEvent(this, _currentHealth, newHealth)); + } + _currentHealth = newHealth; +} + void Battling::Creature::OverrideActiveTalent(const std::string& talent) { _hasOverridenTalent = true; _activeTalent->OnRemove(); diff --git a/src/Battling/Models/Creature.hpp b/src/Battling/Models/Creature.hpp index b2a0e6d..f9ccc19 100644 --- a/src/Battling/Models/Creature.hpp +++ b/src/Battling/Models/Creature.hpp @@ -98,8 +98,10 @@ namespace CreatureLib::Battling { [[nodiscard]] const std::vector& GetTypes() const; [[nodiscard]] bool HasType(uint8_t type) const; + uint32_t GetMaxHealth() const { return _boostedStats.GetHealth(); } void ChangeLevel(int8_t amount); void Damage(uint32_t damage, DamageSource source); + void Heal(uint32_t amount); void OverrideActiveTalent(const std::string& talent); void AddExperience(uint32_t amount);