69 lines
2.6 KiB
C++
69 lines
2.6 KiB
C++
#ifndef CREATURELIB_EVENTDATA_HPP
|
|
#define CREATURELIB_EVENTDATA_HPP
|
|
|
|
#include <Arbutils/Memory/BorrowedPtr.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() const noexcept = 0;
|
|
};
|
|
|
|
class DamageEvent : public EventData {
|
|
ArbUt::BorrowedPtr<Creature> _creature;
|
|
DamageSource _damageSource;
|
|
uint32_t _originalHealth;
|
|
uint32_t _newHealth;
|
|
|
|
public:
|
|
DamageEvent(Creature* c, DamageSource s, uint32_t oHealth, uint32_t newHealth) noexcept
|
|
: _creature(c), _damageSource(s), _originalHealth(oHealth), _newHealth(newHealth) {}
|
|
EventDataKind GetKind() const noexcept override { return EventDataKind ::Damage; }
|
|
const ArbUt::BorrowedPtr<Creature>& GetCreature() const noexcept { return _creature; }
|
|
DamageSource GetDamageSource() const noexcept { return _damageSource; }
|
|
uint32_t GetOriginalHealth() const noexcept { return _originalHealth; }
|
|
uint32_t GetNewHealth() const noexcept { return _newHealth; }
|
|
};
|
|
|
|
class HealEvent : public EventData {
|
|
ArbUt::BorrowedPtr<Creature> _creature;
|
|
uint32_t _originalHealth;
|
|
uint32_t _newHealth;
|
|
|
|
public:
|
|
HealEvent(ArbUt::BorrowedPtr<Creature> c, uint32_t oHealth, uint32_t newHealth) noexcept
|
|
: _creature(c), _originalHealth(oHealth), _newHealth(newHealth) {}
|
|
EventDataKind GetKind() const noexcept override { return EventDataKind ::Heal; }
|
|
const ArbUt::BorrowedPtr<Creature>& GetCreature() const noexcept { return _creature; }
|
|
uint32_t GetOriginalHealth() const noexcept { return _originalHealth; }
|
|
uint32_t GetNewHealth() const noexcept { return _newHealth; }
|
|
};
|
|
|
|
class FaintEvent : public EventData {
|
|
ArbUt::BorrowedPtr<Creature> _creature;
|
|
|
|
public:
|
|
FaintEvent(ArbUt::BorrowedPtr<Creature> c) noexcept : _creature(c) {}
|
|
EventDataKind GetKind() const noexcept override { return EventDataKind ::Faint; }
|
|
const ArbUt::BorrowedPtr<Creature>& GetCreature() const noexcept { return _creature; }
|
|
};
|
|
|
|
class DisplayTextEvent : public EventData {
|
|
const ArbUt::StringView _text;
|
|
|
|
public:
|
|
DisplayTextEvent(const ArbUt::StringView& text) noexcept : _text(text) {}
|
|
EventDataKind GetKind() const noexcept override { return EventDataKind ::DisplayText; }
|
|
const ArbUt::StringView& GetText() const noexcept { return _text; }
|
|
};
|
|
|
|
}
|
|
|
|
#endif // CREATURELIB_EVENTDATA_HPP
|