From fe20361d13ebb93efedc92909f9a51bb3ed0a677 Mon Sep 17 00:00:00 2001 From: Mario Zechner Date: Fri, 4 Jul 2025 21:48:13 +0200 Subject: [PATCH] [cpp] 4.3 porting WIP --- .../include/spine/PhysicsConstraintTimeline.h | 10 +++++++++- .../spine-cpp/src/spine/PhysicsConstraintTimeline.cpp | 10 ++++------ 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/spine-cpp/spine-cpp/include/spine/PhysicsConstraintTimeline.h b/spine-cpp/spine-cpp/include/spine/PhysicsConstraintTimeline.h index 63d6bbf3a..e0dccb4b3 100644 --- a/spine-cpp/spine-cpp/include/spine/PhysicsConstraintTimeline.h +++ b/spine-cpp/spine-cpp/include/spine/PhysicsConstraintTimeline.h @@ -135,6 +135,7 @@ namespace spine { } }; + /// Changes a physics constraint's PhysicsConstraintPose::getMassInverse(). The timeline values are not inverted. class SP_API PhysicsConstraintMassTimeline : public PhysicsConstraintTimeline { friend class SkeletonBinary; @@ -208,6 +209,7 @@ namespace spine { } }; + /// Changes a physics constraint's PhysicsConstraintPose::getMix(). class SP_API PhysicsConstraintMixTimeline : public PhysicsConstraintTimeline { friend class SkeletonBinary; @@ -232,6 +234,7 @@ namespace spine { } }; + /// Resets a physics constraint when specific animation times are reached. class SP_API PhysicsConstraintResetTimeline : public Timeline, public ConstraintTimeline { friend class SkeletonBinary; @@ -240,7 +243,8 @@ namespace spine { RTTI_DECL public: - explicit PhysicsConstraintResetTimeline(size_t frameCount, int physicsConstraintIndex): Timeline(frameCount, 1), ConstraintTimeline(physicsConstraintIndex) { + /// @param constraintIndex -1 for all physics constraints in the skeleton. + explicit PhysicsConstraintResetTimeline(size_t frameCount, int constraintIndex): Timeline(frameCount, 1), ConstraintTimeline(constraintIndex) { PropertyId ids[] = {((PropertyId)Property_PhysicsConstraintReset) << 32}; setPropertyIds(ids, 1); } @@ -251,6 +255,10 @@ namespace spine { int getFrameCount() { return (int)_frames.size(); } + /// The index of the physics constraint in Skeleton::getConstraints() that will be reset when this timeline is + /// applied, or -1 if all physics constraints in the skeleton will be reset. + virtual int getConstraintIndex() override { return _constraintIndex; } + /// Sets the time for the specified frame. void setFrame(int frame, float time) { _frames[frame] = time; diff --git a/spine-cpp/spine-cpp/src/spine/PhysicsConstraintTimeline.cpp b/spine-cpp/spine-cpp/src/spine/PhysicsConstraintTimeline.cpp index dda66529a..3ec8b6066 100644 --- a/spine-cpp/spine-cpp/src/spine/PhysicsConstraintTimeline.cpp +++ b/spine-cpp/spine-cpp/src/spine/PhysicsConstraintTimeline.cpp @@ -68,16 +68,14 @@ void PhysicsConstraintTimeline::apply(Skeleton &skeleton, float, float time, Vec PhysicsConstraint *constraint = physicsConstraints[i]; if (constraint->isActive() && global(constraint->_data)) { PhysicsConstraintPose &pose = appliedPose ? *constraint->_applied : constraint->_pose; - PhysicsConstraintPose &setupPose = constraint->_data._setup; - set(pose, getAbsoluteValue(time, alpha, blend, get(pose), get(setupPose), value)); + set(pose, getAbsoluteValue(time, alpha, blend, get(pose), get(constraint->_data._setup), value)); } } } else { - PhysicsConstraint *constraint = skeleton.getPhysicsConstraints()[_constraintIndex]; + PhysicsConstraint *constraint = static_cast(skeleton.getConstraints()[_constraintIndex]); if (constraint->isActive()) { PhysicsConstraintPose &pose = appliedPose ? *constraint->_applied : constraint->_pose; - PhysicsConstraintPose &setupPose = constraint->_data._setup; - set(pose, getAbsoluteValue(time, alpha, blend, get(pose), get(setupPose))); + set(pose, getAbsoluteValue(time, alpha, blend, get(pose), get(constraint->_data._setup))); } } } @@ -85,7 +83,7 @@ void PhysicsConstraintTimeline::apply(Skeleton &skeleton, float, float time, Vec void PhysicsConstraintResetTimeline::apply(Skeleton &skeleton, float lastTime, float time, Vector *, float alpha, MixBlend blend, MixDirection direction, bool appliedPose) { PhysicsConstraint *constraint = nullptr; if (_constraintIndex != -1) { - constraint = skeleton.getPhysicsConstraints()[_constraintIndex]; + constraint = static_cast(skeleton.getConstraints()[_constraintIndex]); if (!constraint->isActive()) return; }