Search in sources :

Example 1 with Attachment

use of com.esotericsoftware.spine.attachments.Attachment in project HyperLap2D by rednblackgames.

the class SpineDrawable method computeBoundBox.

private void computeBoundBox() {
    skeleton.updateWorldTransform();
    Array<Slot> drawOrder = skeleton.getDrawOrder();
    minX = Float.MAX_VALUE;
    minY = Float.MAX_VALUE;
    float maxX = Integer.MIN_VALUE, maxY = Integer.MIN_VALUE;
    for (int i = 0, n = drawOrder.size; i < n; i++) {
        Slot slot = drawOrder.get(i);
        if (!slot.getBone().isActive())
            continue;
        int verticesLength = 0;
        float[] vertices = null;
        Attachment attachment = slot.getAttachment();
        if (attachment instanceof RegionAttachment) {
            verticesLength = 8;
            vertices = temp.setSize(8);
            ((RegionAttachment) attachment).computeWorldVertices(slot.getBone(), vertices, 0, 2);
        } else if (attachment instanceof MeshAttachment) {
            MeshAttachment mesh = (MeshAttachment) attachment;
            verticesLength = mesh.getWorldVerticesLength();
            vertices = temp.setSize(verticesLength);
            mesh.computeWorldVertices(slot, 0, verticesLength, vertices, 0, 2);
        }
        if (vertices != null) {
            for (int ii = 0; ii < verticesLength; ii += 2) {
                float x = vertices[ii], y = vertices[ii + 1];
                minX = Math.min(minX, x);
                minY = Math.min(minY, y);
                maxX = Math.max(maxX, x);
                maxY = Math.max(maxY, y);
            }
        }
    }
    width = (maxX - minX);
    height = (maxY - minY);
}
Also used : MeshAttachment(com.esotericsoftware.spine.attachments.MeshAttachment) RegionAttachment(com.esotericsoftware.spine.attachments.RegionAttachment) Attachment(com.esotericsoftware.spine.attachments.Attachment) MeshAttachment(com.esotericsoftware.spine.attachments.MeshAttachment) RegionAttachment(com.esotericsoftware.spine.attachments.RegionAttachment)

Example 2 with Attachment

use of com.esotericsoftware.spine.attachments.Attachment in project talos by rockbite.

the class BVBSkeletonRenderer method draw.

/**
 * Renders the specified skeleton. If the batch is a PolygonSpriteBatch, {@link #draw(SpriteBatchParticleRenderer, PolygonSpriteBatch, SkeletonContainer, Skeleton)} is
 * called. If the batch is a TwoColorPolygonBatch, {@link #draw(SpriteBatchParticleRenderer, TwoColorPolygonBatch, SkeletonContainer, Skeleton)} is called. Otherwise the
 * skeleton is rendered without two color tinting and any mesh attachments will throw an exception.
 * <p>
 * This method may change the batch's {@link Batch#setBlendFunctionSeparate(int, int, int, int) blending function}. The
 * previous blend function is not restored, since that could result in unnecessary flushes, depending on what is rendered
 * next.
 */
