Add extra checks to the char creation pane to prevent crashes when the player is not using an extension mod with extra species

This commit is contained in:
Kae 2023-06-29 22:02:35 +10:00
parent dc134e168b
commit 7fc9260829

View File

@ -269,15 +269,19 @@ void CharCreationPane::changed() {
fetchChild<LabelWidget>("labelPortrait")->setText(labels[8]); fetchChild<LabelWidget>("labelPortrait")->setText(labels[8]);
fetchChild<LabelWidget>("labelPersonality")->setText(labels[9]); fetchChild<LabelWidget>("labelPersonality")->setText(labels[9]);
fetchChild<ButtonWidget>(strf("species.{}", m_speciesChoice))->check(); if (auto speciesButton = fetchChild<ButtonWidget>(strf("species.{}", m_speciesChoice)))
fetchChild<ButtonWidget>(strf("gender.{}", genderIdx))->check(); speciesButton->check();
if (auto genderButton = fetchChild<ButtonWidget>(strf("gender.{}", genderIdx)))
genderButton->check();
auto modeButton = fetchChild<ButtonWidget>(strf("mode.{}", m_modeChoice)); auto modeButton = fetchChild<ButtonWidget>(strf("mode.{}", m_modeChoice));
modeButton->check(); modeButton->check();
setLabel("labelMode", modeButton->data().getString("description", "fail")); setLabel("labelMode", modeButton->data().getString("description", "fail"));
// Update the gender images for the new species // Update the gender images for the new species
for (size_t i = 0; i < species.genderOptions.size(); i++) for (size_t i = 0; i < species.genderOptions.size(); i++)
fetchChild<ButtonWidget>(strf("gender.{}", i))->setOverlayImage(species.genderOptions[i].image); if (auto button = fetchChild<ButtonWidget>(strf("gender.{}", i)))
button->setOverlayImage(species.genderOptions[i].image);
for (auto const& nameDefPair : root.speciesDatabase()->allSpecies()) { for (auto const& nameDefPair : root.speciesDatabase()->allSpecies()) {
String name; String name;
@ -286,8 +290,7 @@ void CharCreationPane::changed() {
// NOTE: Probably not hot enough to matter, but this contains and indexOf makes this loop // NOTE: Probably not hot enough to matter, but this contains and indexOf makes this loop
// O(n^2). This is less than ideal. // O(n^2). This is less than ideal.
if (m_speciesList.contains(name)) { if (m_speciesList.contains(name)) {
auto bw = fetchChild<ButtonWidget>(strf("species.{}", m_speciesList.indexOf(name))); if (auto bw = fetchChild<ButtonWidget>(strf("species.{}", m_speciesList.indexOf(name))))
if (bw)
bw->setOverlayImage(def->options().genderOptions[genderIdx].characterImage); bw->setOverlayImage(def->options().genderOptions[genderIdx].characterImage);
} }
} }