From 5aa04a4b15b6437cc772b2b5cae47983d41fd5c2 Mon Sep 17 00:00:00 2001 From: Deukhoofd Date: Fri, 7 Aug 2020 11:02:37 +0200 Subject: [PATCH] Add TurnStart, TurnEnd and ExperienceGain event triggers. Signed-off-by: Deukhoofd --- src/Battling/EventHooks/EventData.hpp | 26 +++++++++++++++++++++++ src/Battling/EventHooks/EventDataKind.hpp | 2 +- src/Battling/Models/Battle.cpp | 10 +++++---- src/Battling/Models/Creature.cpp | 3 +++ 4 files changed, 36 insertions(+), 5 deletions(-) diff --git a/src/Battling/EventHooks/EventData.hpp b/src/Battling/EventHooks/EventData.hpp index 32989d5..5cccb4f 100644 --- a/src/Battling/EventHooks/EventData.hpp +++ b/src/Battling/EventHooks/EventData.hpp @@ -67,6 +67,32 @@ namespace CreatureLib::Battling { const ArbUt::BorrowedPtr& GetNewCreature() const noexcept { return _newCreature; } }; + class TurnStartEvent : public EventData { + public: + TurnStartEvent() {} + EventDataKind GetKind() const noexcept override { return EventDataKind ::TurnStart; } + }; + + class TurnEndEvent : public EventData { + public: + TurnEndEvent() {} + EventDataKind GetKind() const noexcept override { return EventDataKind ::TurnEnd; } + }; + + class ExperienceGainEvent : public EventData { + ArbUt::BorrowedPtr _creature; + uint32_t _previousExperience; + uint32_t _newExperience; + + public: + ExperienceGainEvent(const ArbUt::BorrowedPtr& creature, uint32_t previousExp, uint32_t newExp) + : _creature(creature), _previousExperience(previousExp), _newExperience(newExp) {} + EventDataKind GetKind() const noexcept override { return EventDataKind ::ExperienceGain; } + const ArbUt::BorrowedPtr& GetCreature() const noexcept { return _creature; } + uint32_t GetPreviousExperience() const noexcept { return _previousExperience; } + uint32_t GetNewExperience() const noexcept { return _newExperience; } + }; + class DisplayTextEvent : public EventData { const ArbUt::StringView _text; diff --git a/src/Battling/EventHooks/EventDataKind.hpp b/src/Battling/EventHooks/EventDataKind.hpp index cd1aae2..a1f52ec 100644 --- a/src/Battling/EventHooks/EventDataKind.hpp +++ b/src/Battling/EventHooks/EventDataKind.hpp @@ -3,7 +3,7 @@ #include namespace CreatureLib::Battling { - ENUM(EventDataKind, uint8_t, Damage, Heal, Faint, Switch, DisplayText) + ENUM(EventDataKind, uint8_t, Damage, Heal, Faint, Switch, TurnStart, TurnEnd, ExperienceGain, DisplayText) } #endif // CREATURELIB_EVENTDATAKIND_HPP diff --git a/src/Battling/Models/Battle.cpp b/src/Battling/Models/Battle.cpp index a1170db..dfa8c9b 100644 --- a/src/Battling/Models/Battle.cpp +++ b/src/Battling/Models/Battle.cpp @@ -1,6 +1,6 @@ #include "Battle.hpp" #include -#include "../../Library/Exceptions/NotImplementedException.hpp" +#include #include "../Flow/TurnHandler.hpp" #include "../Flow/TurnOrdering.hpp" @@ -19,7 +19,7 @@ bool Battle::CanUse(const ArbUt::BorrowedPtr& choice) { } bool Battle::TrySetChoice(BaseTurnChoice* choice) { - AssertNotNull(choice); + AssertNotNull(choice) if (!CanUse(choice)) return false; choice->GetUser()->GetBattleSide()->SetChoice(choice); @@ -42,7 +42,7 @@ void Battle::CheckChoicesSetAndRun() { } catch (const CreatureException& e) { throw e; } catch (const std::exception& e) { - THROW_CREATURE("Exception during choices set validation: '" << e.what() << "'."); + THROW_CREATURE("Exception during choices set validation: '" << e.what() << "'.") } auto choices = std::vector>(_numberOfSides * _creaturesPerSide); @@ -76,7 +76,8 @@ void Battle::CheckChoicesSetAndRun() { } catch (const std::exception& e) { THROW_CREATURE("Exception during turn ordering: '" << e.what() << "'.") } - this->_currentTurnQueue.reset(new ChoiceQueue(choices)); + this->_currentTurnQueue = std::make_unique(choices); + TriggerEventListener(); try { TurnHandler::RunTurn(this->_currentTurnQueue); } catch (const CreatureException& e) { @@ -87,6 +88,7 @@ void Battle::CheckChoicesSetAndRun() { if (this->_currentTurnQueue->HasCompletedQueue) { this->_currentTurnQueue = nullptr; } + TriggerEventListener(); } ArbUt::BorrowedPtr Battle::GetCurrentTurnQueue() const noexcept { return _currentTurnQueue; } diff --git a/src/Battling/Models/Creature.cpp b/src/Battling/Models/Creature.cpp index 5cd4e4a..479f6d2 100644 --- a/src/Battling/Models/Creature.cpp +++ b/src/Battling/Models/Creature.cpp @@ -213,6 +213,9 @@ void Battling::Creature::AddExperience(uint32_t amount) { if (level >= maxLevel) { exp = _library->GetGrowthRateLibrary()->CalculateExperience(this->GetSpecies()->GetGrowthRate(), maxLevel); } + if (_battle != nullptr) { + _battle->TriggerEventListener(this, _experience, exp); + } _experience = exp; _level = level; }