mirror of
https://github.com/EsotericSoftware/spine-runtimes.git
synced 2025-12-21 17:56:04 +08:00
Added SkeletonAttachment.
Spine doesn't export this attachment type, but it can be used at runtime.
This commit is contained in:
parent
dca388bb98
commit
f087d56da6
@ -35,6 +35,7 @@ package com.esotericsoftware.spine;
|
||||
|
||||
import com.esotericsoftware.spine.attachments.Attachment;
|
||||
import com.esotericsoftware.spine.attachments.RegionAttachment;
|
||||
import com.esotericsoftware.spine.attachments.SkeletonAttachment;
|
||||
|
||||
import com.badlogic.gdx.graphics.GL11;
|
||||
import com.badlogic.gdx.graphics.Texture;
|
||||
@ -67,18 +68,39 @@ public class SkeletonRenderer {
|
||||
vertices = region.getWorldVertices();
|
||||
triangles = quadTriangle;
|
||||
texture = region.getRegion().getTexture();
|
||||
} else
|
||||
continue;
|
||||
|
||||
if (slot.data.getAdditiveBlending() != additive) {
|
||||
additive = !additive;
|
||||
if (additive)
|
||||
batch.setBlendFunction(srcFunc, GL11.GL_ONE);
|
||||
else
|
||||
batch.setBlendFunction(srcFunc, GL11.GL_ONE_MINUS_SRC_ALPHA);
|
||||
if (slot.data.getAdditiveBlending() != additive) {
|
||||
additive = !additive;
|
||||
if (additive)
|
||||
batch.setBlendFunction(srcFunc, GL11.GL_ONE);
|
||||
else
|
||||
batch.setBlendFunction(srcFunc, GL11.GL_ONE_MINUS_SRC_ALPHA);
|
||||
}
|
||||
|
||||
batch.draw(texture, vertices, 0, vertices.length, triangles, 0, triangles.length);
|
||||
} else if (attachment instanceof SkeletonAttachment) {
|
||||
Skeleton attachmentSkeleton = ((SkeletonAttachment)attachment).getSkeleton();
|
||||
if (attachmentSkeleton == null) continue;
|
||||
Bone bone = slot.getBone();
|
||||
Bone rootBone = attachmentSkeleton.getRootBone();
|
||||
float oldScaleX = rootBone.getScaleX();
|
||||
float oldScaleY = rootBone.getScaleY();
|
||||
float oldRotation = rootBone.getRotation();
|
||||
attachmentSkeleton.setX(bone.getWorldX());
|
||||
attachmentSkeleton.setY(bone.getWorldY());
|
||||
rootBone.setScaleX(1 + bone.getWorldScaleX() - oldScaleX);
|
||||
rootBone.setScaleY(1 + bone.getWorldScaleY() - oldScaleY);
|
||||
rootBone.setRotation(oldRotation + bone.getWorldRotation());
|
||||
attachmentSkeleton.updateWorldTransform();
|
||||
|
||||
draw(batch, attachmentSkeleton);
|
||||
|
||||
attachmentSkeleton.setX(0);
|
||||
attachmentSkeleton.setY(0);
|
||||
rootBone.setScaleX(oldScaleX);
|
||||
rootBone.setScaleY(oldScaleY);
|
||||
rootBone.setRotation(oldRotation);
|
||||
}
|
||||
|
||||
batch.draw(texture, vertices, 0, vertices.length, triangles, 0, triangles.length);
|
||||
}
|
||||
}
|
||||
|
||||
@ -105,6 +127,28 @@ public class SkeletonRenderer {
|
||||
batch.setBlendFunction(srcFunc, GL11.GL_ONE_MINUS_SRC_ALPHA);
|
||||
}
|
||||
batch.draw(regionAttachment.getRegion().getTexture(), vertices, 0, 20);
|
||||
} else if (attachment instanceof SkeletonAttachment) {
|
||||
Skeleton attachmentSkeleton = ((SkeletonAttachment)attachment).getSkeleton();
|
||||
if (attachmentSkeleton == null) continue;
|
||||
Bone bone = slot.getBone();
|
||||
Bone rootBone = attachmentSkeleton.getRootBone();
|
||||
float oldScaleX = rootBone.getScaleX();
|
||||
float oldScaleY = rootBone.getScaleY();
|
||||
float oldRotation = rootBone.getRotation();
|
||||
attachmentSkeleton.setX(bone.getWorldX());
|
||||
attachmentSkeleton.setY(bone.getWorldY());
|
||||
rootBone.setScaleX(1 + bone.getWorldScaleX() - oldScaleX);
|
||||
rootBone.setScaleY(1 + bone.getWorldScaleY() - oldScaleY);
|
||||
rootBone.setRotation(oldRotation + bone.getWorldRotation());
|
||||
attachmentSkeleton.updateWorldTransform();
|
||||
|
||||
draw(batch, attachmentSkeleton);
|
||||
|
||||
attachmentSkeleton.setX(0);
|
||||
attachmentSkeleton.setY(0);
|
||||
rootBone.setScaleX(oldScaleX);
|
||||
rootBone.setScaleY(oldScaleY);
|
||||
rootBone.setRotation(oldRotation);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -0,0 +1,55 @@
|
||||
/******************************************************************************
|
||||
* Spine Runtime Software License - Version 1.1
|
||||
*
|
||||
* Copyright (c) 2013, Esoteric Software
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms in whole or in part, with
|
||||
* or without modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* 1. A Spine Essential, Professional, Enterprise, or Education License must
|
||||
* be purchased from Esoteric Software and the license must remain valid:
|
||||
* http://esotericsoftware.com/
|
||||
* 2. Redistributions of source code must retain this license, which is the
|
||||
* above copyright notice, this declaration of conditions and the following
|
||||
* disclaimer.
|
||||
* 3. Redistributions in binary form must reproduce this license, which is the
|
||||
* above copyright notice, this declaration of conditions and the following
|
||||
* disclaimer, in the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*****************************************************************************/
|
||||
|
||||
package com.esotericsoftware.spine.attachments;
|
||||
|
||||
import com.esotericsoftware.spine.Skeleton;
|
||||
|
||||
/** Attachment that displays a texture region. */
|
||||
public class SkeletonAttachment extends Attachment {
|
||||
private Skeleton skeleton;
|
||||
|
||||
public SkeletonAttachment (String name) {
|
||||
super(name);
|
||||
}
|
||||
|
||||
/** @return May return null. */
|
||||
public Skeleton getSkeleton () {
|
||||
return skeleton;
|
||||
}
|
||||
|
||||
/** @param skeleton May be null. */
|
||||
public void setSkeleton (Skeleton skeleton) {
|
||||
this.skeleton = skeleton;
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user