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

summaryrefslogtreecommitdiff
path: root/source/game/StarPlayer.cpp
diff options
context:
space:
mode:
authorKae <80987908+Novaenia@users.noreply.github.com>2023-07-20 15:00:59 +1000
committerKae <80987908+Novaenia@users.noreply.github.com>2023-07-20 15:00:59 +1000
commitc1ae23808677028ef6ac1b7f0b19b298d78affc2 (patch)
tree0310c9d5e4673ea49add9791713fdd83b81ed87f /source/game/StarPlayer.cpp
parent9d66acde2ae6896607da953e20ba5bbfc23948f6 (diff)
parent043db1841ee46ace0f6919bfdf6ac20a539faaca (diff)
Merge branch 'voice'
Diffstat (limited to 'source/game/StarPlayer.cpp')
-rw-r--r--source/game/StarPlayer.cpp49
1 files changed, 49 insertions, 0 deletions
diff --git a/source/game/StarPlayer.cpp b/source/game/StarPlayer.cpp
index af8a2ed..d790d1c 100644
--- a/source/game/StarPlayer.cpp
+++ b/source/game/StarPlayer.cpp
@@ -2464,4 +2464,53 @@ Vec2F Player::cameraPosition() {
return position();
}
+NetworkedAnimatorPtr Player::effectsAnimator() {
+ return m_effectsAnimator;
+}
+
+const String secretProprefix = "\0JsonProperty\0"s;
+
+Maybe<StringView> Player::getSecretPropertyView(String const& name) const {
+ if (auto tag = m_effectsAnimator->globalTagPtr(secretProprefix + name)) {
+ auto& view = tag->utf8();
+ DataStreamExternalBuffer buffer(view.data(), view.size());
+ try {
+ uint8_t typeIndex = buffer.read<uint8_t>() - 1;
+ if ((Json::Type)typeIndex == Json::Type::String) {
+ size_t len = buffer.readVlqU();
+ size_t pos = buffer.pos();
+ if (pos + len == buffer.size())
+ return StringView(buffer.ptr() + pos, len);
+ }
+ }
+ catch (StarException const& e) {}
+ }
+
+ return {};
+}
+
+Json Player::getSecretProperty(String const& name, Json defaultValue) const {
+ if (auto tag = m_effectsAnimator->globalTagPtr(secretProprefix + name)) {
+ DataStreamExternalBuffer buffer(tag->utf8Ptr(), tag->utf8Size());
+ try
+ { return buffer.read<Json>(); }
+ catch (StarException const& e)
+ { Logger::error("Exception reading secret player property '{}': {}", name, e.what()); }
+ }
+
+ return move(defaultValue);
+}
+
+void Player::setSecretProperty(String const& name, Json const& value) {
+ if (value) {
+ DataStreamBuffer ds;
+ ds.write(value);
+ auto& data = ds.data();
+ m_effectsAnimator->setGlobalTag(secretProprefix + name, String(data.ptr(), data.size()));
+ }
+ else
+ m_effectsAnimator->removeGlobalTag(secretProprefix + name);
+}
+
+
}