Support sprites with an internal offset.

This commit is contained in:
Paul Chote
2013-06-12 00:45:19 +12:00
parent 9b576d3fdd
commit e5bcb88b0e
3 changed files with 10 additions and 4 deletions

View File

@@ -77,7 +77,8 @@ namespace OpenRA.Graphics
return (TextureChannel)nextChannel;
}
public Sprite Allocate(Size imageSize)
public Sprite Allocate(Size imageSize) { return Allocate(imageSize, float2.Zero); }
public Sprite Allocate(Size imageSize, float2 spriteOffset)
{
if (imageSize.Width + p.X > current.Size.Width)
{
@@ -103,7 +104,7 @@ namespace OpenRA.Graphics
p = new Point(0,0);
}
var rect = new Sprite(current, new Rectangle(p, imageSize), channel);
var rect = new Sprite(current, new Rectangle(p, imageSize), spriteOffset, channel);
p.X += imageSize.Width;
return rect;

View File

@@ -18,12 +18,17 @@ namespace OpenRA.Graphics
public readonly Sheet sheet;
public readonly TextureChannel channel;
public readonly float2 size;
public readonly float2 offset;
readonly float2[] textureCoords;
public Sprite(Sheet sheet, Rectangle bounds, TextureChannel channel)
: this(sheet, bounds, float2.Zero, channel) {}
public Sprite(Sheet sheet, Rectangle bounds, float2 offset, TextureChannel channel)
{
this.bounds = bounds;
this.sheet = sheet;
this.bounds = bounds;
this.offset = offset;
this.channel = channel;
this.size = new float2(bounds.Size);

View File

@@ -66,7 +66,7 @@ namespace OpenRA.Graphics
Flush();
currentSheet = s.sheet;
Util.FastCreateQuad(vertices, location.ToInt2(), s, paletteIndex, nv, size);
Util.FastCreateQuad(vertices, (location + s.offset).ToInt2(), s, paletteIndex, nv, size);
nv += 4;
}