mirror of
https://github.com/EsotericSoftware/spine-runtimes.git
synced 2026-03-26 22:49:01 +08:00
[ts] Port of commit 7facce3: Draw order folder timeline property ID per slot with "all" special case.
This commit is contained in:
parent
e1ea92aad7
commit
161780fcac
@ -1789,7 +1789,8 @@ export class EventTimeline extends Timeline {
|
||||
|
||||
/** Changes a skeleton's {@link Skeleton#drawOrder}. */
|
||||
export class DrawOrderTimeline extends Timeline {
|
||||
static propertyIds = [`${Property.drawOrder}`];
|
||||
static readonly propertyID = `${Property.drawOrder}`;
|
||||
static propertyIds = [DrawOrderTimeline.propertyID];
|
||||
|
||||
/** The draw order for each key frame. See {@link #setFrame(int, float, int[])}. */
|
||||
private readonly drawOrders: Array<Array<number> | null>;
|
||||
@ -1846,7 +1847,7 @@ export class DrawOrderFolderTimeline extends Timeline {
|
||||
/** @param slots {@link Skeleton#slots} indices controlled by this timeline, in setup order.
|
||||
* @param slotCount The maximum number of slots in the skeleton. */
|
||||
constructor (frameCount: number, slots: number[], slotCount: number) {
|
||||
super(frameCount, ...DrawOrderTimeline.propertyIds);
|
||||
super(frameCount, ...DrawOrderFolderTimeline.propertyIds(slots));
|
||||
this.slots = slots;
|
||||
this.drawOrders = new Array(frameCount);
|
||||
this.inFolder = new Array(slotCount);
|
||||
@ -1854,6 +1855,14 @@ export class DrawOrderFolderTimeline extends Timeline {
|
||||
this.inFolder[i] = true;
|
||||
}
|
||||
|
||||
private static propertyIds (slots: number[]): string[] {
|
||||
const n = slots.length;
|
||||
const ids = new Array(n);
|
||||
for (let i = 0; i < n; i++)
|
||||
ids[i] = `d${slots[i]}`;
|
||||
return ids;
|
||||
}
|
||||
|
||||
getFrameCount (): number {
|
||||
return this.frames.length;
|
||||
}
|
||||
|
||||
@ -777,8 +777,12 @@ export class AnimationState {
|
||||
const propertyIDs = this.propertyIDs;
|
||||
|
||||
if (to?.holdPrevious) {
|
||||
for (let i = 0; i < timelinesCount; i++)
|
||||
timelineMode[i] = propertyIDs.addAll(timelines[i].getPropertyIds()) ? HOLD_FIRST : HOLD_SUBSEQUENT;
|
||||
for (let i = 0; i < timelinesCount; i++) {
|
||||
let first = propertyIDs.addAll(timelines[i].getPropertyIds());
|
||||
if (first && timelines[i] instanceof DrawOrderFolderTimeline && propertyIDs.contains(DrawOrderTimeline.propertyID))
|
||||
first = false; // DrawOrderTimeline changed.
|
||||
timelineMode[i] = first ? HOLD_FIRST : HOLD_SUBSEQUENT;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
@ -788,6 +792,8 @@ export class AnimationState {
|
||||
const ids = timeline.getPropertyIds();
|
||||
if (!propertyIDs.addAll(ids))
|
||||
timelineMode[i] = SUBSEQUENT;
|
||||
else if (timeline instanceof DrawOrderFolderTimeline && propertyIDs.contains(DrawOrderTimeline.propertyID))
|
||||
timelineMode[i] = SUBSEQUENT; // DrawOrderTimeline changed.
|
||||
else if (!to || timeline instanceof AttachmentTimeline || timeline instanceof DrawOrderTimeline
|
||||
|| timeline instanceof DrawOrderFolderTimeline || timeline instanceof EventTimeline
|
||||
|| !to.animation!.hasTimeline(ids)) {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user