public void draw(SpriteBatchParticleRenderer particleRenderer, Batch batch, SkeletonContainer skeletonContainer, Skeleton skeleton) {
    if (batch instanceof TwoColorPolygonBatch) {
        draw(particleRenderer, (TwoColorPolygonBatch) batch, skeletonContainer, skeleton);
        return;
    }
    if (batch instanceof PolygonSpriteBatch) {
        draw(particleRenderer, (PolygonSpriteBatch) batch, skeletonContainer, skeleton);
        return;
    }
    if (batch == null)
        throw new IllegalArgumentException("batch cannot be null.");
    if (skeletonContainer == null)
        throw new IllegalArgumentException("skeleton cannot be null.");
    com.esotericsoftware.spine.SkeletonRenderer.VertexEffect vertexEffect = this.vertexEffect;
    if (vertexEffect != null)
        vertexEffect.begin(skeleton);
    boolean pmaColors = this.pmaColors, pmaBlendModes = this.pmaBlendModes;
    BlendMode blendMode = null;
    float[] vertices = this.vertices.items;
    Color skeletonColor = skeleton.color;
    float r = skeletonColor.r, g = skeletonColor.g, b = skeletonColor.b, a = skeletonColor.a;
    Object[] drawOrder = skeleton.drawOrder.items;
    for (int i = 0, n = skeleton.drawOrder.size; i < n; i++) {
        Slot slot = (Slot) drawOrder[i];
        if (!slot.bone.active) {
            clipper.clipEnd(slot);
            continue;
        }
        Attachment attachment = slot.attachment;
        if (attachment instanceof RegionAttachment) {
            RegionAttachment region = (RegionAttachment) attachment;
            region.computeWorldVertices(slot.getBone(), vertices, 0, 5);
            Color color = region.getColor(), slotColor = slot.getColor();
            float alpha = a * slotColor.a * color.a * 255;
            float multiplier = pmaColors ? alpha : 255;
            BlendMode slotBlendMode = slot.data.getBlendMode();
            if (slotBlendMode != blendMode) {
                if (slotBlendMode == BlendMode.additive && pmaColors) {
                    slotBlendMode = BlendMode.normal;
                    alpha = 0;
                }
                blendMode = slotBlendMode;
                blendMode.apply(batch, pmaBlendModes);
            }
            float c = NumberUtils.intToFloatColor(// 
            (int) alpha << 24 | // 
            (int) (b * slotColor.b * color.b * multiplier) << 16 | // 
            (int) (g * slotColor.g * color.g * multiplier) << 8 | (int) (r * slotColor.r * color.r * multiplier));
            float[] uvs = region.getUVs();
            for (int u = 0, v = 2; u < 8; u += 2, v += 5) {
                vertices[v] = c;
                vertices[v + 1] = uvs[u];
                vertices[v + 2] = uvs[u + 1];
            }
            if (vertexEffect != null)
                applyVertexEffect(vertices, 20, 5, c, 0);
            batch.draw(region.getRegion().getTexture(), vertices, 0, 20);
        } else if (attachment instanceof ClippingAttachment) {
            clipper.clipStart(slot, (ClippingAttachment) attachment);
            continue;
        } else if (attachment instanceof MeshAttachment) {
            throw new RuntimeException(batch.getClass().getSimpleName() + " cannot render meshes, PolygonSpriteBatch or TwoColorPolygonBatch is required.");
        } else if (attachment instanceof SkeletonAttachment) {
            Skeleton attachmentSkeleton = ((SkeletonAttachment) attachment).getSkeleton();
            if (attachmentSkeleton != null) {
                // This is messed up
                draw(particleRenderer, batch, skeletonContainer, attachmentSkeleton);
            }
        }
        clipper.clipEnd(slot);
    }
    clipper.clipEnd();
    if (vertexEffect != null)
        vertexEffect.end();
}
Also used : BlendMode(com.esotericsoftware.spine.BlendMode) Color(com.badlogic.gdx.graphics.Color) Attachment(com.esotericsoftware.spine.attachments.Attachment) RegionAttachment(com.esotericsoftware.spine.attachments.RegionAttachment) MeshAttachment(com.esotericsoftware.spine.attachments.MeshAttachment) ClippingAttachment(com.esotericsoftware.spine.attachments.ClippingAttachment) SkeletonAttachment(com.esotericsoftware.spine.attachments.SkeletonAttachment) PolygonSpriteBatch(com.badlogic.gdx.graphics.g2d.PolygonSpriteBatch) SkeletonAttachment(com.esotericsoftware.spine.attachments.SkeletonAttachment) RegionAttachment(com.esotericsoftware.spine.attachments.RegionAttachment) MeshAttachment(com.esotericsoftware.spine.attachments.MeshAttachment) ClippingAttachment(com.esotericsoftware.spine.attachments.ClippingAttachment) Slot(com.esotericsoftware.spine.Slot) Skeleton(com.esotericsoftware.spine.Skeleton) TwoColorPolygonBatch(com.esotericsoftware.spine.utils.TwoColorPolygonBatch)

