mirror of
https://github.com/EsotericSoftware/spine-runtimes.git
synced 2026-03-26 22:49:01 +08:00
[as3] Ported fix for DeformTimeline, see #932
This commit is contained in:
parent
59dc784cb2
commit
2567339fa6
Binary file not shown.
@ -36,6 +36,7 @@ package spine.animation {
|
|||||||
import spine.Slot;
|
import spine.Slot;
|
||||||
|
|
||||||
public class DeformTimeline extends CurveTimeline {
|
public class DeformTimeline extends CurveTimeline {
|
||||||
|
private static var zeros : Vector.<Number> = new Vector.<Number>(64);
|
||||||
public var slotIndex : int;
|
public var slotIndex : int;
|
||||||
public var frames : Vector.<Number>;
|
public var frames : Vector.<Number>;
|
||||||
public var frameVertices : Vector.<Vector.<Number>>;
|
public var frameVertices : Vector.<Vector.<Number>>;
|
||||||
@ -58,6 +59,8 @@ package spine.animation {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override public function apply(skeleton : Skeleton, lastTime : Number, time : Number, firedEvents : Vector.<Event>, alpha : Number, pose : MixPose, direction : MixDirection) : void {
|
override public function apply(skeleton : Skeleton, lastTime : Number, time : Number, firedEvents : Vector.<Event>, alpha : Number, pose : MixPose, direction : MixDirection) : void {
|
||||||
|
var vertexAttachment : VertexAttachment;
|
||||||
|
var setupVertices : Vector.<Number>;
|
||||||
var slot : Slot = skeleton.slots[slotIndex];
|
var slot : Slot = skeleton.slots[slotIndex];
|
||||||
var slotAttachment : Attachment = slot.attachment;
|
var slotAttachment : Attachment = slot.attachment;
|
||||||
if (!(slotAttachment is VertexAttachment) || !(VertexAttachment(slotAttachment)).applyDeform(attachment)) return;
|
if (!(slotAttachment is VertexAttachment) || !(VertexAttachment(slotAttachment)).applyDeform(attachment)) return;
|
||||||
@ -65,28 +68,45 @@ package spine.animation {
|
|||||||
var verticesArray : Vector.<Number> = slot.attachmentVertices;
|
var verticesArray : Vector.<Number> = slot.attachmentVertices;
|
||||||
var frameVertices : Vector.<Vector.<Number>> = this.frameVertices;
|
var frameVertices : Vector.<Vector.<Number>> = this.frameVertices;
|
||||||
var vertexCount : int = frameVertices[0].length;
|
var vertexCount : int = frameVertices[0].length;
|
||||||
if (verticesArray.length != vertexCount && pose != MixPose.setup) alpha = 1; // Don't mix from uninitialized slot vertices.
|
|
||||||
verticesArray.length = vertexCount;
|
verticesArray.length = vertexCount;
|
||||||
var vertices : Vector.<Number> = verticesArray;
|
var vertices : Vector.<Number> = verticesArray;
|
||||||
|
|
||||||
var frames : Vector.<Number> = this.frames;
|
var frames : Vector.<Number> = this.frames;
|
||||||
var i : int;
|
var i : int;
|
||||||
if (time < frames[0]) {
|
if (time < frames[0]) {
|
||||||
|
vertexAttachment = VertexAttachment(slotAttachment);
|
||||||
switch (pose) {
|
switch (pose) {
|
||||||
case MixPose.setup:
|
case MixPose.setup:
|
||||||
verticesArray.length = 0;
|
var zeroVertices : Vector.<Number>;
|
||||||
|
if (vertexAttachment.bones == null) {
|
||||||
|
// Unweighted vertex positions (setup pose).
|
||||||
|
zeroVertices = vertexAttachment.vertices;
|
||||||
|
} else {
|
||||||
|
// Weighted deform offsets (zeros).
|
||||||
|
zeroVertices = zeros;
|
||||||
|
if (zeroVertices.length < vertexCount) zeros = zeroVertices = new Vector.<Number>(vertexCount);
|
||||||
|
}
|
||||||
|
for (i = 0; i < vertexCount; i++)
|
||||||
|
vertices[i] = zeroVertices[i];
|
||||||
return;
|
return;
|
||||||
case MixPose.current:
|
case MixPose.current:
|
||||||
alpha = 1 - alpha;
|
if (alpha == 1) break;
|
||||||
for (i = 0; i < vertexCount; i++)
|
if (vertexAttachment.bones == null) {
|
||||||
vertices[i] *= alpha;
|
// Unweighted vertex positions.
|
||||||
|
setupVertices = vertexAttachment.vertices;
|
||||||
|
for (i = 0; i < vertexCount; i++)
|
||||||
|
vertices[i] += (setupVertices[i] - vertices[i]) * alpha;
|
||||||
|
} else {
|
||||||
|
// Weighted deform offsets.
|
||||||
|
alpha = 1 - alpha;
|
||||||
|
for (i = 0; i < vertexCount; i++)
|
||||||
|
vertices[i] *= alpha;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var n : int;
|
var n : int;
|
||||||
var vertexAttachment : VertexAttachment;
|
|
||||||
var setupVertices : Vector.<Number>;
|
|
||||||
var setup : Number, prev : Number;
|
var setup : Number, prev : Number;
|
||||||
if (time >= frames[frames.length - 1]) { // Time is after last frame.
|
if (time >= frames[frames.length - 1]) { // Time is after last frame.
|
||||||
var lastVertices : Vector.<Number> = frameVertices[frames.length - 1];
|
var lastVertices : Vector.<Number> = frameVertices[frames.length - 1];
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user