Trigger event when stat boost changes.
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
Signed-off-by: Deukhoofd <Deukhoofd@gmail.com>
This commit is contained in:
parent
987f60ee85
commit
abccc23851
|
@ -50,3 +50,10 @@ DESTRUCTOR(AttackUseEvent);
|
||||||
|
|
||||||
export const char* CreatureLib_DisplayTextEvent_GetText(const DisplayTextEvent* p) { return p->GetText().c_str(); }
|
export const char* CreatureLib_DisplayTextEvent_GetText(const DisplayTextEvent* p) { return p->GetText().c_str(); }
|
||||||
export void CreatureLib_DisplayTextEvent_Destruct(const DisplayTextEvent* p) { delete p; }
|
export void CreatureLib_DisplayTextEvent_Destruct(const DisplayTextEvent* p) { delete p; }
|
||||||
|
|
||||||
|
BORROWED_GET_FUNC(ChangeStatBoostEvent, GetCreature, const Creature*);
|
||||||
|
SIMPLE_GET_FUNC(ChangeStatBoostEvent, GetStatistic, CreatureLib::Library::Statistic);
|
||||||
|
SIMPLE_GET_FUNC(ChangeStatBoostEvent, GetOldValue, int8_t);
|
||||||
|
SIMPLE_GET_FUNC(ChangeStatBoostEvent, GetNewValue, int8_t);
|
||||||
|
|
||||||
|
DESTRUCTOR(ChangeStatBoostEvent);
|
||||||
|
|
|
@ -9,7 +9,6 @@
|
||||||
#define export extern "C" [[maybe_unused]]
|
#define export extern "C" [[maybe_unused]]
|
||||||
|
|
||||||
#define CreatureLibException 2;
|
#define CreatureLibException 2;
|
||||||
#define __FILENAME__ (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__)
|
|
||||||
|
|
||||||
class ExceptionHandler {
|
class ExceptionHandler {
|
||||||
static std::string _creatureLibLastException;
|
static std::string _creatureLibLastException;
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
|
|
||||||
#include "Events/AttackUseEvent.hpp"
|
#include "Events/AttackUseEvent.hpp"
|
||||||
#include "Events/ChangeSpeciesEvent.hpp"
|
#include "Events/ChangeSpeciesEvent.hpp"
|
||||||
|
#include "Events/ChangeStatEvent.hpp"
|
||||||
#include "Events/ChangeVariantEvent.hpp"
|
#include "Events/ChangeVariantEvent.hpp"
|
||||||
#include "Events/DamageEvent.hpp"
|
#include "Events/DamageEvent.hpp"
|
||||||
#include "Events/DisplayTextEvent.hpp"
|
#include "Events/DisplayTextEvent.hpp"
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
|
|
||||||
namespace CreatureLib::Battling {
|
namespace CreatureLib::Battling {
|
||||||
ENUM(EventDataKind, uint8_t, Damage, Heal, Faint, Switch, TurnStart, TurnEnd, ExperienceGain, Miss, DisplayText,
|
ENUM(EventDataKind, uint8_t, Damage, Heal, Faint, Switch, TurnStart, TurnEnd, ExperienceGain, Miss, DisplayText,
|
||||||
ChangeSpecies, ChangeVariant, AttackUse)
|
ChangeSpecies, ChangeVariant, AttackUse, ChangeStatBoost)
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // CREATURELIB_EVENTDATAKIND_HPP
|
#endif // CREATURELIB_EVENTDATAKIND_HPP
|
||||||
|
|
|
@ -0,0 +1,26 @@
|
||||||
|
#ifndef CHANGESTATEVENT_HPP
|
||||||
|
#define CHANGESTATEVENT_HPP
|
||||||
|
|
||||||
|
#include "EventData.hpp"
|
||||||
|
|
||||||
|
namespace CreatureLib::Battling {
|
||||||
|
class ChangeStatBoostEvent final : public EventData {
|
||||||
|
const ArbUt::BorrowedPtr<Creature> _creature;
|
||||||
|
const CreatureLib::Library::Statistic _statistic;
|
||||||
|
const int8_t _oldValue;
|
||||||
|
const int8_t _newValue;
|
||||||
|
|
||||||
|
public:
|
||||||
|
ChangeStatBoostEvent(const ArbUt::BorrowedPtr<Creature>& creature, CreatureLib::Library::Statistic statistic,
|
||||||
|
int8_t oldValue, int8_t newValue) noexcept
|
||||||
|
: _creature(creature), _statistic(statistic), _oldValue(oldValue), _newValue(newValue) {}
|
||||||
|
|
||||||
|
EventDataKind GetKind() const noexcept override { return EventDataKind ::ChangeStatBoost; }
|
||||||
|
const ArbUt::BorrowedPtr<Creature>& GetCreature() const noexcept { return _creature; }
|
||||||
|
CreatureLib::Library::Statistic GetStatistic() const noexcept { return _statistic; }
|
||||||
|
int8_t GetOldValue() const noexcept { return _oldValue; }
|
||||||
|
int8_t GetNewValue() const noexcept { return _newValue; }
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // CHANGESTATEVENT_HPP
|
|
@ -109,10 +109,15 @@ namespace CreatureLib::Battling {
|
||||||
|
|
||||||
bool Creature::ChangeStatBoost(Library::Statistic stat, int8_t diffAmount) {
|
bool Creature::ChangeStatBoost(Library::Statistic stat, int8_t diffAmount) {
|
||||||
bool changed = false;
|
bool changed = false;
|
||||||
|
auto oldValue = this->_statBoost.GetStat(stat);
|
||||||
if (diffAmount > 0)
|
if (diffAmount > 0)
|
||||||
changed = this->_statBoost.IncreaseStatBy(stat, diffAmount);
|
changed = this->_statBoost.IncreaseStatBy(stat, diffAmount);
|
||||||
else
|
else
|
||||||
changed = this->_statBoost.DecreaseStatBy(stat, -diffAmount);
|
changed = this->_statBoost.DecreaseStatBy(stat, -diffAmount);
|
||||||
|
if (this->GetBattle().HasValue()) {
|
||||||
|
auto newValue = this->_statBoost.GetStat(stat);
|
||||||
|
this->GetBattle().GetValue()->TriggerEventListener<ChangeStatBoostEvent>(this, stat, oldValue, newValue);
|
||||||
|
}
|
||||||
this->RecalculateBoostedStat(stat);
|
this->RecalculateBoostedStat(stat);
|
||||||
return changed;
|
return changed;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue