diff options
-rw-r--r-- | assets/opensb/interface/opensb/shaders/shaders.config | 1 | ||||
-rw-r--r-- | source/game/StarArmorWearer.cpp | 17 | ||||
-rw-r--r-- | source/game/StarArmorWearer.hpp | 3 | ||||
-rw-r--r-- | source/windowing/StarScrollArea.cpp | 8 | ||||
-rw-r--r-- | source/windowing/StarScrollArea.hpp | 4 | ||||
-rw-r--r-- | source/windowing/StarWidgetParsing.cpp | 2 |
6 files changed, 27 insertions, 8 deletions
diff --git a/assets/opensb/interface/opensb/shaders/shaders.config b/assets/opensb/interface/opensb/shaders/shaders.config index 3c321aa..03cd6a3 100644 --- a/assets/opensb/interface/opensb/shaders/shaders.config +++ b/assets/opensb/interface/opensb/shaders/shaders.config @@ -115,6 +115,7 @@ }, "options" : { "type" : "scrollArea", + "updatesChildren" : true, "rect" : [147, 16, 398, 185], "children" : {}, "buttons" : { 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; diff --git a/source/windowing/StarScrollArea.cpp b/source/windowing/StarScrollArea.cpp index 775462a..166f4b4 100644 --- a/source/windowing/StarScrollArea.cpp +++ b/source/windowing/StarScrollArea.cpp @@ -385,7 +385,9 @@ bool ScrollArea::sendEvent(InputEvent const& event) { } void ScrollArea::update(float dt) { - Widget::update(dt); + if (m_updatesChildren) + Widget::update(dt); + if (!m_visible) return; @@ -443,4 +445,8 @@ int ScrollArea::advanceFactorHelper() { return (int)std::ceil((m_buttonAdvance * t) / (float)ScrollAdvanceTimer); } +void ScrollArea::setUpdatesChildren(bool slop) { + m_updatesChildren = slop; +} + } diff --git a/source/windowing/StarScrollArea.hpp b/source/windowing/StarScrollArea.hpp index eac1e53..8b4b74f 100644 --- a/source/windowing/StarScrollArea.hpp +++ b/source/windowing/StarScrollArea.hpp @@ -98,6 +98,8 @@ public: bool verticalScroll() const; void setVerticalScroll(bool vertical); + void setUpdatesChildren(bool slop); + virtual bool sendEvent(InputEvent const& event) override; virtual void update(float dt) override; @@ -124,6 +126,8 @@ private: bool m_horizontalScroll; bool m_verticalScroll; + + bool m_updatesChildren; }; typedef shared_ptr<ScrollArea> ScrollAreaPtr; } diff --git a/source/windowing/StarWidgetParsing.cpp b/source/windowing/StarWidgetParsing.cpp index 7a9ea4a..68ec258 100644 --- a/source/windowing/StarWidgetParsing.cpp +++ b/source/windowing/StarWidgetParsing.cpp @@ -779,6 +779,8 @@ WidgetConstructResult WidgetParser::scrollAreaHandler(String const& name, Json c if (config.contains("verticalScroll")) scrollArea->setVerticalScroll(config.getBool("verticalScroll")); + scrollArea->setUpdatesChildren(config.getBool("updatesChildren", false)); + common(scrollArea, config); return WidgetConstructResult(scrollArea, name, config.getFloat("zlevel", 0)); } |