Example 3 with Attachment

use of com.esotericsoftware.spine.attachments.Attachment in project talos by rockbite.

the class BVBSkeletonRenderer method draw.

/**
 * Renders the specified skeleton, including meshes, but without two color tinting.
 * <p>
 * This method may change the batch's {@link Batch#setBlendFunctionSeparate(int, int, int, int) blending function}. The
 * previous blend function is not restored, since that could result in unnecessary flushes, depending on what is rendered
 * next.
 */
public void draw(SpriteBatchParticleRenderer particleRenderer, PolygonSpriteBatch batch, SkeletonContainer skeletonContainer, Skeleton skeleton) {
    if (batch == null)
        throw new IllegalArgumentException("batch cannot be null.");
    if (skeleton == null)
        throw new IllegalArgumentException("skeleton cannot be null.");
    Vector2 tempPosition = this.temp, tempUV = this.temp2;
    Color tempLight1 = this.temp3, tempDark1 = this.temp4;
    Color tempLight2 = this.temp5, tempDark2 = this.temp6;
    com.esotericsoftware.spine.SkeletonRenderer.VertexEffect vertexEffect = this.vertexEffect;
    if (vertexEffect != null)
        vertexEffect.begin(skeleton);
    boolean pmaColors = this.pmaColors, pmaBlendModes = this.pmaBlendModes;
    BlendMode blendMode = null;
    int verticesLength = 0;
    float[] vertices = null, uvs = null;
    short[] triangles = null;
    Color color = null, skeletonColor = skeleton.color;
    float r = skeletonColor.r, g = skeletonColor.g, b = skeletonColor.b, a = skeletonColor.a;
    Object[] drawOrder = skeleton.drawOrder.items;
    for (int i = 0, n = skeleton.drawOrder.size; i < n; i++) {
        Slot slot = (Slot) drawOrder[i];
        if (!slot.bone.active) {
            clipper.clipEnd(slot);
            continue;
        }
        BoundEffect boundEffect = skeletonContainer.findEffect(skeleton, slot);
        if (boundEffect != null && boundEffect.isNested() && boundEffect.isBehind()) {
            for (ParticleEffectInstance particleEffectInstance : boundEffect.getParticleEffects()) {
                particleRenderer.render(particleEffectInstance);
            }
        }
        Texture texture = null;
        int vertexSize = clipper.isClipping() ? 2 : 5;
        Attachment attachment = slot.attachment;
        if (attachment instanceof RegionAttachment) {
            RegionAttachment region = (RegionAttachment) attachment;
            verticesLength = vertexSize << 2;
            vertices = this.vertices.items;
            region.computeWorldVertices(slot.getBone(), vertices, 0, vertexSize);
            triangles = quadTriangles;
            texture = region.getRegion().getTexture();
            uvs = region.getUVs();
            color = region.getColor();
        } else if (attachment instanceof MeshAttachment) {
            MeshAttachment mesh = (MeshAttachment) attachment;
            int count = mesh.getWorldVerticesLength();
            verticesLength = (count >> 1) * vertexSize;
            vertices = this.vertices.setSize(verticesLength);
            mesh.computeWorldVertices(slot, 0, count, vertices, 0, vertexSize);
            triangles = mesh.getTriangles();
            texture = mesh.getRegion().getTexture();
            uvs = mesh.getUVs();
            color = mesh.getColor();
        } else if (attachment instanceof ClippingAttachment) {
            ClippingAttachment clip = (ClippingAttachment) attachment;
            clipper.clipStart(slot, clip);
            continue;
        } else if (attachment instanceof SkeletonAttachment) {
            Skeleton attachmentSkeleton = ((SkeletonAttachment) attachment).getSkeleton();
            if (attachmentSkeleton != null)
                draw(particleRenderer, batch, skeletonContainer, attachmentSkeleton);
        }
        if (texture != null) {
            Color slotColor = slot.getColor();
            float alpha = a * slotColor.a * color.a * 255;
            float multiplier = pmaColors ? alpha : 255;
            BlendMode slotBlendMode = slot.data.getBlendMode();
            if (slotBlendMode != blendMode) {
                if (slotBlendMode == BlendMode.additive && pmaColors) {
                    slotBlendMode = BlendMode.normal;
                    alpha = 0;
                }
                blendMode = slotBlendMode;
                blendMode.apply(batch, pmaBlendModes);
            }
            float c = NumberUtils.intToFloatColor(// 
            (int) alpha << 24 | // 
            (int) (b * slotColor.b * color.b * multiplier) << 16 | // 
            (int) (g * slotColor.g * color.g * multiplier) << 8 | (int) (r * slotColor.r * color.r * multiplier));
            if (clipper.isClipping()) {
                clipper.clipTriangles(vertices, verticesLength, triangles, triangles.length, uvs, c, 0, false);
                FloatArray clippedVertices = clipper.getClippedVertices();
                ShortArray clippedTriangles = clipper.getClippedTriangles();
                if (vertexEffect != null)
                    applyVertexEffect(clippedVertices.items, clippedVertices.size, 5, c, 0);
                batch.draw(texture, clippedVertices.items, 0, clippedVertices.size, clippedTriangles.items, 0, clippedTriangles.size);
            } else {
                if (vertexEffect != null) {
                    tempLight1.set(NumberUtils.floatToIntColor(c));
                    tempDark1.set(0);
                    for (int v = 0, u = 0; v < verticesLength; v += 5, u += 2) {
                        tempPosition.x = vertices[v];
                        tempPosition.y = vertices[v + 1];
                        tempLight2.set(tempLight1);
                        tempDark2.set(tempDark1);
                        tempUV.x = uvs[u];
                        tempUV.y = uvs[u + 1];
                        vertexEffect.transform(tempPosition, tempUV, tempLight2, tempDark2);
                        vertices[v] = tempPosition.x;
                        vertices[v + 1] = tempPosition.y;
                        vertices[v + 2] = tempLight2.toFloatBits();
                        vertices[v + 3] = tempUV.x;
                        vertices[v + 4] = tempUV.y;
                    }
                } else {
                    for (int v = 2, u = 0; v < verticesLength; v += 5, u += 2) {
                        vertices[v] = c;
                        vertices[v + 1] = uvs[u];
                        vertices[v + 2] = uvs[u + 1];
                    }
                }
                batch.draw(texture, vertices, 0, verticesLength, triangles, 0, triangles.length);
            }
        }
        clipper.clipEnd(slot);
        if (boundEffect != null && boundEffect.isNested() && !boundEffect.isBehind()) {
            for (ParticleEffectInstance particleEffectInstance : boundEffect.getParticleEffects()) {
                particleRenderer.render(particleEffectInstance);
            }
        }
    }
    clipper.clipEnd();
    if (vertexEffect != null)
        vertexEffect.end();
}
Also used : Attachment(com.esotericsoftware.spine.attachments.Attachment) RegionAttachment(com.esotericsoftware.spine.attachments.RegionAttachment) MeshAttachment(com.esotericsoftware.spine.attachments.MeshAttachment) ClippingAttachment(com.esotericsoftware.spine.attachments.ClippingAttachment) SkeletonAttachment(com.esotericsoftware.spine.attachments.SkeletonAttachment) Texture(com.badlogic.gdx.graphics.Texture) RegionAttachment(com.esotericsoftware.spine.attachments.RegionAttachment) Skeleton(com.esotericsoftware.spine.Skeleton) ShortArray(com.badlogic.gdx.utils.ShortArray) BoundEffect(com.talosvfx.talos.editor.addons.bvb.BoundEffect) Color(com.badlogic.gdx.graphics.Color) BlendMode(com.esotericsoftware.spine.BlendMode) SkeletonAttachment(com.esotericsoftware.spine.attachments.SkeletonAttachment) ParticleEffectInstance(com.talosvfx.talos.runtime.ParticleEffectInstance) FloatArray(com.badlogic.gdx.utils.FloatArray) Vector2(com.badlogic.gdx.math.Vector2) MeshAttachment(com.esotericsoftware.spine.attachments.MeshAttachment) ClippingAttachment(com.esotericsoftware.spine.attachments.ClippingAttachment) Slot(com.esotericsoftware.spine.Slot)

