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

summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
Diffstat (limited to 'source')
-rw-r--r--source/base/StarAnimatedPartSet.cpp127
-rw-r--r--source/base/StarAnimatedPartSet.hpp28
-rw-r--r--source/game/StarNetworkedAnimator.cpp307
-rw-r--r--source/game/StarNetworkedAnimator.hpp46
-rw-r--r--source/game/scripting/StarNetworkedAnimatorLuaBindings.cpp46
-rw-r--r--source/game/scripting/StarScriptedAnimatorLuaBindings.cpp64
-rw-r--r--source/game/scripting/StarScriptedAnimatorLuaBindings.hpp2
7 files changed, 38 insertions, 582 deletions
diff --git a/source/base/StarAnimatedPartSet.cpp b/source/base/StarAnimatedPartSet.cpp
index 9b9f9d7..5ffc68f 100644
--- a/source/base/StarAnimatedPartSet.cpp
+++ b/source/base/StarAnimatedPartSet.cpp
@@ -1,12 +1,11 @@
#include "StarAnimatedPartSet.hpp"
#include "StarMathCommon.hpp"
-#include "StarJsonExtra.hpp"
namespace Star {
AnimatedPartSet::AnimatedPartSet() {}
-AnimatedPartSet::AnimatedPartSet(Json config, uint8_t animatorVersion) {
+AnimatedPartSet::AnimatedPartSet(Json config) {
for (auto const& stateTypePair : config.get("stateTypes", JsonObject()).iterateObject()) {
auto const& stateTypeName = stateTypePair.first;
auto const& stateTypeConfig = stateTypePair.second;
@@ -34,7 +33,6 @@ AnimatedPartSet::AnimatedPartSet(Json config, uint8_t animatorVersion) {
newStateType.states.sortByKey();
newStateType.activeState.stateTypeName = stateTypeName;
- newStateType.activeState.reverse = false;
newStateType.activeStateDirty = true;
if (newStateType.defaultState.empty() && !newStateType.states.empty())
@@ -60,23 +58,20 @@ AnimatedPartSet::AnimatedPartSet(Json config, uint8_t animatorVersion) {
for (auto const& partStatePair : partStateTypePair.second.toObject()) {
auto const& stateName = partStatePair.first;
- auto stateConfig = partStatePair.second;
- if ((version() > 0) && stateConfig.isType(Json::Type::String))
- stateConfig = partStatePair.second.get(stateConfig.toString());
+ auto const& stateConfig = partStatePair.second;
PartState partState = {stateConfig.getObject("properties", {}), stateConfig.getObject("frameProperties", {})};
newPart.partStates[stateTypeName][stateName] = std::move(partState);
}
}
newPart.activePart.partName = partPair.first;
- newPart.activePart.setAnimationAffineTransform(Mat3F::identity());
newPart.activePartDirty = true;
m_parts[partName] = std::move(newPart);
}
for (auto const& pair : m_stateTypes)
- setActiveState(pair.first, pair.second.defaultState, true, false);
+ setActiveState(pair.first, pair.second.defaultState, true);
}
StringList AnimatedPartSet::stateTypes() const {
@@ -115,12 +110,11 @@ StringList AnimatedPartSet::partNames() const {
return m_parts.keys();
}
-bool AnimatedPartSet::setActiveState(String const& stateTypeName, String const& stateName, bool alwaysStart, bool reverse) {
+bool AnimatedPartSet::setActiveState(String const& stateTypeName, String const& stateName, bool alwaysStart) {
auto& stateType = m_stateTypes.get(stateTypeName);
- if (stateType.activeState.stateName != stateName || alwaysStart || stateType.activeState.reverse != reverse) {
+ if (stateType.activeState.stateName != stateName || alwaysStart) {
stateType.activeState.stateName = stateName;
stateType.activeState.timer = 0.0f;
- stateType.activeState.frameProgress = 0.0f;
stateType.activeStatePointer = stateType.states.get(stateName).get();
stateType.activeStateDirty = true;
@@ -180,15 +174,11 @@ size_t AnimatedPartSet::activeStateIndex(String const& stateTypeName) const {
auto const& stateType = m_stateTypes.get(stateTypeName);
return *stateType.states.indexOf(stateType.activeState.stateName);
}
-bool AnimatedPartSet::activeStateReverse(String const& stateTypeName) const {
- auto const& stateType = m_stateTypes.get(stateTypeName);
- return stateType.activeState.reverse;
-}
-bool AnimatedPartSet::setActiveStateIndex(String const& stateTypeName, size_t stateIndex, bool alwaysStart, bool reverse) {
+bool AnimatedPartSet::setActiveStateIndex(String const& stateTypeName, size_t stateIndex, bool alwaysStart) {
auto const& stateType = m_stateTypes.get(stateTypeName);
String const& stateName = stateType.states.keyAt(stateIndex);
- return setActiveState(stateTypeName, stateName, alwaysStart, reverse);
+ return setActiveState(stateTypeName, stateName, alwaysStart);
}
void AnimatedPartSet::update(float dt) {
@@ -257,40 +247,15 @@ void AnimatedPartSet::freshenActiveState(StateType& stateType) {
if (stateType.activeStateDirty) {
auto const& state = *stateType.activeStatePointer;
auto& activeState = stateType.activeState;
-
- double progress = (activeState.timer / state.cycle * state.frames);
- activeState.frameProgress = std::fmod(progress, 1);
- activeState.frame = clamp<int>(progress, 0, state.frames - 1);
- if (activeState.reverse) {
- activeState.frame = (state.frames - 1) - activeState.frame;
- if (state.animationMode == Loop)
- if (activeState.frame <= 0 ) {
- activeState.nextFrame = state.frames - 1;
- } else {
- activeState.nextFrame = clamp<int>(activeState.frame - 1, 0, state.frames - 1);
- }
- } else {
- if (state.animationMode == Loop)
- if (activeState.frame >= (state.frames-1) ) {
- activeState.nextFrame = 0;
- } else {
- activeState.nextFrame = clamp<int>(activeState.frame + 1, 0, state.frames - 1);
- }
- }
+ activeState.frame = clamp<int>(activeState.timer / state.cycle * state.frames, 0, state.frames - 1);
activeState.properties = stateType.stateTypeProperties;
activeState.properties.merge(state.stateProperties, true);
- activeState.nextProperties = activeState.properties;
-
for (auto const& pair : state.stateFrameProperties) {
if (activeState.frame < pair.second.size())
activeState.properties[pair.first] = pair.second.get(activeState.frame);
}
- for (auto const& pair : state.stateFrameProperties) {
- if (activeState.nextFrame < pair.second.size())
- activeState.nextProperties[pair.first] = pair.second.get(activeState.nextFrame);
- }
stateType.activeStateDirty = false;
}
@@ -327,56 +292,16 @@ void AnimatedPartSet::freshenActivePart(Part& part) {
freshenActiveState(stateType);
activePart.activeState = stateType.activeState;
unsigned frame = stateType.activeState.frame;
- unsigned nextFrame = stateType.activeState.nextFrame;
// Then set the part state data, as well as any part state frame data if
// the current frame is within the list size.
activePart.properties.merge(partState->partStateProperties, true);
- activePart.nextProperties = activePart.properties;
for (auto const& pair : partState->partStateFrameProperties) {
if (frame < pair.second.size())
activePart.properties[pair.first] = pair.second.get(frame);
}
- for (auto const& pair : partState->partStateFrameProperties) {
- if (nextFrame< pair.second.size())
- activePart.nextProperties[pair.first] = pair.second.get(nextFrame);
- }
- if (version() > 0) {
- auto processTransforms = [](Mat3F mat, JsonArray transforms, JsonObject properties) -> Mat3F {
- for (auto const& v : transforms) {
- auto action = v.getString(0);
- if (action == "reset") {
- mat = Mat3F::identity();
- } else if (action == "translate") {
- mat.translate(jsonToVec2F(v.getArray(1)));
- } else if (action == "rotate") {
- mat.rotate(v.getFloat(1), jsonToVec2F(v.getArray(2, properties.maybe("rotationCenter").value(JsonArray({0,0})).toArray())));
- } else if (action == "scale") {
- mat.scale(jsonToVec2F(v.getArray(1)), jsonToVec2F(v.getArray(2, properties.maybe("scalingCenter").value(JsonArray({0,0})).toArray())));
- } else if (action == "transform") {
- mat = Mat3F(v.getFloat(1), v.getFloat(2), v.getFloat(3), v.getFloat(4), v.getFloat(5), v.getFloat(6), 0, 0, 1) * mat;
- }
- }
- return mat;
- };
-
-
- if (auto transforms = activePart.properties.ptr("transforms")) {
- auto mat = processTransforms(activePart.animationAffineTransform(), transforms->toArray(), activePart.properties);
- if (activePart.properties.maybe("interpolated").value(false)) {
- if (auto nextTransforms = activePart.nextProperties.ptr("transforms")) {
- auto nextMat = processTransforms(activePart.animationAffineTransform(), nextTransforms->toArray(), activePart.nextProperties);
- activePart.setAnimationAffineTransform(mat, nextMat, stateType.activeState.frameProgress);
- } else {
- activePart.setAnimationAffineTransform(mat);
- }
- } else {
- activePart.setAnimationAffineTransform(mat);
- }
- }
- }
// Each part can only have one state type x state match, so we are done.
break;
}
@@ -385,40 +310,4 @@ void AnimatedPartSet::freshenActivePart(Part& part) {
}
}
-void AnimatedPartSet::ActivePartInformation::setAnimationAffineTransform(Mat3F const& matrix) {
- xTranslationAnimation = matrix[0][2];
- yTranslationAnimation = matrix[1][2];
- xScaleAnimation = sqrt(square(matrix[0][0]) + square(matrix[0][1]));
- yScaleAnimation = sqrt(square(matrix[1][0]) + square(matrix[1][1]));
- xShearAnimation = atan2(matrix[0][1], matrix[0][0]);
- yShearAnimation = atan2(matrix[1][0], matrix[1][1]);
-}
-void AnimatedPartSet::ActivePartInformation::setAnimationAffineTransform(Mat3F const& mat1, Mat3F const& mat2, float progress) {
- xTranslationAnimation = mat1[0][2];
- yTranslationAnimation = mat1[1][2];
- xScaleAnimation = sqrt(square(mat1[0][0]) + square(mat1[0][1]));
- yScaleAnimation = sqrt(square(mat1[1][0]) + square(mat1[1][1]));
- xShearAnimation = atan2(mat1[0][1], mat1[0][0]);
- yShearAnimation = atan2(mat1[1][0], mat1[1][1]);
-
- xTranslationAnimation += (mat2[0][2] - xTranslationAnimation) * progress;
- yTranslationAnimation += (mat2[1][2] - yTranslationAnimation) * progress;
- xScaleAnimation += (sqrt(square(mat2[0][0]) + square(mat2[0][1])) - xScaleAnimation) * progress;
- yScaleAnimation += (sqrt(square(mat2[1][0]) + square(mat2[1][1])) - yScaleAnimation) * progress;
- xShearAnimation += (atan2(mat2[0][1], mat2[0][0]) - xShearAnimation) * progress;
- yShearAnimation += (atan2(mat2[1][0], mat2[1][1]) - yShearAnimation) * progress;
-}
-
-Mat3F AnimatedPartSet::ActivePartInformation::animationAffineTransform() const {
- return Mat3F(
- xScaleAnimation * cos(xShearAnimation), xScaleAnimation * sin(xShearAnimation), xTranslationAnimation,
- yScaleAnimation * sin(yShearAnimation), yScaleAnimation * cos(yShearAnimation), yTranslationAnimation,
- 0, 0, 1
- );
-}
-
-uint8_t AnimatedPartSet::version() const {
- return m_animatorVersion;
-}
-
}
diff --git a/source/base/StarAnimatedPartSet.hpp b/source/base/StarAnimatedPartSet.hpp
index 43755be..a608924 100644
--- a/source/base/StarAnimatedPartSet.hpp
+++ b/source/base/StarAnimatedPartSet.hpp
@@ -2,7 +2,6 @@
#include "StarOrderedMap.hpp"
#include "StarJson.hpp"
-#include "StarMatrix3.hpp"
namespace Star {
@@ -47,11 +46,7 @@ public:
String stateName;
float timer;
unsigned frame;
- float frameProgress;
JsonObject properties;
- bool reverse;
- unsigned nextFrame;
- JsonObject nextProperties;
};
struct ActivePartInformation {
@@ -59,18 +54,6 @@ public:
// If a state match is found, this will be set.
Maybe<ActiveStateInformation> activeState;
JsonObject properties;
- JsonObject nextProperties;
-
- Mat3F animationAffineTransform() const;
- void setAnimationAffineTransform(Mat3F const& matrix);
- void setAnimationAffineTransform(Mat3F const& mat1, Mat3F const& mat2, float progress);
-
- float xTranslationAnimation;
- float yTranslationAnimation;
- float xScaleAnimation;
- float yScaleAnimation;
- float xShearAnimation;
- float yShearAnimation;
};
enum AnimationMode {
@@ -114,7 +97,7 @@ public:
};
AnimatedPartSet();
- AnimatedPartSet(Json config, uint8_t animatiorVersion);
+ AnimatedPartSet(Json config);
// Returns the available state types.
StringList stateTypes() const;
@@ -135,7 +118,7 @@ public:
// beginning. If alwaysStart is true, then starts the state animation off at
// the beginning even if no state change has occurred. Returns true if a
// state animation reset was done.
- bool setActiveState(String const& stateTypeName, String const& stateName, bool alwaysStart = false, bool reverse = false);
+ bool setActiveState(String const& stateTypeName, String const& stateName, bool alwaysStart = false);
// Restart this given state type's timer off at the beginning.
void restartState(String const& stateTypeName);
@@ -158,8 +141,7 @@ public:
// state type is ordered, it is possible to simply serialize and deserialize
// the state index for that state type.
size_t activeStateIndex(String const& stateTypeName) const;
- bool activeStateReverse(String const& stateTypeName) const;
- bool setActiveStateIndex(String const& stateTypeName, size_t stateIndex, bool alwaysStart = false, bool reverse = false);
+ bool setActiveStateIndex(String const& stateTypeName, size_t stateIndex, bool alwaysStart = false);
// Animate each state type forward 'dt' time, and either change state frames
// or transition to new states, depending on the config.
@@ -168,8 +150,6 @@ public:
// Pushes all the animations into their final state
void finishAnimations();
- uint8_t version() const;
-
private:
static AnimationMode stringToAnimationMode(String const& string);
@@ -178,8 +158,6 @@ private:
OrderedHashMap<String, StateType> m_stateTypes;
StringMap<Part> m_parts;
-
- uint8_t m_animatorVersion;
};
}
diff --git a/source/game/StarNetworkedAnimator.cpp b/source/game/StarNetworkedAnimator.cpp
index 7c070fa..a974a3a 100644
--- a/source/game/StarNetworkedAnimator.cpp
+++ b/source/game/StarNetworkedAnimator.cpp
@@ -87,14 +87,8 @@ NetworkedAnimator::NetworkedAnimator(Json config, String relativePath) : Network
if (relativePath.empty())
relativePath = "/";
}
- m_animatorVersion = config.getUInt("version", 0);
- if (version() > 0) {
- if (config.contains("includes"))
- config = mergeIncludes(config, config.get("includes"), relativePath);
- }
-
- m_animatedParts = AnimatedPartSet(config.get("animatedParts", JsonObject()), version());
+ m_animatedParts = AnimatedPartSet(config.get("animatedParts", JsonObject()));
m_relativePath = AssetPath::directory(relativePath);
for (auto const& pair : config.get("globalTagDefaults", JsonObject()).iterateObject())
@@ -109,8 +103,6 @@ NetworkedAnimator::NetworkedAnimator(Json config, String relativePath) : Network
auto& tg = m_transformationGroups[pair.first];
tg.interpolated = pair.second.getBool("interpolated", false);
tg.setAffineTransform(Mat3F::identity());
- tg.setAnimationAffineTransform(Mat3F::identity());
- tg.setLocalAffineTransform(Mat3F::identity());
}
for (auto const& pair : config.get("rotationGroups", JsonObject()).iterateObject()) {
@@ -264,7 +256,6 @@ NetworkedAnimator& NetworkedAnimator::operator=(NetworkedAnimator&& animator) {
m_globalTags = std::move(animator.m_globalTags);
m_partTags = std::move(animator.m_partTags);
m_cachedPartDrawables = std::move(animator.m_cachedPartDrawables);
- m_partDrawables = std::move(animator.m_partDrawables);
setupNetStates();
@@ -289,7 +280,6 @@ NetworkedAnimator& NetworkedAnimator::operator=(NetworkedAnimator const& animato
m_globalTags = animator.m_globalTags;
m_partTags = animator.m_partTags;
m_cachedPartDrawables = animator.m_cachedPartDrawables;
- m_partDrawables = animator.m_partDrawables;
setupNetStates();
@@ -304,9 +294,8 @@ StringList NetworkedAnimator::states(String const& stateType) const {
return m_animatedParts.states(stateType);
}
-bool NetworkedAnimator::setState(String const& stateType, String const& state, bool startNew, bool reverse) {
- if (m_animatedParts.setActiveState(stateType, state, startNew, reverse)) {
- m_stateInfo[stateType].wasUpdated = true;
+bool NetworkedAnimator::setState(String const& stateType, String const& state, bool startNew) {
+ if (m_animatedParts.setActiveState(stateType, state, startNew)) {
m_stateInfo[stateType].startedEvent.trigger();
return true;
} else {
@@ -314,25 +303,9 @@ bool NetworkedAnimator::setState(String const& stateType, String const& state, b
}
}
-bool NetworkedAnimator::setLocalState(String const& stateType, String const& state, bool startNew, bool reverse) {
- return m_animatedParts.setActiveState(stateType, state, startNew, reverse);
-}
-
String NetworkedAnimator::state(String const& stateType) const {
return m_animatedParts.activeState(stateType).stateName;
}
-int NetworkedAnimator::stateFrame(String const& stateType) const {
- return m_animatedParts.activeState(stateType).frame;
-}
-float NetworkedAnimator::stateFrameProgress(String const& stateType) const {
- return m_animatedParts.activeState(stateType).frameProgress;
-}
-float NetworkedAnimator::stateTimer(String const& stateType) const {
- return m_animatedParts.activeState(stateType).timer;
-}
-bool NetworkedAnimator::stateReverse(String const& stateType) const {
- return m_animatedParts.activeState(stateType).reverse;
-}
StringMap<AnimatedPartSet::Part> const& NetworkedAnimator::constParts() const {
return m_animatedParts.constParts();
@@ -349,9 +322,6 @@ 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);
@@ -367,7 +337,7 @@ Mat3F NetworkedAnimator::globalTransformation() const {
Mat3F NetworkedAnimator::groupTransformation(StringList const& transformationGroups) const {
auto mat = Mat3F::identity();
for (auto const& tg : transformationGroups)
- mat = m_transformationGroups.get(tg).affineTransform() * m_transformationGroups.get(tg).localAffineTransform() * m_transformationGroups.get(tg).animationAffineTransform() * mat;
+ mat = m_transformationGroups.get(tg).affineTransform() * mat;
return mat;
}
@@ -378,8 +348,6 @@ Mat3F NetworkedAnimator::partTransformation(String const& partName) const {
if (auto offset = part.properties.value("offset").opt().apply(jsonToVec2F))
transformation = Mat3F::translation(*offset) * transformation;
- transformation = part.animationAffineTransform() * transformation;
-
auto transformationGroups = jsonToStringList(part.properties.value("transformationGroups", JsonArray()));
transformation = groupTransformation(transformationGroups) * transformation;
@@ -436,63 +404,6 @@ void NetworkedAnimator::setPartTag(String const& partType, String tagName, Strin
m_partTags[partType].set(std::move(tagName), std::move(tagValue));
}
-void NetworkedAnimator::setPartDrawables(String const& partName, List<Drawable> drawables) {
- m_partDrawables.set(partName, drawables);
-}
-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);
}
@@ -574,40 +485,6 @@ void NetworkedAnimator::resetTransformationGroup(String const& transformationGro
m_transformationGroups.get(transformationGroup).setAffineTransform(Mat3F::identity());
}
-void NetworkedAnimator::translateLocalTransformationGroup(String const& transformationGroup, Vec2F const& translation) {
- auto& group = m_transformationGroups.get(transformationGroup);
- group.setLocalAffineTransform(Mat3F::translation(translation) * group.localAffineTransform());
-}
-
-void NetworkedAnimator::rotateLocalTransformationGroup(
- String const& transformationGroup, float rotation, Vec2F const& rotationCenter) {
- auto& group = m_transformationGroups.get(transformationGroup);
- group.setLocalAffineTransform(Mat3F::rotation(rotation, rotationCenter) * group.localAffineTransform());
-}
-
-void NetworkedAnimator::scaleLocalTransformationGroup(
- String const& transformationGroup, float scale, Vec2F const& scaleCenter) {
- auto& group = m_transformationGroups.get(transformationGroup);
- group.setLocalAffineTransform(Mat3F::scaling(scale, scaleCenter) * group.localAffineTransform());
-}
-
-void NetworkedAnimator::scaleLocalTransformationGroup(
- String const& transformationGroup, Vec2F const& scale, Vec2F const& scaleCenter) {
- auto& group = m_transformationGroups.get(transformationGroup);
- group.setLocalAffineTransform(Mat3F::scaling(scale, scaleCenter) * group.localAffineTransform());
-}
-
-void NetworkedAnimator::transformLocalTransformationGroup(
- String const& transformationGroup, float a, float b, float c, float d, float tx, float ty) {
- auto& group = m_transformationGroups.get(transformationGroup);
- Mat3F transform = Mat3F(a, b, tx, c, d, ty, 0, 0, 1);
- group.setLocalAffineTransform(transform * group.localAffineTransform());
-}
-
-void NetworkedAnimator::resetLocalTransformationGroup(String const& transformationGroup) {
- m_transformationGroups.get(transformationGroup).setLocalAffineTransform(Mat3F::identity());
-}
-
bool NetworkedAnimator::hasParticleEmitter(String const& emitterName) const {
return m_particleEmitters.contains(emitterName);
}
@@ -725,27 +602,9 @@ List<pair<Drawable, float>> NetworkedAnimator::drawablesWithZLevel(Vec2F const&
}
}
}
- HashMap<String, String> animationTags = {};
- 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);
- });
List<tuple<AnimatedPartSet::ActivePartInformation const*, String const*, float>> parts;
parts.reserve(partCount);
- int drawableCount = 0;
m_animatedParts.forEachActivePart([&](String const& partName, AnimatedPartSet::ActivePartInformation const& activePart) {
Maybe<float> maybeZLevel;
if (m_flipped.get()) {
@@ -755,15 +614,13 @@ List<pair<Drawable, float>> NetworkedAnimator::drawablesWithZLevel(Vec2F const&
if (!maybeZLevel)
maybeZLevel = activePart.properties.value("zLevel").optFloat();
- if (auto drawables = m_partDrawables.contains(partName))
- drawableCount += m_partDrawables.get(partName).size();
parts.append(make_tuple(&activePart, &partName, maybeZLevel.value(0.0f)));
});
sort(parts, [](auto const& a, auto const& b) { return get<2>(a) < get<2>(b); });
List<pair<Drawable, float>> drawables;
- drawables.reserve(partCount + drawableCount);
+ drawables.reserve(partCount);
for (auto& entry : parts) {
auto& activePart = *get<0>(entry);
auto& partName = *get<1>(entry);
@@ -776,22 +633,7 @@ List<pair<Drawable, float>> NetworkedAnimator::drawablesWithZLevel(Vec2F const&
bool fullbright = activePart.properties.value("fullbright").optBool().value(false);
size_t originalDirectivesSize = baseProcessingDirectives.size();
-
- auto const& partTags = m_partTags.get(partName);
-
if (auto directives = activePart.properties.value("processingDirectives").optString()) {
- if (version() > 0){
- directives = directives->maybeLookupTagsView([&](StringView tag) -> StringView {
- 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");
- });
- }
baseProcessingDirectives.append(*directives);
}
@@ -805,22 +647,11 @@ List<pair<Drawable, float>> NetworkedAnimator::drawablesWithZLevel(Vec2F const&
frameIndexStr = static_cast<String>(toString(stateFrame));
if (auto directives = activePart.activeState->properties.value("processingDirectives").optString()) {
- if (version() > 0){
- directives = directives->maybeLookupTagsView([&](StringView tag) -> StringView {
- 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");
- });
- }
baseProcessingDirectives.append(*directives);
}
}
+ auto const& partTags = m_partTags.get(partName);
Maybe<String> processedImage = image.maybeLookupTagsView([&](StringView tag) -> StringView {
if (tag == "frame") {
if (frame)
@@ -828,8 +659,6 @@ List<pair<Drawable, float>> NetworkedAnimator::drawablesWithZLevel(Vec2F const&
} 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)) {
@@ -840,9 +669,6 @@ List<pair<Drawable, float>> NetworkedAnimator::drawablesWithZLevel(Vec2F const&
});
String const& usedImage = processedImage ? processedImage.get() : image;
- auto transformation = globalTransformation() * partTransformation(partName);
- transformation.translate(position);
-
if (!usedImage.empty() && usedImage[0] != ':' && usedImage[0] != '?') {
size_t hash = hashOf(usedImage);
auto find = m_cachedPartDrawables.find(partName);
@@ -864,19 +690,14 @@ List<pair<Drawable, float>> NetworkedAnimator::drawablesWithZLevel(Vec2F const&
auto& imagePart = drawable.imagePart();
for (Directives const& directives : baseProcessingDirectives)
imagePart.addDirectives(directives, centered);
+ drawable.transform(partTransformation(partName));
+ drawable.transform(globalTransformation());
drawable.fullbright = fullbright;
- drawable.transform(transformation);
- drawables.append({std::move(drawable), get<2>(entry)});
- }
+ drawable.translate(position);
- if (m_partDrawables.contains(partName)) {
- auto partDrawables = m_partDrawables.get(partName);
- Drawable::transformAll(partDrawables, transformation);
- for (auto drawable : partDrawables) {
- drawables.append({drawable, get<2>(entry)});
- }
+ drawables.append({std::move(drawable), get<2>(entry)});
}
-
+
baseProcessingDirectives.resize(originalDirectivesSize);
}
@@ -1009,43 +830,6 @@ void NetworkedAnimator::update(float dt, DynamicTarget* dynamicTarget) {
for (auto const& name : particleEmittersOff->iterateArray())
m_particleEmitters.get(name.toString()).active.set(false);
}
-
- if (version() > 0){
- auto processTransforms = [](Mat3F mat, JsonArray transforms, JsonObject properties) -> Mat3F {
- for (auto const& v : transforms) {
- auto action = v.getString(0);
- if (action == "reset") {
- mat = Mat3F::identity();
- } else if (action == "translate") {
- mat.translate(jsonToVec2F(v.getArray(1)));
- } else if (action == "rotate") {
- mat.rotate(v.getFloat(1), jsonToVec2F(v.getArray(2, properties.maybe("rotationCenter").value(JsonArray({0,0})).toArray())));
- } else if (action == "scale") {
- mat.scale(jsonToVec2F(v.getArray(1)), jsonToVec2F(v.getArray(2, properties.maybe("scalingCenter").value(JsonArray({0,0})).toArray())));
- } else if (action == "transform") {
- mat = Mat3F(v.getFloat(1), v.getFloat(2), v.getFloat(3), v.getFloat(4), v.getFloat(5), v.getFloat(6), 0, 0, 1) * mat;
- }
- }
- return mat;
- };
-
-
- for (auto& pair : m_transformationGroups) {
- if (auto transforms = activeState.properties.ptr(pair.first)) {
- auto mat = processTransforms(pair.second.animationAffineTransform(), transforms->toArray(), activeState.properties);
- if (pair.second.interpolated) {
- if (auto nextTransforms = activeState.nextProperties.ptr(pair.first)) {
- auto nextMat = processTransforms(pair.second.animationAffineTransform(), nextTransforms->toArray(), activeState.nextProperties);
- pair.second.setAnimationAffineTransform(mat, nextMat, activeState.frameProgress);
- } else {
- pair.second.setAnimationAffineTransform(mat);
- }
- } else {
- pair.second.setAnimationAffineTransform(mat);
- }
- }
- }
- }
});
for (auto& pair : m_rotationGroups) {
@@ -1206,47 +990,6 @@ void NetworkedAnimator::TransformationGroup::setAffineTransform(Mat3F const& mat
yShear.set(atan2(matrix[1][0], matrix[1][1]));
}
-void NetworkedAnimator::TransformationGroup::setLocalAffineTransform(Mat3F const& matrix) {
- localTransform = matrix;
-}
-
-Mat3F NetworkedAnimator::TransformationGroup::localAffineTransform() const {
- return localTransform;
-}
-
-void NetworkedAnimator::TransformationGroup::setAnimationAffineTransform(Mat3F const& matrix) {
- xTranslationAnimation = matrix[0][2];
- yTranslationAnimation = matrix[1][2];
- xScaleAnimation = sqrt(square(matrix[0][0]) + square(matrix[0][1]));
- yScaleAnimation = sqrt(square(matrix[1][0]) + square(matrix[1][1]));
- xShearAnimation = atan2(matrix[0][1], matrix[0][0]);
- yShearAnimation = atan2(matrix[1][0], matrix[1][1]);
-}
-void NetworkedAnimator::TransformationGroup::setAnimationAffineTransform(Mat3F const& mat1, Mat3F const& mat2, float progress) {
- xTranslationAnimation = mat1[0][2];
- yTranslationAnimation = mat1[1][2];
- xScaleAnimation = sqrt(square(mat1[0][0]) + square(mat1[0][1]));
- yScaleAnimation = sqrt(square(mat1[1][0]) + square(mat1[1][1]));
- xShearAnimation = atan2(mat1[0][1], mat1[0][0]);
- yShearAnimation = atan2(mat1[1][0], mat1[1][1]);
-
- xTranslationAnimation += (mat2[0][2] - xTranslationAnimation) * progress;
- yTranslationAnimation += (mat2[1][2] - yTranslationAnimation) * progress;
- xScaleAnimation += (sqrt(square(mat2[0][0]) + square(mat2[0][1])) - xScaleAnimation) * progress;
- yScaleAnimation += (sqrt(square(mat2[1][0]) + square(mat2[1][1])) - yScaleAnimation) * progress;
- xShearAnimation += (atan2(mat2[0][1], mat2[0][0]) - xShearAnimation) * progress;
- yShearAnimation += (atan2(mat2[1][0], mat2[1][1]) - yShearAnimation) * progress;
-
-}
-
-Mat3F NetworkedAnimator::TransformationGroup::animationAffineTransform() const {
- return Mat3F(
- xScaleAnimation * cos(xShearAnimation), xScaleAnimation * sin(xShearAnimation), xTranslationAnimation,
- yScaleAnimation * sin(yShearAnimation), yScaleAnimation * cos(yShearAnimation), yTranslationAnimation,
- 0, 0, 1
- );
-}
-
void NetworkedAnimator::setupNetStates() {
clearNetElements();
@@ -1264,9 +1007,6 @@ void NetworkedAnimator::setupNetStates() {
addNetElement(&m_partTags[part]);
for (auto& pair : m_stateInfo) {
- pair.second.wasUpdated = true;
- pair.second.reverse.setCompatibilityVersion(8);
- addNetElement(&pair.second.reverse);
addNetElement(&pair.second.stateIndex);
addNetElement(&pair.second.startedEvent);
}
@@ -1341,13 +1081,12 @@ void NetworkedAnimator::setupNetStates() {
for (auto& pair : m_effects)
addNetElement(&pair.second.enabled);
-
}
void NetworkedAnimator::netElementsNeedLoad(bool initial) {
for (auto& pair : m_stateInfo) {
if (pair.second.startedEvent.pullOccurred() || initial)
- m_animatedParts.setActiveStateIndex(pair.first, pair.second.stateIndex.get(), true, pair.second.reverse.get());
+ m_animatedParts.setActiveStateIndex(pair.first, pair.second.stateIndex.get(), true);
}
for (auto& pair : m_rotationGroups) {
@@ -1357,26 +1096,8 @@ void NetworkedAnimator::netElementsNeedLoad(bool initial) {
}
void NetworkedAnimator::netElementsNeedStore() {
- for (auto& pair : m_stateInfo) {
- if (pair.second.wasUpdated || (version() < 1)) {
- pair.second.stateIndex.set(m_animatedParts.activeStateIndex(pair.first));
- pair.second.reverse.set(m_animatedParts.activeStateReverse(pair.first));
- }
- }
-}
-
-uint8_t NetworkedAnimator::version() const {
- return m_animatorVersion;
-}
-
-Json NetworkedAnimator::mergeIncludes(Json config, Json includes, String relativePath){
- for (Json const& path : includes.iterateArray()) {
- auto includeConfig = Root::singleton().assets()->json(AssetPath::relativeTo(relativePath, path.toString()));
- if (includeConfig.contains("includes"))
- includeConfig = mergeIncludes(includeConfig, includeConfig.get("includes"), relativePath);
- config = jsonMerge(includeConfig, config);
- }
- return config;
+ for (auto& pair : m_stateInfo)
+ pair.second.stateIndex.set(m_animatedParts.activeStateIndex(pair.first));
}
}
diff --git a/source/game/StarNetworkedAnimator.hpp b/source/game/StarNetworkedAnimator.hpp
index f3f6568..8265011 100644
--- a/source/game/StarNetworkedAnimator.hpp
+++ b/source/game/StarNetworkedAnimator.hpp
@@ -79,13 +79,8 @@ public:
// Returns whether a state change occurred. If startNew is true, always
// forces a state change and starts the state off at the beginning even if
// this state is already the current state.
- bool setState(String const& stateType, String const& state, bool startNew = false, bool reverse = false);
- bool setLocalState(String const& stateType, String const& state, bool startNew = false, bool reverse = false);
+ bool setState(String const& stateType, String const& state, bool startNew = false);
String state(String const& stateType) const;
- int stateFrame(String const& stateType) const;
- float stateFrameProgress(String const& stateType) const;
- float stateTimer(String const& stateType) const;
- bool stateReverse(String const& stateType) const;
StringMap<AnimatedPartSet::Part> const& constParts() const;
StringMap<AnimatedPartSet::Part>& parts();
@@ -95,7 +90,6 @@ 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
@@ -126,11 +120,6 @@ public:
String const* globalTagPtr(String const& tagName) const;
void setPartTag(String const& partType, String tagName, String tagValue);
- 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;
@@ -158,13 +147,6 @@ public:
void transformTransformationGroup(String const& transformationGroup, float a, float b, float c, float d, float tx, float ty);
void resetTransformationGroup(String const& transformationGroup);
- void translateLocalTransformationGroup(String const& transformationGroup, Vec2F const& translation);
- void rotateLocalTransformationGroup(String const& transformationGroup, float rotation, Vec2F const& rotationCenter = Vec2F());
- void scaleLocalTransformationGroup(String const& transformationGroup, float scale, Vec2F const& scaleCenter = Vec2F());
- void scaleLocalTransformationGroup(String const& transformationGroup, Vec2F const& scale, Vec2F const& scaleCenter = Vec2F());
- void transformLocalTransformationGroup(String const& transformationGroup, float a, float b, float c, float d, float tx, float ty);
- void resetLocalTransformationGroup(String const& transformationGroup);
-
bool hasParticleEmitter(String const& emitterName) const;
// Active particle emitters emit over time based on emission rate/variance.
void setParticleEmitterActive(String const& emitterName, bool active);
@@ -218,7 +200,6 @@ public:
// Run through the current animations until the final frame, including any
// transition animations.
void finishAnimations();
- uint8_t version() const;
private:
struct RotationGroup {
@@ -235,31 +216,14 @@ private:
Mat3F affineTransform() const;
void setAffineTransform(Mat3F const& matrix);
- Mat3F localAffineTransform() const;
- void setLocalAffineTransform(Mat3F const& matrix);
-
- Mat3F animationAffineTransform() const;
- void setAnimationAffineTransform(Mat3F const& matrix);
- void setAnimationAffineTransform(Mat3F const& mat1, Mat3F const& mat2, float progress);
-
bool interpolated;
- Mat3F localTransform;
-
NetElementFloat xTranslation;
NetElementFloat yTranslation;
NetElementFloat xScale;
NetElementFloat yScale;
NetElementFloat xShear;
NetElementFloat yShear;
-
- float xTranslationAnimation;
- float yTranslationAnimation;
- float xScaleAnimation;
- float yScaleAnimation;
- float xShearAnimation;
- float yShearAnimation;
-
};
struct ParticleEmitter {
@@ -335,8 +299,6 @@ private:
struct StateInfo {
NetElementSize stateIndex;
NetElementEvent startedEvent;
- bool wasUpdated;
- NetElementBool reverse;
};
void setupNetStates();
@@ -344,10 +306,7 @@ private:
void netElementsNeedLoad(bool full) override;
void netElementsNeedStore() override;
- Json mergeIncludes(Json config, Json includes, String relativePath);
-
String m_relativePath;
- uint8_t m_animatorVersion;
AnimatedPartSet m_animatedParts;
OrderedHashMap<String, StateInfo> m_stateInfo;
@@ -368,9 +327,6 @@ private:
NetElementHashMap<String, String> m_globalTags;
StableStringMap<NetElementHashMap<String, String>> m_partTags;
-
- HashMap<String,List<Drawable>> m_partDrawables;
-
mutable StringMap<std::pair<size_t, Drawable>> m_cachedPartDrawables;
};
diff --git a/source/game/scripting/StarNetworkedAnimatorLuaBindings.cpp b/source/game/scripting/StarNetworkedAnimatorLuaBindings.cpp
index 49df283..dfafeb0 100644
--- a/source/game/scripting/StarNetworkedAnimatorLuaBindings.cpp
+++ b/source/game/scripting/StarNetworkedAnimatorLuaBindings.cpp
@@ -8,25 +8,12 @@ namespace Star {
LuaCallbacks LuaBindings::makeNetworkedAnimatorCallbacks(NetworkedAnimator* networkedAnimator) {
LuaCallbacks callbacks;
- callbacks.registerCallbackWithSignature<bool, String, String, bool, bool>(
- "setAnimationState", bind(&NetworkedAnimator::setState, networkedAnimator, _1, _2, _3, _4));
- callbacks.registerCallbackWithSignature<bool, String, String, bool, bool>(
- "setLocalAnimationState", bind(&NetworkedAnimator::setLocalState, networkedAnimator, _1, _2, _3, _4));
+ callbacks.registerCallbackWithSignature<bool, String, String, bool>(
+ "setAnimationState", bind(&NetworkedAnimator::setState, networkedAnimator, _1, _2, _3));
callbacks.registerCallbackWithSignature<String, String>(
"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>(
- "animationStateFrameProgress", bind(&NetworkedAnimator::stateFrameProgress, networkedAnimator, _1));
- callbacks.registerCallbackWithSignature<float, String>(
- "animationStateTimer", bind(&NetworkedAnimator::stateTimer, networkedAnimator, _1));
- callbacks.registerCallbackWithSignature<bool, String>(
- "animationStateReverse", bind(&NetworkedAnimator::stateReverse, networkedAnimator, _1));
-
callbacks.registerCallbackWithSignature<void, String, String>(
"setGlobalTag", bind(&NetworkedAnimator::setGlobalTag, networkedAnimator, _1, _2));
callbacks.registerCallbackWithSignature<void, String, String, String>(
@@ -43,7 +30,6 @@ LuaCallbacks LuaBindings::makeNetworkedAnimatorCallbacks(NetworkedAnimator* netw
"currentRotationAngle", bind(&NetworkedAnimator::currentRotationAngle, networkedAnimator, _1));
callbacks.registerCallbackWithSignature<bool, String>(
"hasTransformationGroup", bind(&NetworkedAnimator::hasTransformationGroup, networkedAnimator, _1));
-
callbacks.registerCallbackWithSignature<void, String, Vec2F>("translateTransformationGroup",
bind(&NetworkedAnimator::translateTransformationGroup, networkedAnimator, _1, _2));
callbacks.registerCallback("rotateTransformationGroup",
@@ -62,27 +48,6 @@ LuaCallbacks LuaBindings::makeNetworkedAnimatorCallbacks(NetworkedAnimator* netw
bind(&NetworkedAnimator::transformTransformationGroup, networkedAnimator, _1, _2, _3, _4, _5, _6, _7));
callbacks.registerCallbackWithSignature<void, String>(
"resetTransformationGroup", bind(&NetworkedAnimator::resetTransformationGroup, networkedAnimator, _1));
-
- callbacks.registerCallbackWithSignature<void, String, Vec2F>("translateLocalTransformationGroup",
- bind(&NetworkedAnimator::translateLocalTransformationGroup, networkedAnimator, _1, _2));
- callbacks.registerCallback("rotateLocalTransformationGroup",
- [networkedAnimator](String const& transformationGroup, float rotation, Maybe<Vec2F> const& rotationCenter) {
- networkedAnimator->rotateLocalTransformationGroup(transformationGroup, rotation, rotationCenter.value());
- });
- callbacks.registerCallback("scaleLocalTransformationGroup",
- [networkedAnimator](LuaEngine& engine, String const& transformationGroup, LuaValue scale, Maybe<Vec2F> const& scaleCenter) {
- if (auto cs = engine.luaMaybeTo<Vec2F>(scale))
- networkedAnimator->scaleLocalTransformationGroup(transformationGroup, *cs, scaleCenter.value());
- else
- networkedAnimator->scaleLocalTransformationGroup(transformationGroup, engine.luaTo<float>(scale), scaleCenter.value());
- });
- callbacks.registerCallbackWithSignature<void, String, float, float, float, float, float, float>(
- "transformLocalTransformationGroup",
- bind(&NetworkedAnimator::transformLocalTransformationGroup, networkedAnimator, _1, _2, _3, _4, _5, _6, _7));
- callbacks.registerCallbackWithSignature<void, String>(
- "resetLocalTransformationGroup", bind(&NetworkedAnimator::resetLocalTransformationGroup, networkedAnimator, _1));
-
-
callbacks.registerCallbackWithSignature<void, String, bool>(
"setParticleEmitterActive", bind(&NetworkedAnimator::setParticleEmitterActive, networkedAnimator, _1, _2));
callbacks.registerCallbackWithSignature<void, String, float>("setParticleEmitterEmissionRate",
@@ -140,13 +105,6 @@ LuaCallbacks LuaBindings::makeNetworkedAnimatorCallbacks(NetworkedAnimator* netw
return poly;
});
- callbacks.registerCallbackWithSignature<void, String, List<Drawable>>(
- "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;
}
diff --git a/source/game/scripting/StarScriptedAnimatorLuaBindings.cpp b/source/game/scripting/StarScriptedAnimatorLuaBindings.cpp
index 8f36080..0b2dd7f 100644
--- a/source/game/scripting/StarScriptedAnimatorLuaBindings.cpp
+++ b/source/game/scripting/StarScriptedAnimatorLuaBindings.cpp
@@ -4,69 +4,23 @@
namespace Star {
-LuaCallbacks LuaBindings::makeScriptedAnimatorCallbacks(NetworkedAnimator* networkedAnimator, function<Json(String const&, Json const&)> getParameter) {
+LuaCallbacks LuaBindings::makeScriptedAnimatorCallbacks(const NetworkedAnimator* animator, function<Json(String const&, Json const&)> getParameter) {
LuaCallbacks callbacks;
callbacks.registerCallback("animationParameter", getParameter);
- callbacks.registerCallbackWithSignature<Maybe<Vec2F>, String, String>("partPoint", bind(&NetworkedAnimator::partPoint, networkedAnimator, _1, _2));
- callbacks.registerCallbackWithSignature<Maybe<PolyF>, String, String>("partPoly", bind(&NetworkedAnimator::partPoly, networkedAnimator, _1, _2));
- callbacks.registerCallbackWithSignature<Json, String, String>("partProperty", bind(&NetworkedAnimator::partProperty, networkedAnimator, _1, _2));
+ 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.registerCallback("transformPoint", [networkedAnimator] (Vec2F point, String const& part) -> Vec2F {
- return networkedAnimator->partTransformation(part).transformVec2(point);
+ callbacks.registerCallback("transformPoint", [animator] (Vec2F point, String const& part) -> Vec2F {
+ return animator->partTransformation(part).transformVec2(point);
});
- callbacks.registerCallback("transformPoly", [networkedAnimator] (PolyF poly, String const& part) -> PolyF {
- poly.transform(networkedAnimator->partTransformation(part));
+ callbacks.registerCallback("transformPoly", [animator] (PolyF poly, String const& part) -> PolyF {
+ poly.transform(animator->partTransformation(part));
return poly;
});
- callbacks.registerCallbackWithSignature<bool, String, String, bool, bool>(
- "setLocalAnimationState", bind(&NetworkedAnimator::setLocalState, networkedAnimator, _1, _2, _3, _4));
- 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<String, String>(
- "animationState", bind(&NetworkedAnimator::state, networkedAnimator, _1));
- callbacks.registerCallbackWithSignature<int, String>(
- "animationStateFrame", bind(&NetworkedAnimator::stateFrame, networkedAnimator, _1));
- callbacks.registerCallbackWithSignature<float, String>(
- "animationStateFrameProgress", bind(&NetworkedAnimator::stateFrameProgress, networkedAnimator, _1));
- callbacks.registerCallbackWithSignature<float, String>(
- "animationStateTimer", bind(&NetworkedAnimator::stateTimer, networkedAnimator, _1));
- callbacks.registerCallbackWithSignature<bool, String>(
- "animationStateReverse", bind(&NetworkedAnimator::stateReverse, networkedAnimator, _1));
-
- callbacks.registerCallbackWithSignature<bool, String>(
- "hasTransformationGroup", bind(&NetworkedAnimator::hasTransformationGroup, networkedAnimator, _1));
-
- callbacks.registerCallbackWithSignature<void, String, Vec2F>("translateLocalTransformationGroup",
- bind(&NetworkedAnimator::translateLocalTransformationGroup, networkedAnimator, _1, _2));
- callbacks.registerCallback("rotateLocalTransformationGroup",
- [networkedAnimator](String const& transformationGroup, float rotation, Maybe<Vec2F> const& rotationCenter) {
- networkedAnimator->rotateLocalTransformationGroup(transformationGroup, rotation, rotationCenter.value());
- });
- callbacks.registerCallback("scaleLocalTransformationGroup",
- [networkedAnimator](LuaEngine& engine, String const& transformationGroup, LuaValue scale, Maybe<Vec2F> const& scaleCenter) {
- if (auto cs = engine.luaMaybeTo<Vec2F>(scale))
- networkedAnimator->scaleLocalTransformationGroup(transformationGroup, *cs, scaleCenter.value());
- else
- networkedAnimator->scaleLocalTransformationGroup(transformationGroup, engine.luaTo<float>(scale), scaleCenter.value());
- });
- callbacks.registerCallbackWithSignature<void, String, float, float, float, float, float, float>(
- "transformLocalTransformationGroup",
- bind(&NetworkedAnimator::transformLocalTransformationGroup, networkedAnimator, _1, _2, _3, _4, _5, _6, _7));
- callbacks.registerCallbackWithSignature<void, String>(
- "resetLocalTransformationGroup", bind(&NetworkedAnimator::resetLocalTransformationGroup, networkedAnimator, _1));
-
- callbacks.registerCallbackWithSignature<void, String, List<Drawable>>(
- "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;
}
diff --git a/source/game/scripting/StarScriptedAnimatorLuaBindings.hpp b/source/game/scripting/StarScriptedAnimatorLuaBindings.hpp
index bf81936..27f8ed5 100644
--- a/source/game/scripting/StarScriptedAnimatorLuaBindings.hpp
+++ b/source/game/scripting/StarScriptedAnimatorLuaBindings.hpp
@@ -6,6 +6,6 @@
namespace Star {
namespace LuaBindings {
- LuaCallbacks makeScriptedAnimatorCallbacks(NetworkedAnimator* networkedAnimator, function<Json(String const&, Json const&)> getParameter);
+ LuaCallbacks makeScriptedAnimatorCallbacks(const NetworkedAnimator* animator, function<Json(String const&, Json const&)> getParameter);
}
}