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,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]; }
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user