Esempio n. 1
0
        public void Draw(Skeleton skeleton)
        {
            List <Slot> drawOrder = skeleton.DrawOrder;

            for (int i = 0, n = drawOrder.Count; i < n; i++)
            {
                Slot       slot       = drawOrder[i];
                Attachment attachment = slot.Attachment;
                if (attachment == null)
                {
                    continue;
                }
                if (attachment is RegionAttachment)
                {
                    RegionAttachment regionAttachment = (RegionAttachment)attachment;

                    SpriteBatchItem item = batcher.CreateBatchItem();
                    item.Texture = ((XnaAtlasPage)regionAttachment.Region.Page).Texture;


                    item.vertexTL.Color = new Color(slot.R, slot.G, slot.B, slot.A);

                    item.vertexBL.Color = new Color(slot.R, slot.G, slot.B, slot.A);

                    item.vertexBR.Color = new Color(slot.R, slot.G, slot.B, slot.A);

                    item.vertexTR.Color = new Color(slot.R, slot.G, slot.B, slot.A);


                    regionAttachment.UpdateVertices(slot.Bone);
                    float[] vertices = regionAttachment.Vertices;
                    item.vertexTL.Position.X = vertices[RegionAttachment.X1];
                    item.vertexTL.Position.Y = vertices[RegionAttachment.Y1];
                    item.vertexTL.Position.Z = 0;
                    item.vertexBL.Position.X = vertices[RegionAttachment.X2];
                    item.vertexBL.Position.Y = vertices[RegionAttachment.Y2];
                    item.vertexBL.Position.Z = 0;
                    item.vertexBR.Position.X = vertices[RegionAttachment.X3];
                    item.vertexBR.Position.Y = vertices[RegionAttachment.Y3];
                    item.vertexBR.Position.Z = 0;
                    item.vertexTR.Position.X = vertices[RegionAttachment.X4];
                    item.vertexTR.Position.Y = vertices[RegionAttachment.Y4];
                    item.vertexTR.Position.Z = 0;

                    float[] uvs = regionAttachment.UVs;
                    item.vertexTL.TextureCoordinate.X = uvs[RegionAttachment.X1];
                    item.vertexTL.TextureCoordinate.Y = uvs[RegionAttachment.Y1];
                    item.vertexBL.TextureCoordinate.X = uvs[RegionAttachment.X2];
                    item.vertexBL.TextureCoordinate.Y = uvs[RegionAttachment.Y2];
                    item.vertexBR.TextureCoordinate.X = uvs[RegionAttachment.X3];
                    item.vertexBR.TextureCoordinate.Y = uvs[RegionAttachment.Y3];
                    item.vertexTR.TextureCoordinate.X = uvs[RegionAttachment.X4];
                    item.vertexTR.TextureCoordinate.Y = uvs[RegionAttachment.Y4];
                }
            }
        }
    // update the attachment with the current slot data
    public void Update(Slot slot)
    {
        _attachment = slot.Attachment as RegionAttachment;
        _attachment.UpdateVertices(slot.Bone);
        element = _attachment.Texture as FAtlasElement;

        base.color = _slotCustomColor * new Color(slot.R, slot.G, slot.B, slot.A);

        UpdateLocalVertices();
    }
Esempio n. 3
0
        public void Draw(Skeleton skeleton)
        {
            List <Slot> drawOrder = skeleton.DrawOrder;

            for (int i = 0, n = drawOrder.Count; i < n; i++)
            {
                Slot       slot       = drawOrder[i];
                Attachment attachment = slot.Attachment;
                if (attachment is RegionAttachment)
                {
                    RegionAttachment regionAttachment = (RegionAttachment)attachment;

                    SpriteBatchItem item = batcher.CreateBatchItem();
                    item.Texture = (Texture2D)regionAttachment.Region.page.texture;

                    byte r = (byte)(skeleton.R * slot.R * 255);
                    byte g = (byte)(skeleton.G * slot.G * 255);
                    byte b = (byte)(skeleton.B * slot.B * 255);
                    byte a = (byte)(skeleton.A * slot.A * 255);
                    item.vertexTL.Color.R = r;
                    item.vertexTL.Color.G = g;
                    item.vertexTL.Color.B = b;
                    item.vertexTL.Color.A = a;
                    item.vertexBL.Color.R = r;
                    item.vertexBL.Color.G = g;
                    item.vertexBL.Color.B = b;
                    item.vertexBL.Color.A = a;
                    item.vertexBR.Color.R = r;
                    item.vertexBR.Color.G = g;
                    item.vertexBR.Color.B = b;
                    item.vertexBR.Color.A = a;
                    item.vertexTR.Color.R = r;
                    item.vertexTR.Color.G = g;
                    item.vertexTR.Color.B = b;
                    item.vertexTR.Color.A = a;

                    regionAttachment.UpdateVertices(slot.Bone);
                    float[] vertices = regionAttachment.Vertices;
                    item.vertexTL.Position.X = vertices[RegionAttachment.X1];
                    item.vertexTL.Position.Y = vertices[RegionAttachment.Y1];
                    item.vertexTL.Position.Z = 0;
                    item.vertexBL.Position.X = vertices[RegionAttachment.X2];
                    item.vertexBL.Position.Y = vertices[RegionAttachment.Y2];
                    item.vertexBL.Position.Z = 0;
                    item.vertexBR.Position.X = vertices[RegionAttachment.X3];
                    item.vertexBR.Position.Y = vertices[RegionAttachment.Y3];
                    item.vertexBR.Position.Z = 0;
                    item.vertexTR.Position.X = vertices[RegionAttachment.X4];
                    item.vertexTR.Position.Y = vertices[RegionAttachment.Y4];
                    item.vertexTR.Position.Z = 0;

                    AtlasRegion region = regionAttachment.Region;
                    if (region.rotate)
                    {
                        item.vertexBL.TextureCoordinate.X = region.u;
                        item.vertexBL.TextureCoordinate.Y = region.v2;
                        item.vertexBR.TextureCoordinate.X = region.u;
                        item.vertexBR.TextureCoordinate.Y = region.v;
                        item.vertexTR.TextureCoordinate.X = region.u2;
                        item.vertexTR.TextureCoordinate.Y = region.v;
                        item.vertexTL.TextureCoordinate.X = region.u2;
                        item.vertexTL.TextureCoordinate.Y = region.v2;
                    }
                    else
                    {
                        item.vertexTL.TextureCoordinate.X = region.u;
                        item.vertexTL.TextureCoordinate.Y = region.v2;
                        item.vertexBL.TextureCoordinate.X = region.u;
                        item.vertexBL.TextureCoordinate.Y = region.v;
                        item.vertexBR.TextureCoordinate.X = region.u2;
                        item.vertexBR.TextureCoordinate.Y = region.v;
                        item.vertexTR.TextureCoordinate.X = region.u2;
                        item.vertexTR.TextureCoordinate.Y = region.v2;
                    }
                }
            }
        }