#ifndef CREATURELIB_EVENTDATA_HPP #define CREATURELIB_EVENTDATA_HPP #include "../Models/DamageSource.hpp" #include "EventDataKind.hpp" namespace CreatureLib::Battling { // Predeclare some classes. class Creature; class EventData { public: virtual ~EventData() = default; virtual EventDataKind GetKind() = 0; }; class DamageEvent : public EventData { Creature* _creature; DamageSource _damageSource; uint32_t _originalHealth; uint32_t _newHealth; public: DamageEvent(Creature* c, DamageSource s, uint32_t oHealth, uint32_t newHealth) : _creature(c), _damageSource(s), _originalHealth(oHealth), _newHealth(newHealth) {} EventDataKind GetKind() override { return EventDataKind ::Damage; } Creature* GetCreature() const { return _creature; } DamageSource GetDamageSource() const { return _damageSource; } 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