#pragma once #include "StarThread.hpp" #include "StarItemDescriptor.hpp" #include "StarHumanoid.hpp" #include "StarStatusTypes.hpp" namespace Star { STAR_CLASS(SpeciesDefinition); STAR_CLASS(SpeciesDatabase); struct SpeciesCharCreationTooltip { String title; String subTitle; String description; }; struct SpeciesGenderOption { Gender gender; String name; String image; String characterImage; List hairOptions; String hairGroup; List shirtOptions; List pantsOptions; String facialHairGroup; List facialHairOptions; String facialMaskGroup; List facialMaskOptions; }; struct SpeciesOption { SpeciesOption(); String species; bool headOptionAsHairColor; bool headOptionAsFacialhair; bool altOptionAsUndyColor; bool altOptionAsHairColor; bool altOptionAsFacialMask; bool hairColorAsBodySubColor; bool bodyColorAsFacialMaskSubColor; bool altColorAsFacialMaskSubColor; List genderOptions; List bodyColorDirectives; List undyColorDirectives; List hairColorDirectives; }; class SpeciesDefinition { public: SpeciesDefinition(Json const& config); String kind() const; bool playerSelectable() const; SpeciesOption const& options() const; Json humanoidConfig() const; List const& personalities() const; String nameGen(Gender gender) const; String ouchNoise(Gender gender) const; List defaultItems() const; List defaultBlueprints() const; StringList charGenTextLabels() const; String skull() const; List statusEffects() const; String effectDirectives() const; SpeciesCharCreationTooltip const& tooltip() const; void generateHumanoid(HumanoidIdentity& identity, int64_t seed); private: String m_kind; SpeciesCharCreationTooltip m_tooltip; bool m_playerSelectable; Json m_config; String m_humanoidConfig; Json m_humanoidOverrides; List m_personalities; List m_nameGen; List m_ouchNoises; SpeciesOption m_options; List m_defaultItems; List m_defaultBlueprints; StringList m_charGenTextLabels; String m_skull; List m_statusEffects; String m_effectDirectives; friend class SpeciesDatabase; }; class SpeciesDatabase { public: SpeciesDatabase(); SpeciesDefinitionPtr species(String const& kind) const; StringMap allSpecies() const; private: StringMap m_species; }; }