From ad9cbf0670c5af536eccd95eff51194173eab72d Mon Sep 17 00:00:00 2001 From: Deukhoofd Date: Sun, 19 Apr 2020 17:42:32 +0200 Subject: [PATCH] Implements GetRandomAttack method on LearnableAttacks. --- src/Library/CreatureData/CreatureMoves.cpp | 8 ----- src/Library/CreatureData/CreatureMoves.hpp | 33 ------------------- src/Library/CreatureData/LearnableAttacks.hpp | 15 +++++++-- src/Library/CreatureData/SpeciesVariant.hpp | 1 - 4 files changed, 13 insertions(+), 44 deletions(-) delete mode 100644 src/Library/CreatureData/CreatureMoves.cpp delete mode 100644 src/Library/CreatureData/CreatureMoves.hpp diff --git a/src/Library/CreatureData/CreatureMoves.cpp b/src/Library/CreatureData/CreatureMoves.cpp deleted file mode 100644 index 7410845..0000000 --- a/src/Library/CreatureData/CreatureMoves.cpp +++ /dev/null @@ -1,8 +0,0 @@ -#include "CreatureMoves.hpp" -#include - -CreatureLib::Library::LevelMove::LevelMove(uint8_t level, std::string name) : _level(level), _name(std::move(name)) {} - -uint8_t CreatureLib::Library::LevelMove::GetLevel() const { return this->_level; } - -std::string CreatureLib::Library::LevelMove::GetName() const { return this->_name; } diff --git a/src/Library/CreatureData/CreatureMoves.hpp b/src/Library/CreatureData/CreatureMoves.hpp deleted file mode 100644 index d3b8c71..0000000 --- a/src/Library/CreatureData/CreatureMoves.hpp +++ /dev/null @@ -1,33 +0,0 @@ -#ifndef CREATURELIB_CREATUREMOVES_HPP -#define CREATURELIB_CREATUREMOVES_HPP - -#include -#include -#include - -namespace CreatureLib::Library { - class LevelMove { - private: - uint8_t _level; - std::string _name; - - public: - LevelMove(uint8_t level, std::string name); - [[nodiscard]] inline uint8_t GetLevel() const; - [[nodiscard]] inline std::string GetName() const; - }; - - class CreatureMoves { - private: - std::vector _levelMoves; - std::vector _eggMoves; - std::vector _machineMoves; - std::vector _tutorMoves; - std::vector _variantDependentMoves; - - public: - // TODO: Public API funcs - }; -} - -#endif // CREATURELIB_CREATUREMOVES_HPP diff --git a/src/Library/CreatureData/LearnableAttacks.hpp b/src/Library/CreatureData/LearnableAttacks.hpp index eb92180..469ff1c 100644 --- a/src/Library/CreatureData/LearnableAttacks.hpp +++ b/src/Library/CreatureData/LearnableAttacks.hpp @@ -4,6 +4,7 @@ #include #include #include +#include #include #include "../Attacks/AttackData.hpp" @@ -12,19 +13,29 @@ using namespace Arbutils::Collections; namespace CreatureLib::Library { class LearnableAttacks { Dictionary> _learnedByLevel; + std::unordered_set _distinctAttacks; public: - LearnableAttacks(size_t levelAttackCapacity) + explicit LearnableAttacks(size_t levelAttackCapacity) : _learnedByLevel(Dictionary>(levelAttackCapacity)) { for (auto kv : _learnedByLevel) { - for (auto attack : kv.second) + for (auto attack : kv.second) { AssertNotNull(attack) + _distinctAttacks.insert(attack); + } } } + virtual ~LearnableAttacks() = default; + void AddLevelMove(uint8_t level, const AttackData* attack); const List& GetAttacksForLevel(uint8_t level) const; + + virtual const AttackData* GetRandomAttack(Arbutils::Random rand = Arbutils::Random()) { + auto val = rand.Get(_distinctAttacks.size()); + return *std::next(_distinctAttacks.begin(), val); + } }; } diff --git a/src/Library/CreatureData/SpeciesVariant.hpp b/src/Library/CreatureData/SpeciesVariant.hpp index 288aea8..9e7a535 100644 --- a/src/Library/CreatureData/SpeciesVariant.hpp +++ b/src/Library/CreatureData/SpeciesVariant.hpp @@ -6,7 +6,6 @@ #include #include #include "../StatisticSet.hpp" -#include "CreatureMoves.hpp" #include "LearnableAttacks.hpp" #include "TalentIndex.hpp" using ConstString = Arbutils::CaseInsensitiveConstString;