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

summaryrefslogtreecommitdiff
path: root/source/game
diff options
context:
space:
mode:
authorWasabiRaptor <ketchupraptor@gmail.com>2025-05-18 23:28:06 -0400
committerWasabiRaptor <ketchupraptor@gmail.com>2025-05-18 23:28:06 -0400
commitffb2fdee70353b4d55cce22388813274e5368879 (patch)
tree31145f73a16f08d94c971c12406f1fa1276af976 /source/game
parent5eff2ae0115eb64509480efc0f9ada0f5f199846 (diff)
apply part tags callback
Diffstat (limited to 'source/game')
-rw-r--r--source/game/StarNetworkedAnimator.cpp50
-rw-r--r--source/game/StarNetworkedAnimator.hpp2
-rw-r--r--source/game/scripting/StarNetworkedAnimatorLuaBindings.cpp5
-rw-r--r--source/game/scripting/StarScriptedAnimatorLuaBindings.cpp2
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;