#ifndef PKMNLIB_POKEMONSPECIES_HPP #define PKMNLIB_POKEMONSPECIES_HPP #include #include "../Evolutions/EvolutionData.hpp" #include "PokemonForme.hpp" namespace PkmnLib::Library { class PokemonSpecies : public CreatureLib::Library::CreatureSpecies { private: uint8_t _baseHappiness; std::vector _evolutions; public: PokemonSpecies(uint16_t id, const Arbutils::CaseInsensitiveConstString& name, const PokemonForme* defaultVariant, float genderRatio, const Arbutils::CaseInsensitiveConstString& growthRate, uint8_t captureRate, uint8_t baseHappiness) : CreatureSpecies(id, name, defaultVariant, genderRatio, growthRate, captureRate), _baseHappiness(baseHappiness) {} ~PokemonSpecies() override { for (auto evo : _evolutions) { delete evo; } } inline uint8_t GetBaseHappiness() const { return _baseHappiness; } inline const PokemonForme* GetDefaultForme() const { return reinterpret_cast(CreatureSpecies::GetVariant("default"_cnc.GetHash())); } inline bool HasForme(const Arbutils::CaseInsensitiveConstString& key) const { return HasVariant(key); } inline bool TryGetForme(const Arbutils::CaseInsensitiveConstString& key, const PokemonForme*& forme) const { return TryGetVariant(key, (const CreatureLib::Library::SpeciesVariant*&)forme); } inline const PokemonForme* GetForme(const Arbutils::CaseInsensitiveConstString& key) const { return reinterpret_cast(CreatureSpecies::GetVariant(key)); } inline void AddEvolution(const EvolutionData* data) { _evolutions.push_back(data); } const std::vector& GetEvolutions() const { return _evolutions; } }; } #endif // PKMNLIB_POKEMONSPECIES_HPP