PkmnLib/src/Battling/Library/MiscLibrary.hpp

47 lines
2.2 KiB
C++

#ifndef PKMNLIB_MISCLIBRARY_HPP
#define PKMNLIB_MISCLIBRARY_HPP
#include <CreatureLib/Battling/Library/MiscLibrary.hpp>
#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<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>());
;
std::unique_ptr<CreatureLib::Battling::LearnedAttack> _struggle =
std::make_unique<PkmnLib::Battling::LearnedMove>(_struggleData,
CreatureLib::Battling::AttackLearnMethod::Unknown);
[[nodiscard]] ArbUt::BorrowedPtr<CreatureLib::Battling::LearnedAttack> GetReplacementAttack() const {
_struggle->RestoreAllUses();
return _struggle;
}
std::function<PkmnLib::Library::TimeOfDay()> _getTime;
public:
MiscLibrary(std::function<PkmnLib::Library::TimeOfDay()> 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<const PkmnLib::Library::EvolutionData>& evolution,
const ArbUt::BorrowedPtr<const Pokemon>& pokemon);
inline PkmnLib::Library::TimeOfDay GetTime() const noexcept { return _getTime(); }
};
}
#endif // PKMNLIB_MISCLIBRARY_HPP