#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 : public CreatureLib::Library::DataLibrary { private: const NatureLibrary* _natures; public: ~PokemonLibrary() override { delete _natures; } PokemonLibrary(PkmnLib::Library::LibrarySettings* settings, SpeciesLibrary* species, MoveLibrary* moves, ItemLibrary* items, CreatureLib::Library::GrowthRateLibrary* growthRates, CreatureLib::Library::TypeLibrary* typeLibrary, NatureLibrary* natures) : DataLibrary(settings, species, moves, items, growthRates, typeLibrary), _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]] const NatureLibrary* GetNatureLibrary() const noexcept { return _natures; } }; } #endif // PKMNLIB_POKEMONLIBRARY_HPP