Compile time option to change bit size of level.
Some checks failed
continuous-integration/drone/push Build is failing

Signed-off-by: Deukhoofd <Deukhoofd@gmail.com>
This commit is contained in:
2020-08-19 20:11:00 +02:00
parent ba97fa8579
commit 39e1295013
17 changed files with 70 additions and 36 deletions

View File

@@ -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 {

View File

@@ -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 {

View File

@@ -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); }
};
}

View File

@@ -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;
};
}

View File

@@ -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.");

View File

@@ -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);

View File

@@ -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]; }
};
}

View File

@@ -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; }
};