Example 4 with Attachment

use of com.esotericsoftware.spine.attachments.Attachment in project talos by rockbite.

the class BVBSkeletonRenderer method draw.

/**
 * Renders the specified skeleton, including meshes and two color tinting.
 * <p>
 * This method may change the batch's {@link Batch#setBlendFunctionSeparate(int, int, int, int) blending function}. The
 * previous blend function is not restored, since that could result in unnecessary flushes, depending on what is rendered
 * next.
 */
public void draw(SpriteBatchParticleRenderer particleRenderer, TwoColorPolygonBatch batch, SkeletonContainer skeletonContainer, Skeleton skeleton) {
    if (batch == null)
        throw new IllegalArgumentException("batch cannot be null.");
    if (skeleton == null)
        throw new IllegalArgumentException("skeleton cannot be null.");
    Vector2 tempPosition = this.temp, tempUV = this.temp2;
    Color tempLight1 = this.temp3, tempDark1 = this.temp4;
    Color tempLight2 = this.temp5, tempDark2 = this.temp6;
    com.esotericsoftware.spine.SkeletonRenderer.VertexEffect vertexEffect = this.vertexEffect;
    if (vertexEffect != null)
        vertexEffect.begin(skeleton);
    boolean pmaColors = this.pmaColors, pmaBlendModes = this.pmaBlendModes;
    batch.setPremultipliedAlpha(pmaColors);
    BlendMode blendMode = null;
    int verticesLength = 0;
    float[] vertices = null, uvs = null;
    short[] triangles = null;
    Color color = null, skeletonColor = skeleton.color;
    float r = skeletonColor.r, g = skeletonColor.g, b = skeletonColor.b, a = skeletonColor.a;
    Object[] drawOrder = skeleton.drawOrder.items;
    for (int i = 0, n = skeleton.drawOrder.size; i < n; i++) {
        Slot slot = (Slot) drawOrder[i];
        if (!slot.bone.active) {
            clipper.clipEnd(slot);
            continue;
        }
        Texture texture = null;
        int vertexSize = clipper.isClipping() ? 2 : 6;
        Attachment attachment = slot.attachment;
        if (attachment instanceof RegionAttachment) {
            RegionAttachment region = (RegionAttachment) attachment;
            verticesLength = vertexSize << 2;
            vertices = this.vertices.items;
            region.computeWorldVertices(slot.getBone(), vertices, 0, vertexSize);
            triangles = quadTriangles;
            texture = region.getRegion().getTexture();
            uvs = region.getUVs();
            color = region.getColor();
        } else if (attachment instanceof MeshAttachment) {
            MeshAttachment mesh = (MeshAttachment) attachment;
            int count = mesh.getWorldVerticesLength();
            verticesLength = (count >> 1) * vertexSize;
            vertices = this.vertices.setSize(verticesLength);
            mesh.computeWorldVertices(slot, 0, count, vertices, 0, vertexSize);
            triangles = mesh.getTriangles();
            texture = mesh.getRegion().getTexture();
            uvs = mesh.getUVs();
            color = mesh.getColor();
        } else if (attachment instanceof ClippingAttachment) {
            ClippingAttachment clip = (ClippingAttachment) attachment;
            clipper.clipStart(slot, clip);
            continue;
        } else if (attachment instanceof SkeletonAttachment) {
            Skeleton attachmentSkeleton = ((SkeletonAttachment) attachment).getSkeleton();
            if (attachmentSkeleton != null)
                draw(particleRenderer, batch, skeletonContainer, attachmentSkeleton);
        }
        if (texture != null) {
            Color lightColor = slot.getColor();
            float alpha = a * lightColor.a * color.a * 255;
            float multiplier = pmaColors ? alpha : 255;
            BlendMode slotBlendMode = slot.data.getBlendMode();
            if (slotBlendMode != blendMode) {
                if (slotBlendMode == BlendMode.additive && pmaColors) {
                    slotBlendMode = BlendMode.normal;
                    alpha = 0;
                }
                blendMode = slotBlendMode;
                blendMode.apply(batch, pmaBlendModes);
            }
            float red = r * color.r * multiplier;
            float green = g * color.g * multiplier;
            float blue = b * color.b * multiplier;
            float light = NumberUtils.intToFloatColor(// 
            (int) alpha << 24 | // 
            (int) (blue * lightColor.b) << 16 | // 
            (int) (green * lightColor.g) << 8 | (int) (red * lightColor.r));
            Color darkColor = slot.getDarkColor();
            float dark = darkColor == null ? 0 : NumberUtils.intToFloatColor(// 
            (int) (blue * darkColor.b) << 16 | // 
            (int) (green * darkColor.g) << 8 | (int) (red * darkColor.r));
            if (clipper.isClipping()) {
                clipper.clipTriangles(vertices, verticesLength, triangles, triangles.length, uvs, light, dark, true);
                FloatArray clippedVertices = clipper.getClippedVertices();
                ShortArray clippedTriangles = clipper.getClippedTriangles();
                if (vertexEffect != null)
                    applyVertexEffect(clippedVertices.items, clippedVertices.size, 6, light, dark);
                batch.drawTwoColor(texture, clippedVertices.items, 0, clippedVertices.size, clippedTriangles.items, 0, clippedTriangles.size);
            } else {
                if (vertexEffect != null) {
                    tempLight1.set(NumberUtils.floatToIntColor(light));
                    tempDark1.set(NumberUtils.floatToIntColor(dark));
                    for (int v = 0, u = 0; v < verticesLength; v += 6, u += 2) {
                        tempPosition.x = vertices[v];
                        tempPosition.y = vertices[v + 1];
                        tempLight2.set(tempLight1);
                        tempDark2.set(tempDark1);
                        tempUV.x = uvs[u];
                        tempUV.y = uvs[u + 1];
                        vertexEffect.transform(tempPosition, tempUV, tempLight2, tempDark2);
                        vertices[v] = tempPosition.x;
                        vertices[v + 1] = tempPosition.y;
                        vertices[v + 2] = tempLight2.toFloatBits();
                        vertices[v + 3] = tempDark2.toFloatBits();
                        vertices[v + 4] = tempUV.x;
                        vertices[v + 5] = tempUV.y;
                    }
                } else {
                    for (int v = 2, u = 0; v < verticesLength; v += 6, u += 2) {
                        vertices[v] = light;
                        vertices[v + 1] = dark;
                        vertices[v + 2] = uvs[u];
                        vertices[v + 3] = uvs[u + 1];
                    }
                }
                batch.drawTwoColor(texture, vertices, 0, verticesLength, triangles, 0, triangles.length);
            }
        }
        clipper.clipEnd(slot);
    }
    clipper.clipEnd();
    if (vertexEffect != null)
        vertexEffect.end();
}
Also used : Color(com.badlogic.gdx.graphics.Color) BlendMode(com.esotericsoftware.spine.BlendMode) Attachment(com.esotericsoftware.spine.attachments.Attachment) RegionAttachment(com.esotericsoftware.spine.attachments.RegionAttachment) MeshAttachment(com.esotericsoftware.spine.attachments.MeshAttachment) ClippingAttachment(com.esotericsoftware.spine.attachments.ClippingAttachment) SkeletonAttachment(com.esotericsoftware.spine.attachments.SkeletonAttachment) Texture(com.badlogic.gdx.graphics.Texture) SkeletonAttachment(com.esotericsoftware.spine.attachments.SkeletonAttachment) RegionAttachment(com.esotericsoftware.spine.attachments.RegionAttachment) FloatArray(com.badlogic.gdx.utils.FloatArray) Vector2(com.badlogic.gdx.math.Vector2) MeshAttachment(com.esotericsoftware.spine.attachments.MeshAttachment) ClippingAttachment(com.esotericsoftware.spine.attachments.ClippingAttachment) Slot(com.esotericsoftware.spine.Slot) Skeleton(com.esotericsoftware.spine.Skeleton) ShortArray(com.badlogic.gdx.utils.ShortArray)

