diff --git a/CInterface/Library/LearnableAttacks.cpp b/CInterface/Library/LearnableAttacks.cpp index b5f1fab..372a72b 100644 --- a/CInterface/Library/LearnableAttacks.cpp +++ b/CInterface/Library/LearnableAttacks.cpp @@ -17,4 +17,12 @@ export const AttackData* const* CreatureLib_LearnableAttacks_GetAttacksForLevel( } export size_t CreatureLib_LearnableAttacks_GetAttacksForLevelCount(LearnableAttacks* p, uint8_t level) { return p->GetAttacksForLevel(level).Count(); +} + +export size_t CreatureLib_LearnableAttacks_GetDistinctLevelAttacksCount(LearnableAttacks* p) { + return p->GetDistinctLevelAttacks().size(); +} + +export const AttackData* const* CreatureLib_LearnableAttacks_GetDistinctLevelAttacks(LearnableAttacks* p) { + return p->GetDistinctLevelAttacks().cbegin().operator->(); } \ No newline at end of file diff --git a/src/Library/CreatureData/LearnableAttacks.cpp b/src/Library/CreatureData/LearnableAttacks.cpp index 16c6ac3..3c1dda9 100644 --- a/src/Library/CreatureData/LearnableAttacks.cpp +++ b/src/Library/CreatureData/LearnableAttacks.cpp @@ -10,5 +10,5 @@ void LearnableAttacks::AddLevelAttack(uint8_t level, const AttackData* attack) { levelData = {attack}; _learnedByLevel.Insert(level, levelData); } - _distinctAttacks.insert(attack); + _distinctLevelAttacks.insert(attack); } \ No newline at end of file diff --git a/src/Library/CreatureData/LearnableAttacks.hpp b/src/Library/CreatureData/LearnableAttacks.hpp index e075014..8959f02 100644 --- a/src/Library/CreatureData/LearnableAttacks.hpp +++ b/src/Library/CreatureData/LearnableAttacks.hpp @@ -12,7 +12,7 @@ namespace CreatureLib::Library { class LearnableAttacks { protected: ArbUt::Dictionary> _learnedByLevel; - std::unordered_set _distinctAttacks; + std::unordered_set _distinctLevelAttacks; public: explicit LearnableAttacks(size_t levelAttackCapacity) @@ -20,7 +20,7 @@ namespace CreatureLib::Library { for (auto kv : _learnedByLevel) { for (auto attack : kv.second) { AssertNotNull(attack) - _distinctAttacks.insert(attack); + _distinctLevelAttacks.insert(attack); } } } @@ -33,12 +33,16 @@ namespace CreatureLib::Library { return _learnedByLevel.Get(level); } + inline const std::unordered_set& GetDistinctLevelAttacks() const noexcept { + return _distinctLevelAttacks; + } + virtual const AttackData* GetRandomAttack(ArbUt::Random& rand) const { - if (_distinctAttacks.empty()) { + if (_distinctLevelAttacks.empty()) { return nullptr; } - auto val = rand.Get(_distinctAttacks.size()); - auto it = _distinctAttacks.begin(); + auto val = rand.Get(_distinctLevelAttacks.size()); + auto it = _distinctLevelAttacks.begin(); std::advance(it, val); return *it; }