From 3380817865fd178c3daf0f4fb0d655263e1086de Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Sun, 24 Feb 2013 14:17:41 +1300 Subject: [PATCH] Pass WorldRenderer to Render(). --- OpenRA.Game/Actor.cs | 8 ++++---- OpenRA.Game/Traits/Render/RenderSimple.cs | 8 ++++---- OpenRA.Game/Traits/TraitsInterfaces.cs | 2 +- OpenRA.Mods.RA/Effects/Corpse.cs | 9 +++++---- OpenRA.Mods.RA/Effects/GpsDot.cs | 2 +- OpenRA.Mods.RA/Effects/RallyPoint.cs | 4 +++- OpenRA.Mods.RA/Effects/RepairIndicator.cs | 6 +++--- OpenRA.Mods.RA/Missions/Allies04Script.cs | 2 +- OpenRA.Mods.RA/Render/RenderEditorOnly.cs | 3 ++- OpenRA.Mods.RA/Render/RenderSpy.cs | 2 +- OpenRA.Mods.RA/Render/WithMuzzleFlash.cs | 4 ++-- 11 files changed, 27 insertions(+), 23 deletions(-) diff --git a/OpenRA.Game/Actor.cs b/OpenRA.Game/Actor.cs index f61623c4da..47232401ee 100755 --- a/OpenRA.Game/Actor.cs +++ b/OpenRA.Game/Actor.cs @@ -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 Size; // note: these delegates are cached to avoid massive allocation. - Func> ApplyIRender; + Func> ApplyIRender; Func, IRenderModifier, WorldRenderer, IEnumerable> ApplyRenderModifier; public IEnumerable Render(WorldRenderer wr) { var mods = TraitsImplementing(); - var sprites = TraitsImplementing().SelectMany(ApplyIRender); + var sprites = TraitsImplementing().SelectMany(x => ApplyIRender(x, wr)); return mods.Aggregate(sprites, (m,p) => ApplyRenderModifier(m,p,wr)); } diff --git a/OpenRA.Game/Traits/Render/RenderSimple.cs b/OpenRA.Game/Traits/Render/RenderSimple.cs index 28cdff3aee..a3ab0ef66e 100755 --- a/OpenRA.Game/Traits/Render/RenderSimple.cs +++ b/OpenRA.Game/Traits/Render/RenderSimple.cs @@ -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 Render(Actor self) + public virtual IEnumerable 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; diff --git a/OpenRA.Game/Traits/TraitsInterfaces.cs b/OpenRA.Game/Traits/TraitsInterfaces.cs index 06ed8b92aa..feadbb2ab3 100755 --- a/OpenRA.Game/Traits/TraitsInterfaces.cs +++ b/OpenRA.Game/Traits/TraitsInterfaces.cs @@ -34,7 +34,7 @@ namespace OpenRA.Traits } public interface ITick { void Tick(Actor self); } - public interface IRender { IEnumerable Render(Actor self); } + public interface IRender { IEnumerable Render(Actor self, WorldRenderer wr); } public interface IAutoSelectionSize { int2 SelectionSize(Actor self); } public interface IIssueOrder diff --git a/OpenRA.Mods.RA/Effects/Corpse.cs b/OpenRA.Mods.RA/Effects/Corpse.cs index a22670d0fb..e7103f97a2 100644 --- a/OpenRA.Mods.RA/Effects/Corpse.cs +++ b/OpenRA.Mods.RA/Effects/Corpse.cs @@ -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(); - palette = rs.Palette(fromActor.Owner); + p = fromActor.Owner; + rs = fromActor.Trait(); 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 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); } } } diff --git a/OpenRA.Mods.RA/Effects/GpsDot.cs b/OpenRA.Mods.RA/Effects/GpsDot.cs index f6400ab2da..5517341fd4 100644 --- a/OpenRA.Mods.RA/Effects/GpsDot.cs +++ b/OpenRA.Mods.RA/Effects/GpsDot.cs @@ -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); } } diff --git a/OpenRA.Mods.RA/Effects/RallyPoint.cs b/OpenRA.Mods.RA/Effects/RallyPoint.cs index 2ff23f5fcf..8c8b56d254 100755 --- a/OpenRA.Mods.RA/Effects/RallyPoint.cs +++ b/OpenRA.Mods.RA/Effects/RallyPoint.cs @@ -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(); + rs = building.Trait(); 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().Palette(building.Owner); + var palette = rs.Palette(building.Owner, wr); yield return new Renderable(circles.Image, pos.ToFloat2() - .5f * circles.Image.size, diff --git a/OpenRA.Mods.RA/Effects/RepairIndicator.cs b/OpenRA.Mods.RA/Effects/RepairIndicator.cs index 1089dd8450..346beca3f5 100755 --- a/OpenRA.Mods.RA/Effects/RepairIndicator.cs +++ b/OpenRA.Mods.RA/Effects/RepairIndicator.cs @@ -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(); } public void Tick(World world) @@ -44,10 +46,8 @@ namespace OpenRA.Mods.RA.Effects { if (!building.Destroyed) { - var palette = building.Trait().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); } } } diff --git a/OpenRA.Mods.RA/Missions/Allies04Script.cs b/OpenRA.Mods.RA/Missions/Allies04Script.cs index 739ae8b7c2..2b89f9194d 100644 --- a/OpenRA.Mods.RA/Missions/Allies04Script.cs +++ b/OpenRA.Mods.RA/Missions/Allies04Script.cs @@ -508,7 +508,7 @@ namespace OpenRA.Mods.RA.Missions public IEnumerable ModifyRender(Actor self, WorldRenderer wr, IEnumerable r) { - return r.Select(a => a.WithPalette(Palette(hijackable.OldOwner))); + return r.Select(a => a.WithPalette(Palette(hijackable.OldOwner, wr))); } } diff --git a/OpenRA.Mods.RA/Render/RenderEditorOnly.cs b/OpenRA.Mods.RA/Render/RenderEditorOnly.cs index 9339f58d4c..4f2825fb8a 100644 --- a/OpenRA.Mods.RA/Render/RenderEditorOnly.cs +++ b/OpenRA.Mods.RA/Render/RenderEditorOnly.cs @@ -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 Render(Actor self) { return Nothing; } + public override IEnumerable Render(Actor self, WorldRenderer wr) { return Nothing; } } } diff --git a/OpenRA.Mods.RA/Render/RenderSpy.cs b/OpenRA.Mods.RA/Render/RenderSpy.cs index b281ac304e..2d5d6dab23 100755 --- a/OpenRA.Mods.RA/Render/RenderSpy.cs +++ b/OpenRA.Mods.RA/Render/RenderSpy.cs @@ -34,7 +34,7 @@ namespace OpenRA.Mods.RA.Render public IEnumerable ModifyRender(Actor self, WorldRenderer wr, IEnumerable 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) diff --git a/OpenRA.Mods.RA/Render/WithMuzzleFlash.cs b/OpenRA.Mods.RA/Render/WithMuzzleFlash.cs index 8b229a95d9..084b48156f 100644 --- a/OpenRA.Mods.RA/Render/WithMuzzleFlash.cs +++ b/OpenRA.Mods.RA/Render/WithMuzzleFlash.cs @@ -57,11 +57,11 @@ namespace OpenRA.Mods.RA.Render mf.Animation.PlayThen("muzzle", () => isShowing = false); } - public IEnumerable Render(Actor self) + public IEnumerable 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)