fix #436 bridges in wrong place in render sequence

This commit is contained in:
Chris Forbes
2010-12-20 19:43:25 +13:00
parent 7d61e75862
commit dcec748911
3 changed files with 7 additions and 2 deletions

View File

@@ -77,6 +77,9 @@ namespace OpenRA.Graphics
Game.Renderer.EnableScissor(bounds.Left, bounds.Top, bounds.Width, bounds.Height); Game.Renderer.EnableScissor(bounds.Left, bounds.Top, bounds.Width, bounds.Height);
terrainRenderer.Draw(this, Game.viewport); terrainRenderer.Draw(this, Game.viewport);
foreach (var a in world.traitDict.ActorsWithTraitMultiple<IRenderAsTerrain>(world))
foreach (var r in a.Trait.RenderAsTerrain(a.Actor))
r.Sprite.DrawAt(r.Pos, this.GetPaletteIndex(r.Palette), r.Scale);
foreach (var a in world.Selection.Actors) foreach (var a in world.Selection.Actors)
if (!a.Destroyed) if (!a.Destroyed)

View File

@@ -36,6 +36,7 @@ namespace OpenRA.Traits
public interface ITick { void Tick(Actor self); } public interface ITick { void Tick(Actor self); }
public interface IRender { IEnumerable<Renderable> Render(Actor self); } public interface IRender { IEnumerable<Renderable> Render(Actor self); }
public interface IIssueOrder public interface IIssueOrder
{ {
IEnumerable<IOrderTargeter> Orders { get; } IEnumerable<IOrderTargeter> Orders { get; }
@@ -202,6 +203,7 @@ namespace OpenRA.Traits
public interface IPostRenderSelection { void RenderAfterWorld(WorldRenderer wr, Actor self); } public interface IPostRenderSelection { void RenderAfterWorld(WorldRenderer wr, Actor self); }
public interface IPreRenderSelection { void RenderBeforeWorld(WorldRenderer wr, Actor self); } public interface IPreRenderSelection { void RenderBeforeWorld(WorldRenderer wr, Actor self); }
public interface IRenderAsTerrain { IEnumerable<Renderable> RenderAsTerrain(Actor self); }
public struct Target // a target: either an actor, or a fixed location. public struct Target // a target: either an actor, or a fixed location.
{ {

View File

@@ -62,7 +62,7 @@ namespace OpenRA.Mods.RA
} }
} }
class Bridge: IRender, INotifyDamage class Bridge: IRenderAsTerrain, INotifyDamage
{ {
static string cachedTileset; static string cachedTileset;
static Cache<TileReference<ushort,byte>, Sprite> sprites; static Cache<TileReference<ushort,byte>, Sprite> sprites;
@@ -131,7 +131,7 @@ namespace OpenRA.Mods.RA
return bridges.GetBridge(self.Location + new int2(offset[0], offset[1])); return bridges.GetBridge(self.Location + new int2(offset[0], offset[1]));
} }
public IEnumerable<Renderable> Render(Actor self) public IEnumerable<Renderable> RenderAsTerrain(Actor self)
{ {
foreach (var t in TileSprites[currentTemplate]) foreach (var t in TileSprites[currentTemplate])
yield return new Renderable(t.Value, Game.CellSize * t.Key, "terrain", Game.CellSize * t.Key.Y); yield return new Renderable(t.Value, Game.CellSize * t.Key, "terrain", Game.CellSize * t.Key.Y);