diff --git a/src/glue/CCharacterCreation.cpp b/src/glue/CCharacterCreation.cpp index 2b2a3d5..0b40688 100644 --- a/src/glue/CCharacterCreation.cpp +++ b/src/glue/CCharacterCreation.cpp @@ -8,12 +8,36 @@ CCharacterComponent* CCharacterCreation::s_character; CSimpleModelFFX* CCharacterCreation::s_charCustomizeFrame; +TSFixedArray CCharacterCreation::s_classes; int32_t CCharacterCreation::s_existingCharacterIndex; int32_t CCharacterCreation::s_raceIndex; int32_t CCharacterCreation::s_selectedClassID; void CCharacterCreation::CalcClasses(int32_t raceID) { - // TODO + uint32_t classCount = 0; + + for (int32_t i = 0; i < g_charBaseInfoDB.GetNumRecords(); i++) { + auto infoRec = g_charBaseInfoDB.GetRecord(i); + + if (infoRec->m_raceID == raceID) { + classCount++; + } + } + + CCharacterCreation::s_classes.SetCount(classCount); + + uint32_t classIndex = 0; + + for (int32_t i = 0; i < g_charBaseInfoDB.GetNumRecords(); i++) { + auto infoRec = g_charBaseInfoDB.GetRecord(i); + + if (infoRec->m_raceID != raceID) { + continue; + } + + auto classRec = g_chrClassesDB.GetRecord(infoRec->m_classID); + CCharacterCreation::s_classes[classIndex++] = classRec; + } } void CCharacterCreation::CreateComponent(ComponentData* data, bool randomize) { diff --git a/src/glue/CCharacterCreation.hpp b/src/glue/CCharacterCreation.hpp index 0c072bc..55e81d0 100644 --- a/src/glue/CCharacterCreation.hpp +++ b/src/glue/CCharacterCreation.hpp @@ -1,8 +1,10 @@ #ifndef GLUE_C_CHARACTER_CREATION_HPP #define GLUE_C_CHARACTER_CREATION_HPP +#include #include +class ChrClassesRec; class CCharacterComponent; class CSimpleModelFFX; struct ComponentData; @@ -12,6 +14,7 @@ class CCharacterCreation { // Static variables static CCharacterComponent* s_character; static CSimpleModelFFX* s_charCustomizeFrame; + static TSFixedArray s_classes; static int32_t s_existingCharacterIndex; static int32_t s_raceIndex; static int32_t s_selectedClassID;