#ifndef PKMNLIB_MISCLIBRARY_HPP #define PKMNLIB_MISCLIBRARY_HPP #include #include "../../Library/Evolutions/EvolutionData.hpp" #include "../../Library/Moves/MoveData.hpp" #include "../Pokemon/LearnedMove.hpp" namespace PkmnLib::Battling { class Pokemon; class MiscLibrary final : public CreatureLib::Battling::MiscLibrary { std::unique_ptr _struggleData = std::make_unique( "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()); ; std::unique_ptr _struggle = std::make_unique(_struggleData, CreatureLib::Battling::AttackLearnMethod::Unknown); [[nodiscard]] ArbUt::BorrowedPtr GetReplacementAttack() const { _struggle->RestoreAllUses(); return _struggle; } std::function _getTime; public: MiscLibrary(std::function getTime) : _getTime(getTime) {} ~MiscLibrary() override = default; bool IsCritical(CreatureLib::Battling::ExecutingAttack* non_null attack, CreatureLib::Battling::Creature* non_null target, uint8_t hit) const override; bool CanFlee(CreatureLib::Battling::FleeTurnChoice* non_null switchChoice) const override; CreatureLib::Battling::BaseTurnChoice* non_null ReplacementAttack( CreatureLib::Battling::Creature* non_null user, CreatureLib::Battling::CreatureIndex target) const override; bool CanEvolveFromLevelUp(const ArbUt::BorrowedPtr& evolution, const ArbUt::BorrowedPtr& pokemon); inline PkmnLib::Library::TimeOfDay GetTime() const noexcept { return _getTime(); } }; } #endif // PKMNLIB_MISCLIBRARY_HPP