Make the guts of Renderable private.
This commit is contained in:
@@ -34,12 +34,16 @@ namespace OpenRA.Graphics
|
||||
|
||||
public Renderable Image(Actor self, WorldRenderer wr, PaletteReference pal)
|
||||
{
|
||||
var p = self.CenterLocation;
|
||||
var loc = p.ToFloat2() - 0.5f * Animation.Image.size
|
||||
+ (OffsetFunc != null ? OffsetFunc(wr) : float2.Zero);
|
||||
var r = new Renderable(Animation.Image, loc, pal, p.Y);
|
||||
return Image(self, wr, pal, 1f);
|
||||
}
|
||||
|
||||
return ZOffset != 0 ? r.WithZOffset(ZOffset) : r;
|
||||
public Renderable Image(Actor self, WorldRenderer wr, PaletteReference pal, float scale)
|
||||
{
|
||||
var p = self.CenterLocation;
|
||||
var loc = p.ToFloat2() - 0.5f * scale * Animation.Image.size
|
||||
+ (OffsetFunc != null ? OffsetFunc(wr) : float2.Zero);
|
||||
|
||||
return new Renderable(Animation.Image, loc, pal, p.Y, ZOffset, scale);
|
||||
}
|
||||
|
||||
public static implicit operator AnimationWithOffset(Animation a)
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
#endregion
|
||||
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
|
||||
namespace OpenRA.Graphics
|
||||
{
|
||||
@@ -16,18 +17,20 @@ namespace OpenRA.Graphics
|
||||
{
|
||||
public int Compare(Renderable x, Renderable y)
|
||||
{
|
||||
return (x.Z + x.ZOffset).CompareTo(y.Z + y.ZOffset);
|
||||
return x.SortOrder.CompareTo(y.SortOrder);
|
||||
}
|
||||
}
|
||||
|
||||
public struct Renderable
|
||||
{
|
||||
public readonly Sprite Sprite;
|
||||
public readonly float2 Pos;
|
||||
readonly Sprite Sprite;
|
||||
readonly float2 Pos;
|
||||
readonly int Z;
|
||||
float Scale;
|
||||
|
||||
// TODO: Fix Parachute and WithShadow so these can be made private
|
||||
public readonly PaletteReference Palette;
|
||||
public readonly int Z;
|
||||
public readonly int ZOffset;
|
||||
public float Scale;
|
||||
|
||||
public Renderable(Sprite sprite, float2 pos, PaletteReference palette, int z, int zOffset, float scale)
|
||||
{
|
||||
@@ -47,7 +50,24 @@ namespace OpenRA.Graphics
|
||||
|
||||
public Renderable WithScale(float newScale) { return new Renderable(Sprite, Pos, Palette, Z, ZOffset, newScale); }
|
||||
public Renderable WithPalette(PaletteReference newPalette) { return new Renderable(Sprite, Pos, newPalette, Z, ZOffset, Scale); }
|
||||
|
||||
public Renderable WithPxOffset(float2 offset) { return new Renderable(Sprite, Pos + offset, Palette, Z, ZOffset, Scale); }
|
||||
public Renderable WithZOffset(int newOffset) { return new Renderable(Sprite, Pos, Palette, Z, newOffset, Scale); }
|
||||
public Renderable WithPos(float2 newPos) { return new Renderable(Sprite, newPos, Palette, Z, ZOffset, Scale); }
|
||||
|
||||
public void Render(WorldRenderer wr)
|
||||
{
|
||||
Sprite.DrawAt(Pos, Palette.Index, Scale);
|
||||
}
|
||||
|
||||
public Size Size
|
||||
{
|
||||
get
|
||||
{
|
||||
var size = (Scale*Sprite.size).ToInt2();
|
||||
return new Size(size.X, size.Y);
|
||||
}
|
||||
}
|
||||
|
||||
public int SortOrder { get { return Z + ZOffset; } }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -65,22 +65,23 @@ namespace OpenRA.Graphics
|
||||
public PaletteReference Palette(string name) { return palettes[name]; }
|
||||
public void AddPalette(string name, Palette pal, bool allowModifiers) { palette.AddPalette(name, pal, allowModifiers); }
|
||||
|
||||
IEnumerable<Renderable> SpritesToRender()
|
||||
void DrawRenderables()
|
||||
{
|
||||
var bounds = Game.viewport.WorldBounds(world);
|
||||
var comparer = new RenderableComparer();
|
||||
|
||||
var actors = world.FindUnits(
|
||||
bounds.TopLeftAsCPos().ToPPos(),
|
||||
bounds.BottomRightAsCPos().ToPPos()
|
||||
);
|
||||
bounds.BottomRightAsCPos().ToPPos());
|
||||
|
||||
var renderables = actors.SelectMany(a => a.Render(this))
|
||||
.OrderBy(r => r, comparer);
|
||||
actors.SelectMany(a => a.Render(this))
|
||||
.OrderBy(r => r, comparer)
|
||||
.Do(rr => rr.Render(this));
|
||||
|
||||
var effects = world.Effects.SelectMany(e => e.Render(this));
|
||||
|
||||
return renderables.Concat(effects);
|
||||
// Effects are drawn on top of all actors
|
||||
// TODO: Allow effects to be interleaved with actors
|
||||
world.Effects.SelectMany(e => e.Render(this))
|
||||
.Do(rr => rr.Render(this));
|
||||
}
|
||||
|
||||
public void Draw()
|
||||
@@ -96,7 +97,7 @@ namespace OpenRA.Graphics
|
||||
terrainRenderer.Draw(this, Game.viewport);
|
||||
foreach (var a in world.traitDict.ActorsWithTraitMultiple<IRenderAsTerrain>(world))
|
||||
foreach (var r in a.Trait.RenderAsTerrain(this, a.Actor))
|
||||
r.Sprite.DrawAt(r.Pos, r.Palette.Index, r.Scale);
|
||||
r.Render(this);
|
||||
|
||||
foreach (var a in world.Selection.Actors)
|
||||
if (!a.Destroyed)
|
||||
@@ -108,8 +109,7 @@ namespace OpenRA.Graphics
|
||||
if (world.OrderGenerator != null)
|
||||
world.OrderGenerator.RenderBeforeWorld(this, world);
|
||||
|
||||
foreach (var image in SpritesToRender())
|
||||
image.Sprite.DrawAt(image.Pos, image.Palette.Index, image.Scale);
|
||||
DrawRenderables();
|
||||
|
||||
// added for contrails
|
||||
foreach (var a in world.ActorsWithTrait<IPostRender>())
|
||||
|
||||
Reference in New Issue
Block a user