Pass WorldRenderer to Render().

This commit is contained in:
Paul Chote
2013-02-24 14:17:41 +13:00
parent d6fcaafd78
commit 3380817865
11 changed files with 27 additions and 23 deletions

View File

@@ -93,8 +93,8 @@ namespace OpenRA
vis = Shroud.GetVisOrigins(this).ToArray()
};
}
ApplyIRender = x => x.Render(this);
ApplyIRender = (x, wr) => x.Render(this, wr);
ApplyRenderModifier = (m, p, wr) => p.ModifyRender(this, wr, m);
Bounds = Cached.New(() => CalculateBounds(false));
@@ -122,12 +122,12 @@ namespace OpenRA
OpenRA.FileFormats.Lazy<int2> Size;
// note: these delegates are cached to avoid massive allocation.
Func<IRender, IEnumerable<Renderable>> ApplyIRender;
Func<IRender, WorldRenderer, IEnumerable<Renderable>> ApplyIRender;
Func<IEnumerable<Renderable>, IRenderModifier, WorldRenderer, IEnumerable<Renderable>> ApplyRenderModifier;
public IEnumerable<Renderable> Render(WorldRenderer wr)
{
var mods = TraitsImplementing<IRenderModifier>();
var sprites = TraitsImplementing<IRender>().SelectMany(ApplyIRender);
var sprites = TraitsImplementing<IRender>().SelectMany(x => ApplyIRender(x, wr));
return mods.Aggregate(sprites, (m,p) => ApplyRenderModifier(m,p,wr));
}

View File

@@ -78,17 +78,17 @@ namespace OpenRA.Traits
anim.PlayRepeating("idle");
}
public PaletteReference Palette(Player p)
public PaletteReference Palette(Player p, WorldRenderer wr)
{
return PaletteReference.FromName(Info.Palette ?? Info.PlayerPalette + p.InternalName);
return wr.Palette(Info.Palette ?? Info.PlayerPalette + p.InternalName);
}
public virtual IEnumerable<Renderable> Render(Actor self)
public virtual IEnumerable<Renderable> Render(Actor self, WorldRenderer wr)
{
foreach (var a in anims.Values)
if (a.DisableFunc == null || !a.DisableFunc())
{
Renderable ret = a.Image(self, Palette(self.Owner));
Renderable ret = a.Image(self, Palette(self.Owner, wr));
if (Info.Scale != 1f)
ret = ret.WithScale(Info.Scale).WithPos(ret.Pos + 0.5f * ret.Sprite.size * (1 - Info.Scale));
yield return ret;

View File

@@ -34,7 +34,7 @@ namespace OpenRA.Traits
}
public interface ITick { void Tick(Actor self); }
public interface IRender { IEnumerable<Renderable> Render(Actor self); }
public interface IRender { IEnumerable<Renderable> Render(Actor self, WorldRenderer wr); }
public interface IAutoSelectionSize { int2 SelectionSize(Actor self); }
public interface IIssueOrder

View File

@@ -19,12 +19,13 @@ namespace OpenRA.Mods.RA.Effects
{
readonly Animation anim;
readonly float2 pos;
readonly PaletteReference palette;
readonly RenderSimple rs;
readonly Player p;
public Corpse(Actor fromActor, string sequence)
{
var rs = fromActor.Trait<RenderSimple>();
palette = rs.Palette(fromActor.Owner);
p = fromActor.Owner;
rs = fromActor.Trait<RenderSimple>();
anim = new Animation(rs.GetImage(fromActor));
anim.PlayThen(sequence,
() => fromActor.World.AddFrameEndTask(w => w.Remove(this)));
@@ -36,7 +37,7 @@ namespace OpenRA.Mods.RA.Effects
public IEnumerable<Renderable> Render(WorldRenderer wr)
{
yield return new Renderable(anim.Image, pos - .5f * anim.Image.size, palette, (int)pos.Y);
yield return new Renderable(anim.Image, pos - .5f * anim.Image.size, rs.Palette(p, wr), (int)pos.Y);
}
}
}

View File

@@ -71,7 +71,7 @@ namespace OpenRA.Mods.RA.Effects
if (show && !self.Destroyed)
{
var p = self.CenterLocation;
yield return new Renderable(anim.Image, p.ToFloat2() - 0.5f * anim.Image.size, rs.Palette(self.Owner), p.Y)
yield return new Renderable(anim.Image, p.ToFloat2() - 0.5f * anim.Image.size, rs.Palette(self.Owner, wr), p.Y)
.WithScale(1.5f);
}
}

