[cpp] 4.3 porting WIP

This commit is contained in:
Mario Zechner 2025-06-11 17:54:44 +02:00
parent 3240d50748
commit c9193f682a
2 changed files with 24 additions and 8 deletions

View File

@ -33,6 +33,7 @@
#include <spine/Timeline.h>
namespace spine {
/// Changes a skeleton's Skeleton::getDrawOrder().
class SP_API DrawOrderTimeline : public Timeline {
friend class SkeletonBinary;
@ -45,14 +46,19 @@ namespace spine {
virtual void
apply(Skeleton &skeleton, float lastTime, float time, Vector<Event *> *pEvents, float alpha, MixBlend blend,
MixDirection direction);
MixDirection direction, bool appliedPose);
/// Sets the time and value of the specified keyframe.
/// @param drawOrder May be NULL to use bind pose draw order
void setFrame(size_t frame, float time, Vector<int> &drawOrder);
size_t getFrameCount();
/// The draw order for each frame. See setFrame().
Vector <Vector<int>> &getDrawOrders();
/// Sets the time and draw order for the specified frame.
/// @param frame Between 0 and frameCount, inclusive.
/// @param time The frame time in seconds.
/// @param drawOrder For each slot in Skeleton::slots, the index of the slot in the new draw order. May be null to use setup pose draw order.
void setFrame(size_t frame, float time, Vector<int> *drawOrder);
private:
Vector <Vector<int>> _drawOrders;
};

View File

@ -53,7 +53,8 @@ DrawOrderTimeline::DrawOrderTimeline(size_t frameCount) : Timeline(frameCount, 1
}
void DrawOrderTimeline::apply(Skeleton &skeleton, float lastTime, float time, Vector<Event *> *pEvents, float alpha,
MixBlend blend, MixDirection direction) {
MixBlend blend, MixDirection direction, bool appliedPose) {
SP_UNUSED(appliedPose);
SP_UNUSED(lastTime);
SP_UNUSED(pEvents);
SP_UNUSED(alpha);
@ -83,18 +84,27 @@ void DrawOrderTimeline::apply(Skeleton &skeleton, float lastTime, float time, Ve
Vector<int> &drawOrderToSetupIndex = _drawOrders[Animation::search(_frames, time)];
if (drawOrderToSetupIndex.size() == 0) {
drawOrder.clear();
drawOrder.ensureCapacity(slots.size());
for (size_t i = 0, n = slots.size(); i < n; ++i)
drawOrder.add(slots[i]);
} else {
drawOrder.clear();
drawOrder.ensureCapacity(drawOrderToSetupIndex.size());
for (size_t i = 0, n = drawOrderToSetupIndex.size(); i < n; ++i)
drawOrder[i] = slots[drawOrderToSetupIndex[i]];
drawOrder.add(slots[drawOrderToSetupIndex[i]]);
}
}
void DrawOrderTimeline::setFrame(size_t frame, float time, Vector<int> &drawOrder) {
void DrawOrderTimeline::setFrame(size_t frame, float time, Vector<int> *drawOrder) {
_frames[frame] = time;
_drawOrders[frame].clear();
_drawOrders[frame].addAll(drawOrder);
if (drawOrder != NULL) {
_drawOrders[frame].addAll(*drawOrder);
}
}
size_t DrawOrderTimeline::getFrameCount() {
return _frames.size();
}
Vector<Vector<int>> &DrawOrderTimeline::getDrawOrders() {