Example 5 with Attachment

use of com.esotericsoftware.spine.attachments.Attachment in project HyperLap2D by rednblackgames.

the class SpineActor method computeBoundBox.

private void computeBoundBox() {
    skeleton.updateWorldTransform();
    Array<Slot> drawOrder = skeleton.getDrawOrder();
    minX = Float.MAX_VALUE;
    minY = Float.MAX_VALUE;
    float maxX = Integer.MIN_VALUE, maxY = Integer.MIN_VALUE;
    for (int i = 0, n = drawOrder.size; i < n; i++) {
        Slot slot = drawOrder.get(i);
        if (!slot.getBone().isActive())
            continue;
        int verticesLength = 0;
        float[] vertices = null;
        Attachment attachment = slot.getAttachment();
        if (attachment instanceof RegionAttachment) {
            verticesLength = 8;
            vertices = temp.setSize(8);
            ((RegionAttachment) attachment).computeWorldVertices(slot.getBone(), vertices, 0, 2);
        } else if (attachment instanceof MeshAttachment) {
            MeshAttachment mesh = (MeshAttachment) attachment;
            verticesLength = mesh.getWorldVerticesLength();
            vertices = temp.setSize(verticesLength);
            mesh.computeWorldVertices(slot, 0, verticesLength, vertices, 0, 2);
        }
        if (vertices != null) {
            for (int ii = 0; ii < verticesLength; ii += 2) {
                float x = vertices[ii], y = vertices[ii + 1];
                minX = Math.min(minX, x);
                minY = Math.min(minY, y);
                maxX = Math.max(maxX, x);
                maxY = Math.max(maxY, y);
            }
        }
    }
    setWidth(maxX - minX);
    setHeight(maxY - minY);
}
Also used : MeshAttachment(com.esotericsoftware.spine.attachments.MeshAttachment) Attachment(com.esotericsoftware.spine.attachments.Attachment) RegionAttachment(com.esotericsoftware.spine.attachments.RegionAttachment) MeshAttachment(com.esotericsoftware.spine.attachments.MeshAttachment) RegionAttachment(com.esotericsoftware.spine.attachments.RegionAttachment)

