Compile time option to change bit size of level.
Some checks failed
continuous-integration/drone/push Build is failing
Some checks failed
continuous-integration/drone/push Build is failing
Signed-off-by: Deukhoofd <Deukhoofd@gmail.com>
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
|
||||
using namespace CreatureLib::Library;
|
||||
|
||||
void LearnableAttacks::AddLevelAttack(uint8_t level, ArbUt::BorrowedPtr<const AttackData> attack) {
|
||||
void LearnableAttacks::AddLevelAttack(level_int_t level, ArbUt::BorrowedPtr<const AttackData> attack) {
|
||||
if (_learnedByLevel.Has(level)) {
|
||||
_learnedByLevel[level].Append(attack);
|
||||
} else {
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
#include <Arbutils/Memory/BorrowedPtr.hpp>
|
||||
#include <Arbutils/Random.hpp>
|
||||
#include <unordered_map>
|
||||
#include "../../Defines.hpp"
|
||||
#include "../Attacks/AttackData.hpp"
|
||||
|
||||
namespace CreatureLib::Library {
|
||||
@@ -22,7 +23,7 @@ namespace CreatureLib::Library {
|
||||
|
||||
virtual ~LearnableAttacks() = default;
|
||||
|
||||
void AddLevelAttack(uint8_t level, ArbUt::BorrowedPtr<const AttackData> attack);
|
||||
void AddLevelAttack(level_int_t level, ArbUt::BorrowedPtr<const AttackData> attack);
|
||||
|
||||
inline bool HasAttacksForLevel(uint8_t level) const noexcept { return _learnedByLevel.Has(level); }
|
||||
inline const ArbUt::List<ArbUt::BorrowedPtr<const AttackData>>& GetAttacksForLevel(uint8_t level) const {
|
||||
|
||||
@@ -2,21 +2,22 @@
|
||||
#define CREATURELIB_EXTERNGROWTHRATE_HPP
|
||||
|
||||
#include <Arbutils/Assert.hpp>
|
||||
#include "../../Defines.hpp"
|
||||
#include "GrowthRate.hpp"
|
||||
namespace CreatureLib::Library {
|
||||
class ExternGrowthRate : public GrowthRate {
|
||||
uint8_t (*_calcLevel)(uint32_t experience);
|
||||
uint32_t (*_calcExperience)(uint8_t level);
|
||||
level_int_t (*_calcLevel)(uint32_t experience);
|
||||
uint32_t (*_calcExperience)(level_int_t level);
|
||||
|
||||
public:
|
||||
inline ExternGrowthRate(uint8_t (*calcLevel)(uint32_t), uint32_t (*calcExperience)(uint8_t level))
|
||||
inline ExternGrowthRate(level_int_t (*calcLevel)(uint32_t), uint32_t (*calcExperience)(level_int_t level))
|
||||
: _calcLevel(calcLevel), _calcExperience(calcExperience) {
|
||||
AssertNotNull(calcLevel)
|
||||
AssertNotNull(calcExperience)
|
||||
}
|
||||
|
||||
uint8_t CalculateLevel(uint32_t experience) const override { return _calcLevel(experience); }
|
||||
uint32_t CalculateExperience(uint8_t level) const override { return _calcExperience(level); }
|
||||
level_int_t CalculateLevel(uint32_t experience) const override { return _calcLevel(experience); }
|
||||
uint32_t CalculateExperience(level_int_t level) const override { return _calcExperience(level); }
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -2,14 +2,15 @@
|
||||
#define CREATURELIB_GROWTHRATE_HPP
|
||||
|
||||
#include <cstdint>
|
||||
#include "../../Defines.hpp"
|
||||
|
||||
namespace CreatureLib::Library {
|
||||
class GrowthRate {
|
||||
public:
|
||||
virtual ~GrowthRate() = default;
|
||||
|
||||
[[nodiscard]] virtual uint8_t CalculateLevel(uint32_t experience) const = 0;
|
||||
[[nodiscard]] virtual uint32_t CalculateExperience(uint8_t level) const = 0;
|
||||
[[nodiscard]] virtual level_int_t CalculateLevel(uint32_t experience) const = 0;
|
||||
[[nodiscard]] virtual uint32_t CalculateExperience(level_int_t level) const = 0;
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@ uint8_t CreatureLib::Library::GrowthRateLibrary::CalculateLevel(uint32_t hash, u
|
||||
}
|
||||
|
||||
uint32_t CreatureLib::Library::GrowthRateLibrary::CalculateExperience(const ArbUt::BasicStringView& growthRate,
|
||||
uint8_t level) const {
|
||||
level_int_t level) const {
|
||||
auto find = _growthRates.find(growthRate);
|
||||
if (find == _growthRates.end()) {
|
||||
THROW("Invalid growth rate was requested.");
|
||||
@@ -27,7 +27,7 @@ uint32_t CreatureLib::Library::GrowthRateLibrary::CalculateExperience(const ArbU
|
||||
return find->second->CalculateExperience(level);
|
||||
}
|
||||
|
||||
uint32_t CreatureLib::Library::GrowthRateLibrary::CalculateExperience(uint32_t hash, uint8_t level) const {
|
||||
uint32_t CreatureLib::Library::GrowthRateLibrary::CalculateExperience(uint32_t hash, level_int_t level) const {
|
||||
auto find = _growthRates.find(hash);
|
||||
if (find == _growthRates.end()) {
|
||||
THROW("Invalid growth rate was requested.");
|
||||
|
||||
@@ -21,8 +21,8 @@ namespace CreatureLib::Library {
|
||||
|
||||
[[nodiscard]] uint8_t CalculateLevel(const ArbUt::BasicStringView& growthRate, uint32_t experience) const;
|
||||
[[nodiscard]] uint8_t CalculateLevel(uint32_t hash, uint32_t experience) const;
|
||||
[[nodiscard]] uint32_t CalculateExperience(const ArbUt::BasicStringView& growthRate, uint8_t level) const;
|
||||
[[nodiscard]] uint32_t CalculateExperience(uint32_t hash, uint8_t level) const;
|
||||
[[nodiscard]] uint32_t CalculateExperience(const ArbUt::BasicStringView& growthRate, level_int_t level) const;
|
||||
[[nodiscard]] uint32_t CalculateExperience(uint32_t hash, level_int_t level) const;
|
||||
|
||||
void AddGrowthRate(uint32_t hash, GrowthRate* rate);
|
||||
void AddGrowthRate(const ArbUt::StringView& name, GrowthRate* rate);
|
||||
|
||||
@@ -12,8 +12,8 @@ namespace CreatureLib::Library {
|
||||
public:
|
||||
LookupGrowthRate(const ArbUt::List<uint32_t>& experience) : _experience(experience) {}
|
||||
|
||||
uint8_t CalculateLevel(uint32_t experience) const override {
|
||||
for (uint8_t i = 0; i < _experience.Count(); i++) {
|
||||
level_int_t CalculateLevel(uint32_t experience) const override {
|
||||
for (level_int_t i = 0; i < _experience.Count(); i++) {
|
||||
if (_experience[i] > experience) {
|
||||
return i;
|
||||
}
|
||||
@@ -21,7 +21,7 @@ namespace CreatureLib::Library {
|
||||
return _experience[_experience.Count() - 1];
|
||||
}
|
||||
|
||||
uint32_t CalculateExperience(uint8_t level) const override { return _experience[level - 1]; }
|
||||
uint32_t CalculateExperience(level_int_t level) const override { return _experience[level - 1]; }
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -2,17 +2,18 @@
|
||||
#define CREATURELIB_LIBRARYSETTINGS_HPP
|
||||
|
||||
#include <cstdint>
|
||||
#include "../Defines.hpp"
|
||||
|
||||
namespace CreatureLib::Library {
|
||||
class LibrarySettings {
|
||||
uint8_t _maximalLevel;
|
||||
level_int_t _maximalLevel;
|
||||
uint8_t _maximalAttacks;
|
||||
|
||||
public:
|
||||
LibrarySettings(uint8_t maximalLevel, uint8_t maximalAttacks)
|
||||
LibrarySettings(level_int_t maximalLevel, uint8_t maximalAttacks)
|
||||
: _maximalLevel(maximalLevel), _maximalAttacks(maximalAttacks) {}
|
||||
|
||||
inline uint8_t GetMaximalLevel() const noexcept { return _maximalLevel; }
|
||||
inline level_int_t GetMaximalLevel() const noexcept { return _maximalLevel; }
|
||||
|
||||
inline uint8_t GetMaximalAttacks() const noexcept { return _maximalAttacks; }
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user