From 0bf17a8dc4a4e7c7c1b763a2e12ac0de27caff1a Mon Sep 17 00:00:00 2001 From: WasabiRaptor Date: Sun, 18 May 2025 20:05:41 -0400 Subject: big feature expansion --- .../scripting/StarScriptedAnimatorLuaBindings.cpp | 58 ++++++++++++++++++---- 1 file changed, 49 insertions(+), 9 deletions(-) (limited to 'source/game/scripting/StarScriptedAnimatorLuaBindings.cpp') diff --git a/source/game/scripting/StarScriptedAnimatorLuaBindings.cpp b/source/game/scripting/StarScriptedAnimatorLuaBindings.cpp index 0b2dd7f..e093360 100644 --- a/source/game/scripting/StarScriptedAnimatorLuaBindings.cpp +++ b/source/game/scripting/StarScriptedAnimatorLuaBindings.cpp @@ -4,23 +4,63 @@ namespace Star { -LuaCallbacks LuaBindings::makeScriptedAnimatorCallbacks(const NetworkedAnimator* animator, function getParameter) { +LuaCallbacks LuaBindings::makeScriptedAnimatorCallbacks(NetworkedAnimator* networkedAnimator, function getParameter) { LuaCallbacks callbacks; callbacks.registerCallback("animationParameter", getParameter); - callbacks.registerCallback("partPoint", [animator](String const& partName, String const& propertyName) { - return animator->partPoint(partName, propertyName); - }); - callbacks.registerCallback("partPoly", [animator](String const& partName, String const& propertyName) { return animator->partPoly(partName, propertyName); }); + callbacks.registerCallbackWithSignature, String, String>("partPoint", bind(&NetworkedAnimator::partPoint, networkedAnimator, _1, _2)); + callbacks.registerCallbackWithSignature, String, String>("partPoly", bind(&NetworkedAnimator::partPoly, networkedAnimator, _1, _2)); + callbacks.registerCallbackWithSignature("partProperty", bind(&NetworkedAnimator::partProperty, networkedAnimator, _1, _2)); - callbacks.registerCallback("transformPoint", [animator] (Vec2F point, String const& part) -> Vec2F { - return animator->partTransformation(part).transformVec2(point); + callbacks.registerCallback("transformPoint", [networkedAnimator] (Vec2F point, String const& part) -> Vec2F { + return networkedAnimator->partTransformation(part).transformVec2(point); }); - callbacks.registerCallback("transformPoly", [animator] (PolyF poly, String const& part) -> PolyF { - poly.transform(animator->partTransformation(part)); + callbacks.registerCallback("transformPoly", [networkedAnimator] (PolyF poly, String const& part) -> PolyF { + poly.transform(networkedAnimator->partTransformation(part)); return poly; }); + callbacks.registerCallbackWithSignature( + "animationStateProperty", bind(&NetworkedAnimator::stateProperty, networkedAnimator, _1, _2)); + callbacks.registerCallbackWithSignature( + "animationState", bind(&NetworkedAnimator::state, networkedAnimator, _1)); + callbacks.registerCallbackWithSignature( + "animationStateFrame", bind(&NetworkedAnimator::stateFrame, networkedAnimator, _1)); + callbacks.registerCallbackWithSignature( + "animationStateFrameProgress", bind(&NetworkedAnimator::stateFrameProgress, networkedAnimator, _1)); + callbacks.registerCallbackWithSignature( + "animationStateTimer", bind(&NetworkedAnimator::stateTimer, networkedAnimator, _1)); + callbacks.registerCallbackWithSignature( + "animationStateReverse", bind(&NetworkedAnimator::stateReverse, networkedAnimator, _1)); + + callbacks.registerCallbackWithSignature( + "hasTransformationGroup", bind(&NetworkedAnimator::hasTransformationGroup, networkedAnimator, _1)); + + callbacks.registerCallbackWithSignature("translateLocalTransformationGroup", + bind(&NetworkedAnimator::translateLocalTransformationGroup, networkedAnimator, _1, _2)); + callbacks.registerCallback("rotateLocalTransformationGroup", + [networkedAnimator](String const& transformationGroup, float rotation, Maybe const& rotationCenter) { + networkedAnimator->rotateLocalTransformationGroup(transformationGroup, rotation, rotationCenter.value()); + }); + callbacks.registerCallback("scaleLocalTransformationGroup", + [networkedAnimator](LuaEngine& engine, String const& transformationGroup, LuaValue scale, Maybe const& scaleCenter) { + if (auto cs = engine.luaMaybeTo(scale)) + networkedAnimator->scaleLocalTransformationGroup(transformationGroup, *cs, scaleCenter.value()); + else + networkedAnimator->scaleLocalTransformationGroup(transformationGroup, engine.luaTo(scale), scaleCenter.value()); + }); + callbacks.registerCallbackWithSignature( + "transformLocalTransformationGroup", + bind(&NetworkedAnimator::transformLocalTransformationGroup, networkedAnimator, _1, _2, _3, _4, _5, _6, _7)); + callbacks.registerCallbackWithSignature( + "resetLocalTransformationGroup", bind(&NetworkedAnimator::resetLocalTransformationGroup, networkedAnimator, _1)); + + callbacks.registerCallbackWithSignature>( + "addPartDrawables", bind(&NetworkedAnimator::addPartDrawables, networkedAnimator, _1, _2)); + callbacks.registerCallbackWithSignature>( + "setPartDrawables", bind(&NetworkedAnimator::setPartDrawables, networkedAnimator, _1, _2)); + + return callbacks; } -- cgit v1.2.3 From 5eff2ae0115eb64509480efc0f9ada0f5f199846 Mon Sep 17 00:00:00 2001 From: WasabiRaptor Date: Sun, 18 May 2025 22:49:02 -0400 Subject: make next frame property accessible to script --- source/game/StarNetworkedAnimator.cpp | 3 +++ source/game/StarNetworkedAnimator.hpp | 1 + source/game/scripting/StarScriptedAnimatorLuaBindings.cpp | 2 ++ 3 files changed, 6 insertions(+) (limited to 'source/game/scripting/StarScriptedAnimatorLuaBindings.cpp') diff --git a/source/game/StarNetworkedAnimator.cpp b/source/game/StarNetworkedAnimator.cpp index c30a508..45553eb 100644 --- a/source/game/StarNetworkedAnimator.cpp +++ b/source/game/StarNetworkedAnimator.cpp @@ -349,6 +349,9 @@ StringList NetworkedAnimator::partNames() const { Json NetworkedAnimator::stateProperty(String const& stateType, String const& propertyName) const { return m_animatedParts.activeState(stateType).properties.value(propertyName); } +Json NetworkedAnimator::stateNextProperty(String const& stateType, String const& propertyName) const { + return m_animatedParts.activeState(stateType).nextProperties.value(propertyName); +} Json NetworkedAnimator::partProperty(String const& partName, String const& propertyName) const { return m_animatedParts.activePart(partName).properties.value(propertyName); diff --git a/source/game/StarNetworkedAnimator.hpp b/source/game/StarNetworkedAnimator.hpp index f91f526..fd84ec1 100644 --- a/source/game/StarNetworkedAnimator.hpp +++ b/source/game/StarNetworkedAnimator.hpp @@ -95,6 +95,7 @@ public: // AnimatedPartSet for the given state or part. If the property does not // exist, returns null. Json stateProperty(String const& stateType, String const& propertyName) const; + Json stateNextProperty(String const& stateType, String const& propertyName) const; Json partProperty(String const& partName, String const& propertyName) const; // Returns the transformation from flipping and zooming that is applied to diff --git a/source/game/scripting/StarScriptedAnimatorLuaBindings.cpp b/source/game/scripting/StarScriptedAnimatorLuaBindings.cpp index e093360..db0237d 100644 --- a/source/game/scripting/StarScriptedAnimatorLuaBindings.cpp +++ b/source/game/scripting/StarScriptedAnimatorLuaBindings.cpp @@ -22,6 +22,8 @@ LuaCallbacks LuaBindings::makeScriptedAnimatorCallbacks(NetworkedAnimator* netwo callbacks.registerCallbackWithSignature( "animationStateProperty", bind(&NetworkedAnimator::stateProperty, networkedAnimator, _1, _2)); + callbacks.registerCallbackWithSignature( + "animationStateNextProperty", bind(&NetworkedAnimator::stateNextProperty, networkedAnimator, _1, _2)); callbacks.registerCallbackWithSignature( "animationState", bind(&NetworkedAnimator::state, networkedAnimator, _1)); callbacks.registerCallbackWithSignature( -- cgit v1.2.3 From ffb2fdee70353b4d55cce22388813274e5368879 Mon Sep 17 00:00:00 2001 From: WasabiRaptor Date: Sun, 18 May 2025 23:28:06 -0400 Subject: apply part tags callback --- source/game/StarNetworkedAnimator.cpp | 50 ++++++++++++++++++++++ source/game/StarNetworkedAnimator.hpp | 2 + .../scripting/StarNetworkedAnimatorLuaBindings.cpp | 5 +++ .../scripting/StarScriptedAnimatorLuaBindings.cpp | 2 + 4 files changed, 59 insertions(+) (limited to 'source/game/scripting/StarScriptedAnimatorLuaBindings.cpp') 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 void NetworkedAnimator::addPartDrawables(String const& partName, List drawables) { m_partDrawables.ptr(partName)->appendAll(drawables); } +String NetworkedAnimator::applyPartTags(String const& partName, String apply) { + HashMap animationTags = {}; + Maybe 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(toString(stateFrame + 1)); + frameIndexStr = static_cast(toString(stateFrame)); + } + if (version() > 0) + m_animatedParts.forEachActiveState([&](String const& stateTypeName, AnimatedPartSet::ActiveStateInformation const& activeState) { + unsigned stateFrame = activeState.frame; + Maybe frame; + String frameStr; + String frameIndexStr; + + frame = stateFrame; + frameStr = static_cast(toString(stateFrame + 1)); + frameIndexStr = static_cast(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 drawables); void addPartDrawables(String const& partName, List 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( "animationStateProperty", bind(&NetworkedAnimator::stateProperty, networkedAnimator, _1, _2)); + callbacks.registerCallbackWithSignature( + "animationStateNextProperty", bind(&NetworkedAnimator::stateNextProperty, networkedAnimator, _1, _2)); callbacks.registerCallbackWithSignature( "animationStateFrame", bind(&NetworkedAnimator::stateFrame, networkedAnimator, _1)); callbacks.registerCallbackWithSignature( @@ -141,6 +143,9 @@ LuaCallbacks LuaBindings::makeNetworkedAnimatorCallbacks(NetworkedAnimator* netw callbacks.registerCallbackWithSignature>( "setPartDrawables", bind(&NetworkedAnimator::setPartDrawables, networkedAnimator, _1, _2)); + callbacks.registerCallbackWithSignature( + "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>( "setPartDrawables", bind(&NetworkedAnimator::setPartDrawables, networkedAnimator, _1, _2)); + callbacks.registerCallbackWithSignature( + "applyPartTags", bind(&NetworkedAnimator::applyPartTags, networkedAnimator, _1, _2)); return callbacks; -- cgit v1.2.3 From a117a34c3d352f005f64abef2636c25ca9ea9172 Mon Sep 17 00:00:00 2001 From: WasabiRaptor Date: Sun, 18 May 2025 23:37:30 -0400 Subject: callback for setting local anim state --- source/game/scripting/StarNetworkedAnimatorLuaBindings.cpp | 2 ++ source/game/scripting/StarScriptedAnimatorLuaBindings.cpp | 2 ++ 2 files changed, 4 insertions(+) (limited to 'source/game/scripting/StarScriptedAnimatorLuaBindings.cpp') diff --git a/source/game/scripting/StarNetworkedAnimatorLuaBindings.cpp b/source/game/scripting/StarNetworkedAnimatorLuaBindings.cpp index 68bd35c..49df283 100644 --- a/source/game/scripting/StarNetworkedAnimatorLuaBindings.cpp +++ b/source/game/scripting/StarNetworkedAnimatorLuaBindings.cpp @@ -10,6 +10,8 @@ LuaCallbacks LuaBindings::makeNetworkedAnimatorCallbacks(NetworkedAnimator* netw callbacks.registerCallbackWithSignature( "setAnimationState", bind(&NetworkedAnimator::setState, networkedAnimator, _1, _2, _3, _4)); + callbacks.registerCallbackWithSignature( + "setLocalAnimationState", bind(&NetworkedAnimator::setLocalState, networkedAnimator, _1, _2, _3, _4)); callbacks.registerCallbackWithSignature( "animationState", bind(&NetworkedAnimator::state, networkedAnimator, _1)); callbacks.registerCallbackWithSignature( diff --git a/source/game/scripting/StarScriptedAnimatorLuaBindings.cpp b/source/game/scripting/StarScriptedAnimatorLuaBindings.cpp index d29e3a5..593d2cd 100644 --- a/source/game/scripting/StarScriptedAnimatorLuaBindings.cpp +++ b/source/game/scripting/StarScriptedAnimatorLuaBindings.cpp @@ -20,6 +20,8 @@ LuaCallbacks LuaBindings::makeScriptedAnimatorCallbacks(NetworkedAnimator* netwo return poly; }); + callbacks.registerCallbackWithSignature( + "setLocalAnimationState", bind(&NetworkedAnimator::setLocalState, networkedAnimator, _1, _2, _3, _4)); callbacks.registerCallbackWithSignature( "animationStateProperty", bind(&NetworkedAnimator::stateProperty, networkedAnimator, _1, _2)); callbacks.registerCallbackWithSignature( -- cgit v1.2.3 From cd2dc5a603b60191461e4360b0a6949eff7138f5 Mon Sep 17 00:00:00 2001 From: WasabiRaptor Date: Mon, 19 May 2025 12:16:22 -0400 Subject: fix that type cast I did wrong I miss things while copy pasting and only changing one or two values --- source/game/scripting/StarScriptedAnimatorLuaBindings.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source/game/scripting/StarScriptedAnimatorLuaBindings.cpp') diff --git a/source/game/scripting/StarScriptedAnimatorLuaBindings.cpp b/source/game/scripting/StarScriptedAnimatorLuaBindings.cpp index 593d2cd..8f36080 100644 --- a/source/game/scripting/StarScriptedAnimatorLuaBindings.cpp +++ b/source/game/scripting/StarScriptedAnimatorLuaBindings.cpp @@ -26,7 +26,7 @@ LuaCallbacks LuaBindings::makeScriptedAnimatorCallbacks(NetworkedAnimator* netwo "animationStateProperty", bind(&NetworkedAnimator::stateProperty, networkedAnimator, _1, _2)); callbacks.registerCallbackWithSignature( "animationStateNextProperty", bind(&NetworkedAnimator::stateNextProperty, networkedAnimator, _1, _2)); - callbacks.registerCallbackWithSignature( + callbacks.registerCallbackWithSignature( "animationState", bind(&NetworkedAnimator::state, networkedAnimator, _1)); callbacks.registerCallbackWithSignature( "animationStateFrame", bind(&NetworkedAnimator::stateFrame, networkedAnimator, _1)); -- cgit v1.2.3