View File

@@ -20,6 +20,7 @@ namespace OpenRA.Mods.RA.Effects
{
readonly Actor building;
readonly RA.RallyPoint rp;
readonly RenderSimple rs;
public Animation flag = new Animation("rallypoint");
public Animation circles = new Animation("rallypoint");
@@ -27,6 +28,7 @@ namespace OpenRA.Mods.RA.Effects
{
this.building = building;
rp = building.Trait<RA.RallyPoint>();
rs = building.Trait<RenderSimple>();
flag.PlayRepeating("flag");
circles.Play("circles");
}
@@ -52,7 +54,7 @@ namespace OpenRA.Mods.RA.Effects
&& building.World.Selection.Actors.Contains(building))
{
var pos = Traits.Util.CenterOfCell(rp.rallyPoint);
var palette = building.Trait<RenderSimple>().Palette(building.Owner);
var palette = rs.Palette(building.Owner, wr);
yield return new Renderable(circles.Image,
pos.ToFloat2() - .5f * circles.Image.size,

View File

@@ -20,6 +20,7 @@ namespace OpenRA.Mods.RA.Effects
{
Actor building;
Player player;
RenderSimple rs;
Animation anim = new Animation("allyrepair");
public RepairIndicator(Actor building, Player player)
@@ -27,6 +28,7 @@ namespace OpenRA.Mods.RA.Effects
this.building = building;
this.player = player;
anim.PlayRepeating("repair");
rs = building.Trait<RenderSimple>();
}
public void Tick(World world)
@@ -44,10 +46,8 @@ namespace OpenRA.Mods.RA.Effects
{
if (!building.Destroyed)
{
var palette = building.Trait<RenderSimple>().Palette(player);
yield return new Renderable(anim.Image,
building.CenterLocation.ToFloat2() - .5f * anim.Image.size, palette, (int)building.CenterLocation.Y);
building.CenterLocation.ToFloat2() - .5f * anim.Image.size, rs.Palette(player, wr), (int)building.CenterLocation.Y);
}
}
}

View File

@@ -508,7 +508,7 @@ namespace OpenRA.Mods.RA.Missions
public IEnumerable<Renderable> ModifyRender(Actor self, WorldRenderer wr, IEnumerable<Renderable> r)
{
return r.Select(a => a.WithPalette(Palette(hijackable.OldOwner)));
return r.Select(a => a.WithPalette(Palette(hijackable.OldOwner, wr)));
}
}

View File

@@ -9,6 +9,7 @@
#endregion
using System.Collections.Generic;
using OpenRA.Graphics;
using OpenRA.Traits;
namespace OpenRA.Mods.RA.Render
@@ -23,6 +24,6 @@ namespace OpenRA.Mods.RA.Render
public RenderEditorOnly(Actor self) : base(self, () => 0) { }
static readonly Renderable[] Nothing = { };
public override IEnumerable<Renderable> Render(Actor self) { return Nothing; }
public override IEnumerable<Renderable> Render(Actor self, WorldRenderer wr) { return Nothing; }
}
}

View File

@@ -34,7 +34,7 @@ namespace OpenRA.Mods.RA.Render
public IEnumerable<Renderable> ModifyRender(Actor self, WorldRenderer wr, IEnumerable<Renderable> r)
{
return spy.disguisedAsPlayer != null ? r.Select(a => a.WithPalette(Palette(spy.disguisedAsPlayer))) : r;
return spy.disguisedAsPlayer != null ? r.Select(a => a.WithPalette(Palette(spy.disguisedAsPlayer, wr))) : r;
}
public override void Tick(Actor self)

View File

@@ -57,11 +57,11 @@ namespace OpenRA.Mods.RA.Render
mf.Animation.PlayThen("muzzle", () => isShowing = false);
}
public IEnumerable<Renderable> Render(Actor self)
public IEnumerable<Renderable> Render(Actor self, WorldRenderer wr)
{
foreach (var a in muzzleFlashes.Values)
if (a.DisableFunc == null || !a.DisableFunc())
yield return a.Image(self, PaletteReference.FromName("effect"));
yield return a.Image(self, wr.Palette("effect"));
}
public void Tick(Actor self)