Веб-сайт самохостера Lotigara

summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKae <80987908+Novaenia@users.noreply.github.com>2025-02-28 17:21:31 +1100
committerKae <80987908+Novaenia@users.noreply.github.com>2025-02-28 17:21:31 +1100
commit3e89b9cabf9b56f337b6b953d2222b56969d7375 (patch)
treee75b75d349acee7b318742a6f543af7ce2651c05
parentccb19f589cac0dae73a70445e39111200fcd78ed (diff)
fix ArmorWearer not updating humanoid drawables when gender changes
-rw-r--r--source/game/StarArmorWearer.cpp17
-rw-r--r--source/game/StarArmorWearer.hpp3
2 files changed, 13 insertions, 7 deletions
diff --git a/source/game/StarArmorWearer.cpp b/source/game/StarArmorWearer.cpp
index 0cbb272..c95eaad 100644
--- a/source/game/StarArmorWearer.cpp
+++ b/source/game/StarArmorWearer.cpp
@@ -31,13 +31,16 @@ ArmorWearer::ArmorWearer() : m_lastNude(true) {
void ArmorWearer::setupHumanoidClothingDrawables(Humanoid& humanoid, bool forceNude) {
bool nudeChanged = m_lastNude != forceNude;
- if (nudeChanged)
- m_lastNude = forceNude;
-
- bool headNeedsSync = nudeChanged || m_headNeedsSync;
- bool chestNeedsSync = nudeChanged || m_chestNeedsSync;
- bool legsNeedsSync = nudeChanged || m_legsNeedsSync;
- bool backNeedsSync = nudeChanged || m_backNeedsSync;
+ auto gender = humanoid.identity().gender;
+ bool genderChanged = !m_lastGender || m_lastGender.value() != gender;
+ m_lastNude = forceNude;
+ m_lastGender = gender;
+
+ bool allNeedsSync = nudeChanged || genderChanged;
+ bool headNeedsSync = allNeedsSync || m_headNeedsSync;
+ bool chestNeedsSync = allNeedsSync || m_chestNeedsSync;
+ bool legsNeedsSync = allNeedsSync || m_legsNeedsSync;
+ bool backNeedsSync = allNeedsSync || m_backNeedsSync;
bool bodyHidden = false;
HeadArmorPtr const& headArmor = m_headCosmeticItem ? m_headCosmeticItem : m_headItem;
diff --git a/source/game/StarArmorWearer.hpp b/source/game/StarArmorWearer.hpp
index c52de9b..ceb98b0 100644
--- a/source/game/StarArmorWearer.hpp
+++ b/source/game/StarArmorWearer.hpp
@@ -84,6 +84,9 @@ private:
NetElementData<ItemDescriptor> m_legsCosmeticItemDataNetState;
NetElementData<ItemDescriptor> m_backCosmeticItemDataNetState;
+ // only works under the assumption that this ArmorWearer
+ // will only ever touch one Humanoid (which is true!)
+ Maybe<Gender> m_lastGender;
bool m_lastNude;
bool m_headNeedsSync;
bool m_chestNeedsSync;