diff options
author | Kae <80987908+Novaenia@users.noreply.github.com> | 2023-07-20 15:00:59 +1000 |
---|---|---|
committer | Kae <80987908+Novaenia@users.noreply.github.com> | 2023-07-20 15:00:59 +1000 |
commit | c1ae23808677028ef6ac1b7f0b19b298d78affc2 (patch) | |
tree | 0310c9d5e4673ea49add9791713fdd83b81ed87f /source/game/StarPlayer.cpp | |
parent | 9d66acde2ae6896607da953e20ba5bbfc23948f6 (diff) | |
parent | 043db1841ee46ace0f6919bfdf6ac20a539faaca (diff) |
Merge branch 'voice'
Diffstat (limited to 'source/game/StarPlayer.cpp')
-rw-r--r-- | source/game/StarPlayer.cpp | 49 |
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); +} + + } |