Aggregations

Attachment (com.esotericsoftware.spine.attachments.Attachment)5 MeshAttachment (com.esotericsoftware.spine.attachments.MeshAttachment)5 RegionAttachment (com.esotericsoftware.spine.attachments.RegionAttachment)5 Color (com.badlogic.gdx.graphics.Color)3 BlendMode (com.esotericsoftware.spine.BlendMode)3 Skeleton (com.esotericsoftware.spine.Skeleton)3 Slot (com.esotericsoftware.spine.Slot)3 ClippingAttachment (com.esotericsoftware.spine.attachments.ClippingAttachment)3 SkeletonAttachment (com.esotericsoftware.spine.attachments.SkeletonAttachment)3 Texture (com.badlogic.gdx.graphics.Texture)2 Vector2 (com.badlogic.gdx.math.Vector2)2 FloatArray (com.badlogic.gdx.utils.FloatArray)2 ShortArray (com.badlogic.gdx.utils.ShortArray)2 PolygonSpriteBatch (com.badlogic.gdx.graphics.g2d.PolygonSpriteBatch)1 TwoColorPolygonBatch (com.esotericsoftware.spine.utils.TwoColorPolygonBatch)1 BoundEffect (com.talosvfx.talos.editor.addons.bvb.BoundEffect)1 ParticleEffectInstance (com.talosvfx.talos.runtime.ParticleEffectInstance)1