#ifndef PKMNLIB_POKEMONLIBRARY_HPP #define PKMNLIB_POKEMONLIBRARY_HPP #include #include "Items/ItemLibrary.hpp" #include "LibrarySettings.hpp" #include "Moves/MoveLibrary.hpp" #include "Natures/NatureLibrary.hpp" #include "Species/SpeciesLibrary.hpp" namespace PkmnLib::Library { class PokemonLibrary final : public CreatureLib::Library::DataLibrary { private: std::unique_ptr _natures; public: ~PokemonLibrary() override = default; PokemonLibrary(PkmnLib::Library::LibrarySettings* non_null settings, SpeciesLibrary* non_null species, MoveLibrary* non_null moves, ItemLibrary* non_null items, CreatureLib::Library::GrowthRateLibrary* non_null growthRates, CreatureLib::Library::TypeLibrary* non_null typeLibrary, CreatureLib::Library::TalentLibrary* non_null talentLibrary, NatureLibrary* non_null natures) : DataLibrary(settings, species, moves, items, growthRates, typeLibrary, talentLibrary), _natures(natures) { } const std::unique_ptr& GetSettings() const { return (const std::unique_ptr&)CreatureLib::Library::DataLibrary::GetSettings(); } [[nodiscard]] const std::unique_ptr& GetSpeciesLibrary() const { return (const std::unique_ptr&)CreatureLib::Library::DataLibrary::GetSpeciesLibrary(); } [[nodiscard]] const std::unique_ptr& GetMoveLibrary() const { return (const std::unique_ptr&)CreatureLib::Library::DataLibrary::GetAttackLibrary(); } [[nodiscard]] const std::unique_ptr& GetItemLibrary() const { return (const std::unique_ptr&)CreatureLib::Library::DataLibrary::GetItemLibrary(); } [[nodiscard]] ArbUt::BorrowedPtr GetNatureLibrary() const noexcept { return _natures; } }; } #endif // PKMNLIB_POKEMONLIBRARY_HPP