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

summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--assets/opensb/interface/opensb/shaders/shaders.config1
-rw-r--r--source/game/StarArmorWearer.cpp17
-rw-r--r--source/game/StarArmorWearer.hpp3
-rw-r--r--source/windowing/StarScrollArea.cpp8
-rw-r--r--source/windowing/StarScrollArea.hpp4
-rw-r--r--source/windowing/StarWidgetParsing.cpp2
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));
}