Smart pointers for most library and battle classes.
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:
@@ -40,7 +40,9 @@ namespace PkmnLib::Battling {
|
||||
return reinterpret_cast<const std::unique_ptr<const Library::ItemLibrary>&>(_staticLib->GetItemLibrary());
|
||||
}
|
||||
|
||||
const Library::NatureLibrary* GetNatureLibrary() const { return GetStaticLib()->GetNatureLibrary(); }
|
||||
const ArbUt::BorrowedPtr<const Library::NatureLibrary> GetNatureLibrary() const {
|
||||
return GetStaticLib()->GetNatureLibrary();
|
||||
}
|
||||
|
||||
static CreatureLib::Battling::ScriptResolver* CreateScriptResolver();
|
||||
};
|
||||
|
||||
@@ -28,7 +28,7 @@ float PkmnLib::Battling::DamageLibrary::GetStatModifier(CreatureLib::Battling::E
|
||||
// HOOK: allow overriding for which users stat we use.
|
||||
CreatureLib::Library::Statistic offensiveStat;
|
||||
CreatureLib::Library::Statistic defensiveStat;
|
||||
auto learnedMove = static_cast<LearnedMove*>(attack->GetAttack());
|
||||
auto learnedMove = attack->GetAttack().ForceAs<LearnedMove>();
|
||||
auto moveData = learnedMove->GetMoveData();
|
||||
if (moveData->GetCategory() == Library::MoveCategory::Physical) {
|
||||
offensiveStat = Library::Statistic::PhysicalAttack;
|
||||
|
||||
@@ -3,20 +3,21 @@
|
||||
#include "../PkmnScriptHook.hpp"
|
||||
#include "../Pokemon/Pokemon.hpp"
|
||||
|
||||
static inline uint32_t CalculateDynamicExperience(uint8_t level, float v1, CreatureLib::Battling::Creature* op,
|
||||
CreatureLib::Battling::Creature* faintedMon) {
|
||||
static inline uint32_t CalculateDynamicExperience(uint8_t level, float v1,
|
||||
ArbUt::BorrowedPtr<CreatureLib::Battling::Creature> op,
|
||||
ArbUt::BorrowedPtr<CreatureLib::Battling::Creature> faintedMon) {
|
||||
float a = 2 * level + 10;
|
||||
float b = level + op->GetLevel() + 10;
|
||||
float v2 = (a * a * sqrt(a)) / (b * b * sqrt(b));
|
||||
uint32_t experienceGain = v1 * v2 + 1;
|
||||
// TODO: Check owner and international
|
||||
PKMN_HOOK(ModifyExperienceGain, op, faintedMon, op, &experienceGain);
|
||||
PKMN_HOOK(ModifyExperienceGain, op, faintedMon.GetRaw(), op.GetRaw(), &experienceGain);
|
||||
return experienceGain;
|
||||
}
|
||||
|
||||
void PkmnLib::Battling::ExperienceLibrary::HandleExperienceGain(
|
||||
CreatureLib::Battling::Creature* faintedMon,
|
||||
const std::unordered_set<CreatureLib::Battling::Creature*>& opponents) const {
|
||||
const std::unordered_set<ArbUt::BorrowedPtr<CreatureLib::Battling::Creature>>& opponents) const {
|
||||
|
||||
auto fainted = dynamic_cast<Pokemon*>(faintedMon);
|
||||
auto expGain = fainted->GetForme()->GetBaseExperience();
|
||||
|
||||
@@ -5,8 +5,9 @@
|
||||
namespace PkmnLib::Battling {
|
||||
class ExperienceLibrary : public CreatureLib::Battling::ExperienceLibrary {
|
||||
public:
|
||||
void HandleExperienceGain(CreatureLib::Battling::Creature* faintedMon,
|
||||
const std::unordered_set<CreatureLib::Battling::Creature*>& opponents) const override;
|
||||
void HandleExperienceGain(
|
||||
CreatureLib::Battling::Creature* faintedMon,
|
||||
const std::unordered_set<ArbUt::BorrowedPtr<CreatureLib::Battling::Creature>>& opponents) const override;
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -7,24 +7,22 @@
|
||||
|
||||
namespace PkmnLib::Battling {
|
||||
class MiscLibrary : public CreatureLib::Battling::MiscLibrary {
|
||||
PkmnLib::Library::MoveData* _struggleData =
|
||||
new PkmnLib::Library::MoveData("struggle"_cnc, 0, PkmnLib::Library::MoveCategory::Physical, 50, 255, 10,
|
||||
CreatureLib::Library::AttackTarget::Any, 0,
|
||||
new CreatureLib::Library::SecondaryEffect(-1, "struggle"_cnc, {}), {});
|
||||
std::unique_ptr<const PkmnLib::Library::MoveData> _struggleData = std::make_unique<PkmnLib::Library::MoveData>(
|
||||
"struggle"_cnc, 0, PkmnLib::Library::MoveCategory::Physical, 50, 255, 10,
|
||||
CreatureLib::Library::AttackTarget::Any, 0,
|
||||
new CreatureLib::Library::SecondaryEffect(-1, "struggle"_cnc, {}), std::unordered_set<uint32_t>());
|
||||
;
|
||||
CreatureLib::Battling::LearnedAttack* _struggle =
|
||||
new PkmnLib::Battling::LearnedMove(_struggleData, CreatureLib::Battling::AttackLearnMethod::Unknown);
|
||||
std::unique_ptr<CreatureLib::Battling::LearnedAttack> _struggle =
|
||||
std::make_unique<PkmnLib::Battling::LearnedMove>(_struggleData,
|
||||
CreatureLib::Battling::AttackLearnMethod::Unknown);
|
||||
|
||||
[[nodiscard]] CreatureLib::Battling::LearnedAttack* GetReplacementAttack() const {
|
||||
[[nodiscard]] ArbUt::BorrowedPtr<CreatureLib::Battling::LearnedAttack> GetReplacementAttack() const {
|
||||
_struggle->RestoreAllUses();
|
||||
return _struggle;
|
||||
}
|
||||
|
||||
public:
|
||||
~MiscLibrary() override {
|
||||
delete _struggle;
|
||||
delete _struggleData;
|
||||
};
|
||||
~MiscLibrary() override = default;
|
||||
bool IsCritical(CreatureLib::Battling::ExecutingAttack* attack, CreatureLib::Battling::Creature* target,
|
||||
uint8_t hit) const override;
|
||||
bool CanFlee(CreatureLib::Battling::FleeTurnChoice* switchChoice) const override;
|
||||
|
||||
Reference in New Issue
Block a user