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(); }
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; } } } }