diff --git a/OpenRA.Game/Graphics/Renderable.cs b/OpenRA.Game/Graphics/Renderable.cs index 33f2a30b7d..14ad932990 100644 --- a/OpenRA.Game/Graphics/Renderable.cs +++ b/OpenRA.Game/Graphics/Renderable.cs @@ -35,62 +35,4 @@ namespace OpenRA.Graphics void RenderDebugGeometry(WorldRenderer wr); Rectangle ScreenBounds(WorldRenderer wr); } - - public struct SpriteRenderable : IRenderable, IFinalizedRenderable - { - public static readonly IEnumerable None = new IRenderable[0].AsEnumerable(); - - readonly Sprite sprite; - readonly WPos pos; - readonly WVec offset; - readonly int zOffset; - readonly PaletteReference palette; - readonly float scale; - readonly bool isDecoration; - - public SpriteRenderable(Sprite sprite, WPos pos, WVec offset, int zOffset, PaletteReference palette, float scale, bool isDecoration) - { - this.sprite = sprite; - this.pos = pos; - this.offset = offset; - this.zOffset = zOffset; - this.palette = palette; - this.scale = scale; - this.isDecoration = isDecoration; - } - - public WPos Pos { get { return pos + offset; } } - public WVec Offset { get { return offset; } } - public PaletteReference Palette { get { return palette; } } - public int ZOffset { get { return zOffset; } } - public bool IsDecoration { get { return isDecoration; } } - - public IRenderable WithPalette(PaletteReference newPalette) { return new SpriteRenderable(sprite, pos, offset, zOffset, newPalette, scale, isDecoration); } - public IRenderable WithZOffset(int newOffset) { return new SpriteRenderable(sprite, pos, offset, newOffset, palette, scale, isDecoration); } - public IRenderable OffsetBy(WVec vec) { return new SpriteRenderable(sprite, pos + vec, offset, zOffset, palette, scale, isDecoration); } - public IRenderable AsDecoration() { return new SpriteRenderable(sprite, pos, offset, zOffset, palette, scale, true); } - - float2 ScreenPosition(WorldRenderer wr) - { - return wr.ScreenPxPosition(pos) + wr.ScreenPxOffset(offset) - (0.5f * scale * sprite.Size).ToInt2(); - } - - public IFinalizedRenderable PrepareRender(WorldRenderer wr) { return this; } - public void Render(WorldRenderer wr) - { - Game.Renderer.WorldSpriteRenderer.DrawSprite(sprite, ScreenPosition(wr), palette, sprite.Size * scale); - } - - public void RenderDebugGeometry(WorldRenderer wr) - { - var offset = ScreenPosition(wr) + sprite.Offset; - Game.Renderer.WorldLineRenderer.DrawRect(offset, offset + sprite.Size, Color.Red); - } - - public Rectangle ScreenBounds(WorldRenderer wr) - { - var offset = ScreenPosition(wr) + sprite.Offset; - return new Rectangle((int)offset.X, (int)offset.Y, (int)sprite.Size.X, (int)sprite.Size.Y); - } - } } diff --git a/OpenRA.Game/Graphics/SpriteRenderable.cs b/OpenRA.Game/Graphics/SpriteRenderable.cs new file mode 100644 index 0000000000..793942d2ee --- /dev/null +++ b/OpenRA.Game/Graphics/SpriteRenderable.cs @@ -0,0 +1,74 @@ +#region Copyright & License Information +/* + * Copyright 2007-2015 The OpenRA Developers (see AUTHORS) + * This file is part of OpenRA, which is free software. It is made + * available to you under the terms of the GNU General Public License + * as published by the Free Software Foundation. For more information, + * see COPYING. + */ +#endregion + +using System.Collections.Generic; +using System.Drawing; +using System.Linq; + +namespace OpenRA.Graphics +{ + public struct SpriteRenderable : IRenderable, IFinalizedRenderable + { + public static readonly IEnumerable None = new IRenderable[0].AsEnumerable(); + + readonly Sprite sprite; + readonly WPos pos; + readonly WVec offset; + readonly int zOffset; + readonly PaletteReference palette; + readonly float scale; + readonly bool isDecoration; + + public SpriteRenderable(Sprite sprite, WPos pos, WVec offset, int zOffset, PaletteReference palette, float scale, bool isDecoration) + { + this.sprite = sprite; + this.pos = pos; + this.offset = offset; + this.zOffset = zOffset; + this.palette = palette; + this.scale = scale; + this.isDecoration = isDecoration; + } + + public WPos Pos { get { return pos + offset; } } + public WVec Offset { get { return offset; } } + public PaletteReference Palette { get { return palette; } } + public int ZOffset { get { return zOffset; } } + public bool IsDecoration { get { return isDecoration; } } + + public IRenderable WithPalette(PaletteReference newPalette) { return new SpriteRenderable(sprite, pos, offset, zOffset, newPalette, scale, isDecoration); } + public IRenderable WithZOffset(int newOffset) { return new SpriteRenderable(sprite, pos, offset, newOffset, palette, scale, isDecoration); } + public IRenderable OffsetBy(WVec vec) { return new SpriteRenderable(sprite, pos + vec, offset, zOffset, palette, scale, isDecoration); } + public IRenderable AsDecoration() { return new SpriteRenderable(sprite, pos, offset, zOffset, palette, scale, true); } + + float2 ScreenPosition(WorldRenderer wr) + { + return wr.ScreenPxPosition(pos) + wr.ScreenPxOffset(offset) - (0.5f * scale * sprite.Size).ToInt2(); + } + + public IFinalizedRenderable PrepareRender(WorldRenderer wr) { return this; } + public void Render(WorldRenderer wr) + { + Game.Renderer.WorldSpriteRenderer.DrawSprite(sprite, ScreenPosition(wr), palette, sprite.Size * scale); + } + + public void RenderDebugGeometry(WorldRenderer wr) + { + var offset = ScreenPosition(wr) + sprite.Offset; + Game.Renderer.WorldLineRenderer.DrawRect(offset, offset + sprite.Size, Color.Red); + } + + public Rectangle ScreenBounds(WorldRenderer wr) + { + var offset = ScreenPosition(wr) + sprite.Offset; + return new Rectangle((int)offset.X, (int)offset.Y, (int)sprite.Size.X, (int)sprite.Size.Y); + } + } +} diff --git a/OpenRA.Game/OpenRA.Game.csproj b/OpenRA.Game/OpenRA.Game.csproj index a3fdea3343..127e9f4a72 100644 --- a/OpenRA.Game/OpenRA.Game.csproj +++ b/OpenRA.Game/OpenRA.Game.csproj @@ -256,6 +256,7 @@ +