From a574de1202e8106f9c418f33594f905dd66c7948 Mon Sep 17 00:00:00 2001 From: Mario Zechner Date: Thu, 12 Jun 2025 22:26:25 +0200 Subject: [PATCH] [cpp] 4.3 porting WIP --- .../include/spine/DrawOrderTimeline.h | 2 +- .../spine-cpp/include/spine/EventTimeline.h | 2 +- .../include/spine/IkConstraintTimeline.h | 2 +- .../include/spine/PathConstraintData.h | 32 +--------- .../include/spine/PhysicsConstraintPose.h | 1 + .../include/spine/PhysicsConstraintTimeline.h | 60 +++++++++---------- spine-cpp/spine-cpp/include/spine/Posed.h | 4 +- spine-cpp/spine-cpp/include/spine/PosedData.h | 4 +- spine-cpp/spine-cpp/include/spine/Skeleton.h | 2 + spine-cpp/spine-cpp/include/spine/spine.h | 7 --- .../spine-cpp/src/spine/BoneTimeline.cpp | 6 +- .../src/spine/IkConstraintTimeline.cpp | 2 +- spine-cpp/spine-cpp/src/spine/Log.cpp | 12 ++-- .../spine-cpp/src/spine/MeshAttachment.cpp | 3 +- .../src/spine/PathConstraintMixTimeline.cpp | 2 +- .../src/spine/PhysicsConstraintTimeline.cpp | 2 +- 16 files changed, 57 insertions(+), 86 deletions(-) diff --git a/spine-cpp/spine-cpp/include/spine/DrawOrderTimeline.h b/spine-cpp/spine-cpp/include/spine/DrawOrderTimeline.h index 2f1b9ea40..00289b6a5 100644 --- a/spine-cpp/spine-cpp/include/spine/DrawOrderTimeline.h +++ b/spine-cpp/spine-cpp/include/spine/DrawOrderTimeline.h @@ -46,7 +46,7 @@ namespace spine { virtual void apply(Skeleton &skeleton, float lastTime, float time, Vector *pEvents, float alpha, MixBlend blend, - MixDirection direction, bool appliedPose); + MixDirection direction, bool appliedPose) override; size_t getFrameCount(); diff --git a/spine-cpp/spine-cpp/include/spine/EventTimeline.h b/spine-cpp/spine-cpp/include/spine/EventTimeline.h index eb2459f54..01f916ce6 100644 --- a/spine-cpp/spine-cpp/include/spine/EventTimeline.h +++ b/spine-cpp/spine-cpp/include/spine/EventTimeline.h @@ -49,7 +49,7 @@ namespace spine { /// Fires events for frames > lastTime and <= time. virtual void apply(Skeleton &skeleton, float lastTime, float time, Vector *pEvents, float alpha, MixBlend blend, - MixDirection direction, bool appliedPose); + MixDirection direction, bool appliedPose) override; size_t getFrameCount(); diff --git a/spine-cpp/spine-cpp/include/spine/IkConstraintTimeline.h b/spine-cpp/spine-cpp/include/spine/IkConstraintTimeline.h index 11dcf2e9a..18bfd0f2f 100644 --- a/spine-cpp/spine-cpp/include/spine/IkConstraintTimeline.h +++ b/spine-cpp/spine-cpp/include/spine/IkConstraintTimeline.h @@ -46,7 +46,7 @@ namespace spine { virtual void apply(Skeleton &skeleton, float lastTime, float time, Vector *pEvents, float alpha, MixBlend blend, - MixDirection direction); + MixDirection direction) override; /// Sets the time, mix and bend direction of the specified keyframe. void setFrame(int frame, float time, float mix, float softness, int bendDirection, bool compress, bool stretch); diff --git a/spine-cpp/spine-cpp/include/spine/PathConstraintData.h b/spine-cpp/spine-cpp/include/spine/PathConstraintData.h index d481fe287..31a4e7216 100644 --- a/spine-cpp/spine-cpp/include/spine/PathConstraintData.h +++ b/spine-cpp/spine-cpp/include/spine/PathConstraintData.h @@ -34,6 +34,9 @@ #include #include #include +#include +#include +#include namespace spine { class BoneData; @@ -41,35 +44,6 @@ namespace spine { class PathConstraint; class Skeleton; - /// Controls how the first bone is positioned along the path. - /// - /// See https://esotericsoftware.com/spine-path-constraints#Position-mode Position mode in the Spine User Guide. - enum PositionMode { - PositionMode_Fixed, - PositionMode_Percent - }; - - /// Controls how bones after the first bone are positioned along the path. - /// - /// See https://esotericsoftware.com/spine-path-constraints#Spacing-mode Spacing mode in the Spine User Guide. - enum SpacingMode { - SpacingMode_Length, - SpacingMode_Fixed, - SpacingMode_Percent, - SpacingMode_Proportional - }; - - /// Controls how bones are rotated, translated, and scaled to match the path. - /// - /// See https://esotericsoftware.com/spine-path-constraints#Rotate-Mix Rotate mode in the Spine User Guide. - enum RotateMode { - RotateMode_Tangent, - RotateMode_Chain, - /// When chain scale, constrained bones should all have the same parent. That way when the path constraint scales a bone, it - /// doesn't affect other constrained bones. - RotateMode_ChainScale - }; - /// Stores the setup pose for a PathConstraint. /// /// See https://esotericsoftware.com/spine-path-constraints Path constraints in the Spine User Guide. diff --git a/spine-cpp/spine-cpp/include/spine/PhysicsConstraintPose.h b/spine-cpp/spine-cpp/include/spine/PhysicsConstraintPose.h index f880afd40..94db84af7 100644 --- a/spine-cpp/spine-cpp/include/spine/PhysicsConstraintPose.h +++ b/spine-cpp/spine-cpp/include/spine/PhysicsConstraintPose.h @@ -37,6 +37,7 @@ namespace spine { /// Stores a pose for a physics constraint. class SP_API PhysicsConstraintPose : public Pose { friend class PhysicsConstraint; + friend class PhysicsConstraintTimeline; private: float _inertia; diff --git a/spine-cpp/spine-cpp/include/spine/PhysicsConstraintTimeline.h b/spine-cpp/spine-cpp/include/spine/PhysicsConstraintTimeline.h index 1152dfb1d..594b3f93f 100644 --- a/spine-cpp/spine-cpp/include/spine/PhysicsConstraintTimeline.h +++ b/spine-cpp/spine-cpp/include/spine/PhysicsConstraintTimeline.h @@ -49,7 +49,7 @@ namespace spine { virtual void apply(Skeleton &skeleton, float lastTime, float time, Vector *pEvents, float alpha, MixBlend blend, - MixDirection direction, bool appliedPose); + MixDirection direction, bool appliedPose) override; int getPhysicsConstraintIndex() { return _constraintIndex; } @@ -75,16 +75,16 @@ namespace spine { explicit PhysicsConstraintInertiaTimeline(size_t frameCount, size_t bezierCount, int physicsConstraintIndex): PhysicsConstraintTimeline(frameCount, bezierCount, physicsConstraintIndex, Property_PhysicsConstraintInertia) {}; protected: - float get(PhysicsConstraintPose &pose) { + float get(PhysicsConstraintPose &pose) override { return pose.getInertia(); } - void set(PhysicsConstraintPose &pose, float value) { + void set(PhysicsConstraintPose &pose, float value) override { pose.setInertia(value); } - bool global(PhysicsConstraintData &constraintData) { - return constraintData.isInertiaGlobal(); + bool global(PhysicsConstraintData &constraintData) override { + return constraintData.getInertiaGlobal(); } }; @@ -99,16 +99,16 @@ namespace spine { explicit PhysicsConstraintStrengthTimeline(size_t frameCount, size_t bezierCount, int physicsConstraintIndex): PhysicsConstraintTimeline(frameCount, bezierCount, physicsConstraintIndex, Property_PhysicsConstraintStrength) {}; protected: - float get(PhysicsConstraintPose &pose) { + float get(PhysicsConstraintPose &pose) override { return pose.getStrength(); } - void set(PhysicsConstraintPose &pose, float value) { + void set(PhysicsConstraintPose &pose, float value) override { pose.setStrength(value); } - bool global(PhysicsConstraintData &constraintData) { - return constraintData.isStrengthGlobal(); + bool global(PhysicsConstraintData &constraintData) override { + return constraintData.getStrengthGlobal(); } }; @@ -123,16 +123,16 @@ namespace spine { explicit PhysicsConstraintDampingTimeline(size_t frameCount, size_t bezierCount, int physicsConstraintIndex): PhysicsConstraintTimeline(frameCount, bezierCount, physicsConstraintIndex, Property_PhysicsConstraintDamping) {}; protected: - float get(PhysicsConstraintPose &pose) { + float get(PhysicsConstraintPose &pose) override { return pose.getDamping(); } - void set(PhysicsConstraintPose &pose, float value) { + void set(PhysicsConstraintPose &pose, float value) override { pose.setDamping(value); } - bool global(PhysicsConstraintData &constraintData) { - return constraintData.isDampingGlobal(); + bool global(PhysicsConstraintData &constraintData) override { + return constraintData.getDampingGlobal(); } }; @@ -147,16 +147,16 @@ namespace spine { explicit PhysicsConstraintMassTimeline(size_t frameCount, size_t bezierCount, int physicsConstraintIndex): PhysicsConstraintTimeline(frameCount, bezierCount, physicsConstraintIndex, Property_PhysicsConstraintMass) {}; protected: - float get(PhysicsConstraintPose &pose) { + float get(PhysicsConstraintPose &pose) override { return 1 / pose.getMassInverse(); } - void set(PhysicsConstraintPose &pose, float value) { + void set(PhysicsConstraintPose &pose, float value) override { pose.setMassInverse(1 / value); } - bool global(PhysicsConstraintData &constraintData) { - return constraintData.isMassGlobal(); + bool global(PhysicsConstraintData &constraintData) override { + return constraintData.getMassGlobal(); } }; @@ -171,16 +171,16 @@ namespace spine { explicit PhysicsConstraintWindTimeline(size_t frameCount, size_t bezierCount, int physicsConstraintIndex): PhysicsConstraintTimeline(frameCount, bezierCount, physicsConstraintIndex, Property_PhysicsConstraintWind) {}; protected: - float get(PhysicsConstraintPose &pose) { + float get(PhysicsConstraintPose &pose) override { return pose.getWind(); } - void set(PhysicsConstraintPose &pose, float value) { + void set(PhysicsConstraintPose &pose, float value) override { pose.setWind(value); } - bool global(PhysicsConstraintData &constraintData) { - return constraintData.isWindGlobal(); + bool global(PhysicsConstraintData &constraintData) override { + return constraintData.getWindGlobal(); } }; @@ -195,16 +195,16 @@ namespace spine { explicit PhysicsConstraintGravityTimeline(size_t frameCount, size_t bezierCount, int physicsConstraintIndex): PhysicsConstraintTimeline(frameCount, bezierCount, physicsConstraintIndex, Property_PhysicsConstraintGravity) {}; protected: - float get(PhysicsConstraintPose &pose) { + float get(PhysicsConstraintPose &pose) override { return pose.getGravity(); } - void set(PhysicsConstraintPose &pose, float value) { + void set(PhysicsConstraintPose &pose, float value) override { pose.setGravity(value); } - bool global(PhysicsConstraintData &constraintData) { - return constraintData.isGravityGlobal(); + bool global(PhysicsConstraintData &constraintData) override { + return constraintData.getGravityGlobal(); } }; @@ -219,16 +219,16 @@ namespace spine { explicit PhysicsConstraintMixTimeline(size_t frameCount, size_t bezierCount, int physicsConstraintIndex): PhysicsConstraintTimeline(frameCount, bezierCount, physicsConstraintIndex, Property_PhysicsConstraintMix) {}; protected: - float get(PhysicsConstraintPose &pose) { + float get(PhysicsConstraintPose &pose) override { return pose.getMix(); } - void set(PhysicsConstraintPose &pose, float value) { + void set(PhysicsConstraintPose &pose, float value) override { pose.setMix(value); } - bool global(PhysicsConstraintData &constraintData) { - return constraintData.isMixGlobal(); + bool global(PhysicsConstraintData &constraintData) override { + return constraintData.getMixGlobal(); } }; @@ -247,7 +247,7 @@ namespace spine { virtual void apply(Skeleton &skeleton, float lastTime, float time, Vector *pEvents, float alpha, MixBlend blend, - MixDirection direction, bool appliedPose); + MixDirection direction, bool appliedPose) override; /// The index of the physics constraint that will be reset when this timeline is applied, or -1 if all physics constraints in the skeleton will be reset. int getConstraintIndex() { return _constraintIndex; } diff --git a/spine-cpp/spine-cpp/include/spine/Posed.h b/spine-cpp/spine-cpp/include/spine/Posed.h index 5a480b563..7cd986b37 100644 --- a/spine-cpp/spine-cpp/include/spine/Posed.h +++ b/spine-cpp/spine-cpp/include/spine/Posed.h @@ -39,7 +39,7 @@ namespace spine { Posed() {} virtual ~Posed() {} - virtual void resetApplied() = 0; + virtual void resetConstrained() = 0; virtual void pose() = 0; @@ -103,7 +103,7 @@ namespace spine { return *_applied; } - virtual void resetApplied() { + virtual void resetConstrained() { _constrained.set(_pose); } diff --git a/spine-cpp/spine-cpp/include/spine/PosedData.h b/spine-cpp/spine-cpp/include/spine/PosedData.h index 2a2c405a8..172f8bdb4 100644 --- a/spine-cpp/spine-cpp/include/spine/PosedData.h +++ b/spine-cpp/spine-cpp/include/spine/PosedData.h @@ -62,7 +62,7 @@ namespace spine { friend class TranslateYTimeline; friend class InheritTimeline; - private: + protected: spine::String _name; P _setup; bool _skinRequired; @@ -78,7 +78,7 @@ namespace spine { /// When true, Skeleton::updateWorldTransform(Physics) only updates this constraint if the Skeleton::getSkin() /// contains this constraint. - /// + /// /// See Skin::getConstraints(). bool getSkinRequired(); void setSkinRequired(bool skinRequired); diff --git a/spine-cpp/spine-cpp/include/spine/Skeleton.h b/spine-cpp/spine-cpp/include/spine/Skeleton.h index c20571782..a23aca6f1 100644 --- a/spine-cpp/spine-cpp/include/spine/Skeleton.h +++ b/spine-cpp/spine-cpp/include/spine/Skeleton.h @@ -37,6 +37,8 @@ #include #include #include +#include +#include namespace spine { class SkeletonData; diff --git a/spine-cpp/spine-cpp/include/spine/spine.h b/spine-cpp/spine-cpp/include/spine/spine.h index 8ffa8c6dd..fa95cdf97 100644 --- a/spine-cpp/spine-cpp/include/spine/spine.h +++ b/spine-cpp/spine-cpp/include/spine/spine.h @@ -121,13 +121,6 @@ #include #include #include -#include -#include -#include -#include -#include -#include -#include #include #include #include diff --git a/spine-cpp/spine-cpp/src/spine/BoneTimeline.cpp b/spine-cpp/spine-cpp/src/spine/BoneTimeline.cpp index a568a2ee1..bea09ea6f 100644 --- a/spine-cpp/spine-cpp/src/spine/BoneTimeline.cpp +++ b/spine-cpp/spine-cpp/src/spine/BoneTimeline.cpp @@ -42,8 +42,7 @@ RTTI_IMPL_NOPARENT(BoneTimeline) RTTI_IMPL(BoneTimeline1, CurveTimeline1) -BoneTimeline1::BoneTimeline1(size_t frameCount, size_t bezierCount, int boneIndex, Property property) : BoneTimeline(boneIndex), - CurveTimeline1(frameCount, bezierCount) { +BoneTimeline1::BoneTimeline1(size_t frameCount, size_t bezierCount, int boneIndex, Property property) : CurveTimeline1(frameCount, bezierCount), BoneTimeline(boneIndex) { PropertyId ids[] = {((PropertyId) property << 32) | boneIndex}; setPropertyIds(ids, 1); } @@ -61,8 +60,7 @@ void BoneTimeline1::apply(Skeleton &skeleton, float lastTime, float time, Vector RTTI_IMPL(BoneTimeline2, CurveTimeline2) -BoneTimeline2::BoneTimeline2(size_t frameCount, size_t bezierCount, int boneIndex, Property property1, Property property2) : BoneTimeline(boneIndex), - CurveTimeline2(frameCount, bezierCount) { +BoneTimeline2::BoneTimeline2(size_t frameCount, size_t bezierCount, int boneIndex, Property property1, Property property2) : CurveTimeline2(frameCount, bezierCount), BoneTimeline(boneIndex) { PropertyId ids[] = {((PropertyId) property1 << 32) | boneIndex, ((PropertyId) property2 << 32) | boneIndex}; setPropertyIds(ids, 2); } diff --git a/spine-cpp/spine-cpp/src/spine/IkConstraintTimeline.cpp b/spine-cpp/spine-cpp/src/spine/IkConstraintTimeline.cpp index 8e757f7fc..fe87149c9 100644 --- a/spine-cpp/spine-cpp/src/spine/IkConstraintTimeline.cpp +++ b/spine-cpp/spine-cpp/src/spine/IkConstraintTimeline.cpp @@ -54,7 +54,7 @@ void IkConstraintTimeline::apply(Skeleton &skeleton, float lastTime, float time, SP_UNUSED(lastTime); SP_UNUSED(pEvents); - IkConstraint *constraintP = skeleton._ikConstraints[_constraintIndex]; + IkConstraint *constraintP = (IkConstraint *)skeleton._constraints[_constraintIndex]; IkConstraint &constraint = *constraintP; if (!constraint.isActive()) return; diff --git a/spine-cpp/spine-cpp/src/spine/Log.cpp b/spine-cpp/spine-cpp/src/spine/Log.cpp index 063141e83..4c3274657 100644 --- a/spine-cpp/spine-cpp/src/spine/Log.cpp +++ b/spine-cpp/spine-cpp/src/spine/Log.cpp @@ -83,9 +83,10 @@ void spine::spDebug_printBoneDatas(Vector &boneDatas) { } void spine::spDebug_printBoneData(BoneData *boneData) { - printf("Bone data %s: %f, %f, %f, %f, %f, %f %f\n", boneData->getName().buffer(), boneData->getRotation(), - boneData->getScaleX(), boneData->getScaleY(), boneData->getX(), boneData->getY(), boneData->getShearX(), - boneData->getShearY()); + BoneLocal &setupPose = boneData->getSetupPose(); + printf("Bone data %s: %f, %f, %f, %f, %f, %f %f\n", boneData->getName().buffer(), setupPose.getRotation(), + setupPose.getScaleX(), setupPose.getScaleY(), setupPose.getX(), setupPose.getY(), setupPose.getShearX(), + setupPose.getShearY()); } void spine::spDebug_printSkeleton(Skeleton *skeleton) { @@ -100,8 +101,9 @@ void spine::spDebug_printBones(Vector &bones) { } void spine::spDebug_printBone(Bone *bone) { - printf("Bone %s: %f, %f, %f, %f, %f, %f\n", bone->getData().getName().buffer(), bone->getA(), bone->getB(), - bone->getC(), bone->getD(), bone->getWorldX(), bone->getWorldY()); + BonePose &pose = bone->getAppliedPose(); + printf("Bone %s: %f, %f, %f, %f, %f, %f, %f\n", bone->getData().getName().buffer(), pose.getRotation(), pose.getScaleX(), + pose.getScaleY(), pose.getX(), pose.getY(), pose.getShearX(), pose.getShearY()); } void spine::spDebug_printFloats(float *values, int numFloats) { diff --git a/spine-cpp/spine-cpp/src/spine/MeshAttachment.cpp b/spine-cpp/spine-cpp/src/spine/MeshAttachment.cpp index 304cfce83..41804cf9c 100644 --- a/spine-cpp/spine-cpp/src/spine/MeshAttachment.cpp +++ b/spine-cpp/spine-cpp/src/spine/MeshAttachment.cpp @@ -28,6 +28,7 @@ *****************************************************************************/ #include +#include using namespace spine; @@ -236,6 +237,6 @@ MeshAttachment *MeshAttachment::newLinkedMesh() { void MeshAttachment::computeWorldVertices(Skeleton &skeleton, Slot &slot, size_t start, size_t count, float *worldVertices, size_t offset, size_t stride) { - if (_sequence) _sequence->apply(slot.getAppliedPose(), this); + if (_sequence) _sequence->apply(&slot.getAppliedPose(), this); VertexAttachment::computeWorldVertices(skeleton, slot, start, count, worldVertices, offset, stride); } diff --git a/spine-cpp/spine-cpp/src/spine/PathConstraintMixTimeline.cpp b/spine-cpp/spine-cpp/src/spine/PathConstraintMixTimeline.cpp index 9d4969c6f..c88a108c1 100644 --- a/spine-cpp/spine-cpp/src/spine/PathConstraintMixTimeline.cpp +++ b/spine-cpp/spine-cpp/src/spine/PathConstraintMixTimeline.cpp @@ -56,7 +56,7 @@ void PathConstraintMixTimeline::apply(Skeleton &skeleton, float lastTime, float SP_UNUSED(pEvents); SP_UNUSED(direction); - PathConstraint *constraintP = skeleton._pathConstraints[_constraintIndex]; + PathConstraint *constraintP = skeleton._cons[_constraintIndex]; PathConstraint &constraint = *constraintP; if (!constraint.isActive()) return; diff --git a/spine-cpp/spine-cpp/src/spine/PhysicsConstraintTimeline.cpp b/spine-cpp/spine-cpp/src/spine/PhysicsConstraintTimeline.cpp index 6197c7efd..c9af42eeb 100644 --- a/spine-cpp/spine-cpp/src/spine/PhysicsConstraintTimeline.cpp +++ b/spine-cpp/spine-cpp/src/spine/PhysicsConstraintTimeline.cpp @@ -67,7 +67,7 @@ void PhysicsConstraintTimeline::apply(Skeleton &skeleton, float, float time, Vec for (size_t i = 0; i < physicsConstraints.size(); i++) { PhysicsConstraint *constraint = physicsConstraints[i]; if (constraint->_active && global(constraint->_data)) { - PhysicsConstraintPose &pose = appliedPose ? constraint->_applied : constraint->_pose; + PhysicsConstraintPose &pose = appliedPose ? *constraint->_applied : constraint->_pose; PhysicsConstraintPose &setupPose = constraint->_data._setup; set(pose, getAbsoluteValue(time, alpha, blend, get(pose), get(setupPose), value)); }