Used ClangFormat style guide I'm happy with.
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
@@ -1,16 +1,13 @@
|
||||
#include <cassert>
|
||||
#include "BattleLibrary.hpp"
|
||||
#include <cassert>
|
||||
|
||||
using namespace CreatureLib::Battling;
|
||||
|
||||
BattleLibrary::BattleLibrary(CreatureLib::Library::DataLibrary *staticLib,
|
||||
BattleStatCalculator *statCalculator,
|
||||
DamageLibrary* damageLibrary,
|
||||
CriticalLibrary* criticalLibrary, ScriptResolver* scriptResolver)
|
||||
: _staticLib(staticLib), _statCalculator(statCalculator),
|
||||
_damageLibrary(damageLibrary), _criticalLibrary(criticalLibrary),
|
||||
_scriptResolver(scriptResolver)
|
||||
{}
|
||||
BattleLibrary::BattleLibrary(CreatureLib::Library::DataLibrary* staticLib, BattleStatCalculator* statCalculator,
|
||||
DamageLibrary* damageLibrary, CriticalLibrary* criticalLibrary,
|
||||
ScriptResolver* scriptResolver)
|
||||
: _staticLib(staticLib), _statCalculator(statCalculator), _damageLibrary(damageLibrary),
|
||||
_criticalLibrary(criticalLibrary), _scriptResolver(scriptResolver) {}
|
||||
|
||||
BattleLibrary::~BattleLibrary() {
|
||||
delete _staticLib;
|
||||
@@ -20,40 +17,27 @@ BattleLibrary::~BattleLibrary() {
|
||||
delete _scriptResolver;
|
||||
}
|
||||
|
||||
const CreatureLib::Library::LibrarySettings& BattleLibrary::GetSettings() const {
|
||||
return _staticLib->GetSettings();
|
||||
}
|
||||
const CreatureLib::Library::LibrarySettings& BattleLibrary::GetSettings() const { return _staticLib->GetSettings(); }
|
||||
|
||||
const BattleStatCalculator *BattleLibrary::GetStatCalculator() const {
|
||||
return _statCalculator;
|
||||
}
|
||||
const BattleStatCalculator* BattleLibrary::GetStatCalculator() const { return _statCalculator; }
|
||||
|
||||
const CreatureLib::Library::SpeciesLibrary* BattleLibrary::GetSpeciesLibrary() const {
|
||||
return _staticLib->GetSpeciesLibrary();
|
||||
}
|
||||
|
||||
const CreatureLib::Library::ItemLibrary* BattleLibrary::GetItemLibrary() const {
|
||||
return _staticLib->GetItemLibrary();
|
||||
}
|
||||
const CreatureLib::Library::ItemLibrary* BattleLibrary::GetItemLibrary() const { return _staticLib->GetItemLibrary(); }
|
||||
|
||||
const CreatureLib::Library::AttackLibrary *BattleLibrary::GetAttackLibrary() const {
|
||||
const CreatureLib::Library::AttackLibrary* BattleLibrary::GetAttackLibrary() const {
|
||||
return _staticLib->GetAttackLibrary();
|
||||
}
|
||||
|
||||
const CreatureLib::Library::TypeLibrary *BattleLibrary::GetTypeLibrary() const {
|
||||
return _staticLib->GetTypeLibrary();
|
||||
}
|
||||
const CreatureLib::Library::TypeLibrary* BattleLibrary::GetTypeLibrary() const { return _staticLib->GetTypeLibrary(); }
|
||||
|
||||
const DamageLibrary *BattleLibrary::GetDamageLibrary() const {
|
||||
return _damageLibrary;
|
||||
}
|
||||
const DamageLibrary* BattleLibrary::GetDamageLibrary() const { return _damageLibrary; }
|
||||
|
||||
const CriticalLibrary *BattleLibrary::GetCriticalLibrary() const {
|
||||
return _criticalLibrary;
|
||||
}
|
||||
const CriticalLibrary* BattleLibrary::GetCriticalLibrary() const { return _criticalLibrary; }
|
||||
|
||||
Script* BattleLibrary::LoadScript(ScriptResolver::ScriptCategory category, const std::string &scriptName) {
|
||||
Script* BattleLibrary::LoadScript(ScriptResolver::ScriptCategory category, const std::string& scriptName) {
|
||||
assert(this->_scriptResolver != nullptr);
|
||||
return _scriptResolver->LoadScript(category, scriptName);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
#ifndef CREATURELIB_BATTLELIBRARY_HPP
|
||||
#define CREATURELIB_BATTLELIBRARY_HPP
|
||||
|
||||
#include "BattleStatCalculator.hpp"
|
||||
#include "../../Library/DataLibrary.hpp"
|
||||
#include "DamageLibrary.hpp"
|
||||
#include "CriticalLibrary.hpp"
|
||||
#include "../ScriptHandling/ScriptResolver.hpp"
|
||||
#include "BattleStatCalculator.hpp"
|
||||
#include "CriticalLibrary.hpp"
|
||||
#include "DamageLibrary.hpp"
|
||||
|
||||
namespace CreatureLib::Battling {
|
||||
class BattleLibrary {
|
||||
@@ -14,9 +14,10 @@ namespace CreatureLib::Battling {
|
||||
DamageLibrary* _damageLibrary;
|
||||
CriticalLibrary* _criticalLibrary;
|
||||
ScriptResolver* _scriptResolver;
|
||||
|
||||
public:
|
||||
BattleLibrary(Library::DataLibrary* staticLib, BattleStatCalculator* statCalculator, DamageLibrary* damageLibrary,
|
||||
CriticalLibrary* criticalLibrary, ScriptResolver* scriptResolver);
|
||||
BattleLibrary(Library::DataLibrary* staticLib, BattleStatCalculator* statCalculator,
|
||||
DamageLibrary* damageLibrary, CriticalLibrary* criticalLibrary, ScriptResolver* scriptResolver);
|
||||
~BattleLibrary();
|
||||
|
||||
[[nodiscard]] const Library::LibrarySettings& GetSettings() const;
|
||||
@@ -33,4 +34,4 @@ namespace CreatureLib::Battling {
|
||||
};
|
||||
}
|
||||
|
||||
#endif //CREATURELIB_BATTLELIBRARY_HPP
|
||||
#endif // CREATURELIB_BATTLELIBRARY_HPP
|
||||
|
||||
@@ -1,54 +1,49 @@
|
||||
#include "BattleStatCalculator.hpp"
|
||||
#include "../Models/Creature.hpp"
|
||||
#include "../../Core/Exceptions/NotImplementedException.hpp"
|
||||
#include "../Models/Creature.hpp"
|
||||
|
||||
using namespace CreatureLib;
|
||||
|
||||
Core::StatisticSet<uint32_t>
|
||||
Battling::BattleStatCalculator::CalculateFlatStats(Battling::Creature *creature) const {
|
||||
return Core::StatisticSet<uint32_t>(
|
||||
CalculateFlatStat(creature, Core::Statistic::Health),
|
||||
CalculateFlatStat(creature, Core::Statistic::PhysicalAttack),
|
||||
CalculateFlatStat(creature, Core::Statistic::PhysicalDefense),
|
||||
CalculateFlatStat(creature, Core::Statistic::MagicalAttack),
|
||||
CalculateFlatStat(creature, Core::Statistic::MagicalDefense),
|
||||
CalculateFlatStat(creature, Core::Statistic::Speed)
|
||||
);
|
||||
Core::StatisticSet<uint32_t> Battling::BattleStatCalculator::CalculateFlatStats(Battling::Creature* creature) const {
|
||||
return Core::StatisticSet<uint32_t>(CalculateFlatStat(creature, Core::Statistic::Health),
|
||||
CalculateFlatStat(creature, Core::Statistic::PhysicalAttack),
|
||||
CalculateFlatStat(creature, Core::Statistic::PhysicalDefense),
|
||||
CalculateFlatStat(creature, Core::Statistic::MagicalAttack),
|
||||
CalculateFlatStat(creature, Core::Statistic::MagicalDefense),
|
||||
CalculateFlatStat(creature, Core::Statistic::Speed));
|
||||
}
|
||||
|
||||
Core::StatisticSet<uint32_t>
|
||||
Battling::BattleStatCalculator::CalculateBoostedStats(Battling::Creature *creature) const {
|
||||
return Core::StatisticSet<uint32_t>(
|
||||
CalculateBoostedStat(creature, Core::Statistic::Health),
|
||||
CalculateBoostedStat(creature, Core::Statistic::PhysicalAttack),
|
||||
CalculateBoostedStat(creature, Core::Statistic::PhysicalDefense),
|
||||
CalculateBoostedStat(creature, Core::Statistic::MagicalAttack),
|
||||
CalculateBoostedStat(creature, Core::Statistic::MagicalDefense),
|
||||
CalculateBoostedStat(creature, Core::Statistic::Speed)
|
||||
);
|
||||
Core::StatisticSet<uint32_t> Battling::BattleStatCalculator::CalculateBoostedStats(Battling::Creature* creature) const {
|
||||
return Core::StatisticSet<uint32_t>(CalculateBoostedStat(creature, Core::Statistic::Health),
|
||||
CalculateBoostedStat(creature, Core::Statistic::PhysicalAttack),
|
||||
CalculateBoostedStat(creature, Core::Statistic::PhysicalDefense),
|
||||
CalculateBoostedStat(creature, Core::Statistic::MagicalAttack),
|
||||
CalculateBoostedStat(creature, Core::Statistic::MagicalDefense),
|
||||
CalculateBoostedStat(creature, Core::Statistic::Speed));
|
||||
}
|
||||
|
||||
uint32_t CalculateHealthStat(Battling::Creature *creature){
|
||||
uint32_t CalculateHealthStat(Battling::Creature* creature) {
|
||||
auto level = creature->GetLevel();
|
||||
auto a = (creature->GetBaseStat(Core::Statistic::Health) + creature->GetStatPotential(Core::Statistic::Health)) * 2 +
|
||||
floor(sqrt(creature->GetStatExperience(Core::Statistic::Health) / 4)) * level;
|
||||
auto a =
|
||||
(creature->GetBaseStat(Core::Statistic::Health) + creature->GetStatPotential(Core::Statistic::Health)) * 2 +
|
||||
floor(sqrt(creature->GetStatExperience(Core::Statistic::Health) / 4)) * level;
|
||||
return floor(a / 100) + level + 10;
|
||||
}
|
||||
|
||||
uint32_t CalculateOtherStat(Battling::Creature *creature, Core::Statistic stat){
|
||||
uint32_t CalculateOtherStat(Battling::Creature* creature, Core::Statistic stat) {
|
||||
auto level = creature->GetLevel();
|
||||
auto a = (creature->GetBaseStat(stat) + creature->GetStatPotential(stat)) * 2 +
|
||||
floor(sqrt(creature->GetStatExperience(stat) / 4)) * level;
|
||||
return floor(a / 100) + 10;
|
||||
}
|
||||
|
||||
|
||||
uint32_t Battling::BattleStatCalculator::CalculateFlatStat(Battling::Creature *creature, Core::Statistic stat) const{
|
||||
uint32_t Battling::BattleStatCalculator::CalculateFlatStat(Battling::Creature* creature, Core::Statistic stat) const {
|
||||
if (stat == Core::Statistic::Health)
|
||||
return CalculateHealthStat(creature);
|
||||
return CalculateOtherStat(creature, stat);
|
||||
}
|
||||
|
||||
uint32_t Battling::BattleStatCalculator::CalculateBoostedStat(Battling::Creature *creature, Core::Statistic stat) const{
|
||||
uint32_t Battling::BattleStatCalculator::CalculateBoostedStat(Battling::Creature* creature,
|
||||
Core::Statistic stat) const {
|
||||
throw NotImplementedException();
|
||||
}
|
||||
|
||||
@@ -4,18 +4,18 @@
|
||||
#include "../../Core/StatisticSet.hpp"
|
||||
|
||||
namespace CreatureLib::Battling {
|
||||
//predeclare BattleCreature class
|
||||
// predeclare BattleCreature class
|
||||
class Creature;
|
||||
|
||||
class BattleStatCalculator {
|
||||
public:
|
||||
virtual ~BattleStatCalculator() = default;
|
||||
|
||||
virtual Core::StatisticSet<uint32_t > CalculateFlatStats(Creature* creature) const;
|
||||
virtual Core::StatisticSet<uint32_t > CalculateBoostedStats(Creature* creature) const;
|
||||
virtual Core::StatisticSet<uint32_t> CalculateFlatStats(Creature* creature) const;
|
||||
virtual Core::StatisticSet<uint32_t> CalculateBoostedStats(Creature* creature) const;
|
||||
virtual uint32_t CalculateFlatStat(Creature* creature, Core::Statistic stat) const;
|
||||
virtual uint32_t CalculateBoostedStat(Creature* creature, Core::Statistic stat) const;
|
||||
};
|
||||
}
|
||||
|
||||
#endif //CREATURELIB_BATTLESTATCALCULATOR_HPP
|
||||
#endif // CREATURELIB_BATTLESTATCALCULATOR_HPP
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
#include "CriticalLibrary.hpp"
|
||||
#include "../Models/Battle.hpp"
|
||||
|
||||
bool CreatureLib::Battling::CriticalLibrary::IsCritical(CreatureLib::Battling::ExecutingAttack *attack,
|
||||
CreatureLib::Battling::Creature *target, uint8_t hit) const {
|
||||
bool CreatureLib::Battling::CriticalLibrary::IsCritical(CreatureLib::Battling::ExecutingAttack* attack,
|
||||
CreatureLib::Battling::Creature* target, uint8_t hit) const {
|
||||
auto rand = target->GetBattle()->GetRandom();
|
||||
//HOOK: Increase chance for critical hits.
|
||||
// HOOK: Increase chance for critical hits.
|
||||
return rand.Get(10) <= 0;
|
||||
}
|
||||
|
||||
@@ -11,5 +11,4 @@ namespace CreatureLib::Battling {
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
#endif //CREATURELIB_CRITICALLIBRARY_HPP
|
||||
#endif // CREATURELIB_CRITICALLIBRARY_HPP
|
||||
|
||||
@@ -1,66 +1,64 @@
|
||||
#include "DamageLibrary.hpp"
|
||||
|
||||
using namespace CreatureLib::Battling;
|
||||
int DamageLibrary::GetDamage(ExecutingAttack *attack, Creature *target, uint8_t hitIndex) const{
|
||||
int DamageLibrary::GetDamage(ExecutingAttack* attack, Creature* target, uint8_t hitIndex) const {
|
||||
auto levelMod = static_cast<float>(2 * attack->GetUser()->GetLevel());
|
||||
auto hit = attack->GetAttackDataForTarget(target).GetHit(hitIndex);
|
||||
auto bp = hit.GetBasePower();
|
||||
auto statMod = GetStatModifier(attack, target, hitIndex);
|
||||
//HOOK: Modify stat modifier
|
||||
int damage = static_cast<int>((((levelMod * static_cast<float>(bp) * statMod) / 50) + 2)
|
||||
* GetDamageModifier(attack, target, hitIndex));
|
||||
//HOOK: Override damage
|
||||
// HOOK: Modify stat modifier
|
||||
int damage = static_cast<int>((((levelMod * static_cast<float>(bp) * statMod) / 50) + 2) *
|
||||
GetDamageModifier(attack, target, hitIndex));
|
||||
// HOOK: Override damage
|
||||
return damage;
|
||||
}
|
||||
|
||||
int DamageLibrary::GetBasePower(ExecutingAttack *attack, Creature *target, uint8_t hitIndex) const{
|
||||
int DamageLibrary::GetBasePower(ExecutingAttack* attack, Creature* target, uint8_t hitIndex) const {
|
||||
auto bp = attack->GetAttack()->GetAttack()->GetBasePower();
|
||||
//HOOK: modify base power.
|
||||
// HOOK: modify base power.
|
||||
return bp;
|
||||
}
|
||||
|
||||
float DamageLibrary::GetStatModifier(ExecutingAttack *attack, Creature *target, uint8_t hitIndex) const{
|
||||
float DamageLibrary::GetStatModifier(ExecutingAttack* attack, Creature* target, uint8_t hitIndex) const {
|
||||
auto user = attack->GetUser();
|
||||
//HOOK: allow overriding for which users stat we use.
|
||||
// HOOK: allow overriding for which users stat we use.
|
||||
auto hit = attack->GetAttackDataForTarget(target).GetHit(hitIndex);
|
||||
Core::Statistic offensiveStat;
|
||||
Core::Statistic defensiveStat;
|
||||
if (attack->GetAttack()->GetAttack()->GetCategory() == Library::AttackCategory::Physical){
|
||||
if (attack->GetAttack()->GetAttack()->GetCategory() == Library::AttackCategory::Physical) {
|
||||
offensiveStat = Core::Statistic::PhysicalAttack;
|
||||
defensiveStat = Core::Statistic::PhysicalDefense;
|
||||
}
|
||||
else{
|
||||
} else {
|
||||
offensiveStat = Core::Statistic::MagicalAttack;
|
||||
defensiveStat = Core::Statistic::MagicalDefense;
|
||||
}
|
||||
|
||||
auto bypassDefensive = hit.IsCritical() && target->GetStatBoost(defensiveStat) > 0;
|
||||
//HOOK: allow bypassing defensive stat modifiers.
|
||||
// HOOK: allow bypassing defensive stat modifiers.
|
||||
auto bypassOffensive = hit.IsCritical() && user->GetStatBoost(offensiveStat) < 0;
|
||||
//HOOK: Allow bypassing offensive stat modifiers.
|
||||
// HOOK: Allow bypassing offensive stat modifiers.
|
||||
|
||||
float offensiveValue;
|
||||
float defensiveValue;
|
||||
|
||||
if (bypassOffensive){
|
||||
if (bypassOffensive) {
|
||||
offensiveValue = user->GetFlatStat(offensiveStat);
|
||||
} else{
|
||||
} else {
|
||||
offensiveValue = user->GetBoostedStat(offensiveStat);
|
||||
}
|
||||
if (bypassDefensive){
|
||||
if (bypassDefensive) {
|
||||
defensiveValue = target->GetFlatStat(defensiveStat);
|
||||
} else{
|
||||
} else {
|
||||
defensiveValue = target->GetBoostedStat(defensiveStat);
|
||||
}
|
||||
|
||||
return offensiveValue / defensiveValue;
|
||||
}
|
||||
|
||||
float DamageLibrary::GetDamageModifier(ExecutingAttack *attack, Creature *target, uint8_t hitIndex) const{
|
||||
float DamageLibrary::GetDamageModifier(ExecutingAttack* attack, Creature* target, uint8_t hitIndex) const {
|
||||
float mod = 1;
|
||||
auto hit = attack->GetAttackDataForTarget(target).GetHit(hitIndex);
|
||||
mod *= hit.GetEffectiveness();
|
||||
//HOOK: Modify damage modifier.
|
||||
// HOOK: Modify damage modifier.
|
||||
return mod;
|
||||
}
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
#include "../Models/Creature.hpp"
|
||||
#include "../Models/ExecutingAttack.hpp"
|
||||
|
||||
namespace CreatureLib::Battling{
|
||||
namespace CreatureLib::Battling {
|
||||
class DamageLibrary {
|
||||
public:
|
||||
virtual ~DamageLibrary() = default;
|
||||
@@ -16,5 +16,4 @@ namespace CreatureLib::Battling{
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
#endif //CREATURELIB_DAMAGELIBRARY_HPP
|
||||
#endif // CREATURELIB_DAMAGELIBRARY_HPP
|
||||
|
||||
Reference in New Issue
Block a user