diff options
author | WasabiRaptor <ketchupraptor@gmail.com> | 2025-05-18 23:28:06 -0400 |
---|---|---|
committer | WasabiRaptor <ketchupraptor@gmail.com> | 2025-05-18 23:28:06 -0400 |
commit | ffb2fdee70353b4d55cce22388813274e5368879 (patch) | |
tree | 31145f73a16f08d94c971c12406f1fa1276af976 /source/game | |
parent | 5eff2ae0115eb64509480efc0f9ada0f5f199846 (diff) |
apply part tags callback
Diffstat (limited to 'source/game')
-rw-r--r-- | source/game/StarNetworkedAnimator.cpp | 50 | ||||
-rw-r--r-- | source/game/StarNetworkedAnimator.hpp | 2 | ||||
-rw-r--r-- | source/game/scripting/StarNetworkedAnimatorLuaBindings.cpp | 5 | ||||
-rw-r--r-- | source/game/scripting/StarScriptedAnimatorLuaBindings.cpp | 2 |
4 files changed, 59 insertions, 0 deletions
diff --git a/source/game/StarNetworkedAnimator.cpp b/source/game/StarNetworkedAnimator.cpp index 45553eb..31bd066 100644 --- a/source/game/StarNetworkedAnimator.cpp +++ b/source/game/StarNetworkedAnimator.cpp @@ -442,6 +442,56 @@ void NetworkedAnimator::setPartDrawables(String const& partName, List<Drawable> void NetworkedAnimator::addPartDrawables(String const& partName, List<Drawable> drawables) { m_partDrawables.ptr(partName)->appendAll(drawables); } +String NetworkedAnimator::applyPartTags(String const& partName, String apply) { + HashMap<String, String> animationTags = {}; + Maybe<unsigned> frame; + String frameStr; + String frameIndexStr; + auto activePart = m_animatedParts.activePart(partName); + auto partTags = m_partTags.get(partName); + if (activePart.activeState) { + unsigned stateFrame = activePart.activeState->frame; + frame = stateFrame; + frameStr = static_cast<String>(toString(stateFrame + 1)); + frameIndexStr = static_cast<String>(toString(stateFrame)); + } + if (version() > 0) + m_animatedParts.forEachActiveState([&](String const& stateTypeName, AnimatedPartSet::ActiveStateInformation const& activeState) { + unsigned stateFrame = activeState.frame; + Maybe<unsigned> frame; + String frameStr; + String frameIndexStr; + + frame = stateFrame; + frameStr = static_cast<String>(toString(stateFrame + 1)); + frameIndexStr = static_cast<String>(toString(stateFrame)); + if (frame) { + animationTags.set(stateTypeName + "_frame", frameStr); + animationTags.set(stateTypeName + "_frameIndex", frameIndexStr); + } + animationTags.set(stateTypeName + "_state", activeState.stateName); + }); + + auto applied = apply.maybeLookupTagsView([&](StringView tag) -> StringView { + if (tag == "frame") { + if (frame) + return frameStr; + } else if (tag == "frameIndex") { + if (frame) + return frameIndexStr; + } else if (auto p = animationTags.ptr(tag)) { + return StringView(*p); + } else if (auto p = partTags.ptr(tag)) { + return StringView(*p); + } else if (auto p = m_globalTags.ptr(tag)) { + return StringView(*p); + } + + return StringView("default"); + }); + return applied ? applied.get() : apply; +} + void NetworkedAnimator::setProcessingDirectives(Directives const& directives) { m_processingDirectives.set(directives); diff --git a/source/game/StarNetworkedAnimator.hpp b/source/game/StarNetworkedAnimator.hpp index fd84ec1..f3f6568 100644 --- a/source/game/StarNetworkedAnimator.hpp +++ b/source/game/StarNetworkedAnimator.hpp @@ -129,6 +129,8 @@ public: void setPartDrawables(String const& partName, List<Drawable> drawables); void addPartDrawables(String const& partName, List<Drawable> drawables); + String applyPartTags(String const& partName, String apply); + void setProcessingDirectives(Directives const& directives); void setZoom(float zoom); bool flipped() const; diff --git a/source/game/scripting/StarNetworkedAnimatorLuaBindings.cpp b/source/game/scripting/StarNetworkedAnimatorLuaBindings.cpp index 937e237..68bd35c 100644 --- a/source/game/scripting/StarNetworkedAnimatorLuaBindings.cpp +++ b/source/game/scripting/StarNetworkedAnimatorLuaBindings.cpp @@ -14,6 +14,8 @@ LuaCallbacks LuaBindings::makeNetworkedAnimatorCallbacks(NetworkedAnimator* netw "animationState", bind(&NetworkedAnimator::state, networkedAnimator, _1)); callbacks.registerCallbackWithSignature<Json, String, String>( "animationStateProperty", bind(&NetworkedAnimator::stateProperty, networkedAnimator, _1, _2)); + callbacks.registerCallbackWithSignature<Json, String, String>( + "animationStateNextProperty", bind(&NetworkedAnimator::stateNextProperty, networkedAnimator, _1, _2)); callbacks.registerCallbackWithSignature<int, String>( "animationStateFrame", bind(&NetworkedAnimator::stateFrame, networkedAnimator, _1)); callbacks.registerCallbackWithSignature<float, String>( @@ -141,6 +143,9 @@ LuaCallbacks LuaBindings::makeNetworkedAnimatorCallbacks(NetworkedAnimator* netw callbacks.registerCallbackWithSignature<void, String, List<Drawable>>( "setPartDrawables", bind(&NetworkedAnimator::setPartDrawables, networkedAnimator, _1, _2)); + callbacks.registerCallbackWithSignature<String, String, String>( + "applyPartTags", bind(&NetworkedAnimator::applyPartTags, networkedAnimator, _1, _2)); + return callbacks; } diff --git a/source/game/scripting/StarScriptedAnimatorLuaBindings.cpp b/source/game/scripting/StarScriptedAnimatorLuaBindings.cpp index db0237d..d29e3a5 100644 --- a/source/game/scripting/StarScriptedAnimatorLuaBindings.cpp +++ b/source/game/scripting/StarScriptedAnimatorLuaBindings.cpp @@ -61,6 +61,8 @@ LuaCallbacks LuaBindings::makeScriptedAnimatorCallbacks(NetworkedAnimator* netwo "addPartDrawables", bind(&NetworkedAnimator::addPartDrawables, networkedAnimator, _1, _2)); callbacks.registerCallbackWithSignature<void, String, List<Drawable>>( "setPartDrawables", bind(&NetworkedAnimator::setPartDrawables, networkedAnimator, _1, _2)); + callbacks.registerCallbackWithSignature<String, String, String>( + "applyPartTags", bind(&NetworkedAnimator::applyPartTags, networkedAnimator, _1, _2)); return callbacks; |