diff --git a/OpenRA.Game/Graphics/WorldRenderer.cs b/OpenRA.Game/Graphics/WorldRenderer.cs index 2195bb7b24..c4a6c96679 100644 --- a/OpenRA.Game/Graphics/WorldRenderer.cs +++ b/OpenRA.Game/Graphics/WorldRenderer.cs @@ -37,7 +37,6 @@ namespace OpenRA.Graphics public Viewport Viewport { get; private set; } internal readonly TerrainRenderer terrainRenderer; - internal readonly ShroudRenderer shroudRenderer; internal readonly HardwarePalette palette; internal Cache palettes; Lazy devTrait; @@ -56,7 +55,6 @@ namespace OpenRA.Graphics Theater = new Theater(world.TileSet); terrainRenderer = new TerrainRenderer(world, this); - shroudRenderer = new ShroudRenderer(world); devTrait = Lazy.New(() => world.LocalPlayer != null ? world.LocalPlayer.PlayerActor.Trait() : null); } @@ -132,7 +130,9 @@ namespace OpenRA.Graphics world.OrderGenerator.RenderAfterWorld(this, world); var renderShroud = world.RenderPlayer != null ? world.RenderPlayer.Shroud : null; - shroudRenderer.Draw(this, renderShroud); + + foreach (var a in world.ActorsWithTrait()) + a.Trait.RenderShroud(this, renderShroud); if (devTrait.Value != null && devTrait.Value.ShowDebugGeometry) for (var i = 0; i < renderables.Count; i++) diff --git a/OpenRA.Game/OpenRA.Game.csproj b/OpenRA.Game/OpenRA.Game.csproj index 4830545e52..71489dd06d 100644 --- a/OpenRA.Game/OpenRA.Game.csproj +++ b/OpenRA.Game/OpenRA.Game.csproj @@ -110,7 +110,6 @@ - diff --git a/OpenRA.Game/Traits/TraitsInterfaces.cs b/OpenRA.Game/Traits/TraitsInterfaces.cs index d0447ab2f6..c95ef77b3f 100755 --- a/OpenRA.Game/Traits/TraitsInterfaces.cs +++ b/OpenRA.Game/Traits/TraitsInterfaces.cs @@ -191,6 +191,7 @@ namespace OpenRA.Traits public interface IBlocksBullets { } public interface IPostRender { void RenderAfterWorld(WorldRenderer wr, Actor self); } + public interface IRenderShroud { void RenderShroud(WorldRenderer wr, Shroud shroud); } public interface IPostRenderSelection { void RenderAfterWorld(WorldRenderer wr); } public interface IBodyOrientation diff --git a/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj b/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj index 224c878321..980c6a412b 100644 --- a/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj +++ b/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj @@ -482,6 +482,7 @@ + diff --git a/OpenRA.Game/Graphics/ShroudRenderer.cs b/OpenRA.Mods.RA/ShroudRenderer.cs similarity index 95% rename from OpenRA.Game/Graphics/ShroudRenderer.cs rename to OpenRA.Mods.RA/ShroudRenderer.cs index 66a1c0e418..966db7b62b 100644 --- a/OpenRA.Game/Graphics/ShroudRenderer.cs +++ b/OpenRA.Mods.RA/ShroudRenderer.cs @@ -10,10 +10,16 @@ using System.Drawing; using OpenRA.Traits; +using OpenRA.Graphics; -namespace OpenRA.Graphics +namespace OpenRA.Mods.RA { - public class ShroudRenderer + public class ShroudRendererInfo : ITraitInfo + { + public object Create(ActorInitializer init) { return new ShroudRenderer(init.world); } + } + + public class ShroudRenderer : IRenderShroud { World world; Map map; @@ -148,7 +154,7 @@ namespace OpenRA.Graphics } } - internal void Draw(WorldRenderer wr, Shroud shroud) + public void RenderShroud(WorldRenderer wr, Shroud shroud) { if (initializePalettes) { diff --git a/mods/cnc/rules/system.yaml b/mods/cnc/rules/system.yaml index b12ddf9188..9198f570b8 100644 --- a/mods/cnc/rules/system.yaml +++ b/mods/cnc/rules/system.yaml @@ -277,6 +277,7 @@ World: ShroudPalette@combined: Name: shroudfog Type: Combined + ShroudRenderer: Country@gdi: Name: GDI Race: gdi diff --git a/mods/d2k/rules/system.yaml b/mods/d2k/rules/system.yaml index 7b4a68f1ae..36356f78c1 100644 --- a/mods/d2k/rules/system.yaml +++ b/mods/d2k/rules/system.yaml @@ -429,6 +429,7 @@ World: ShroudPalette@combined: Name: shroudfog Type: Combined + ShroudRenderer: Country@Atreides: Name: Atreides Race: atreides diff --git a/mods/ra/rules/system.yaml b/mods/ra/rules/system.yaml index 2e3af5b920..d18cbb0b48 100644 --- a/mods/ra/rules/system.yaml +++ b/mods/ra/rules/system.yaml @@ -620,6 +620,7 @@ World: ShroudPalette@combined: Name: shroudfog Type: Combined + ShroudRenderer: Country@0: Name: Allies Race: allies diff --git a/mods/ts/rules/system.yaml b/mods/ts/rules/system.yaml index cc14e72d5e..1116eb43c5 100644 --- a/mods/ts/rules/system.yaml +++ b/mods/ts/rules/system.yaml @@ -105,6 +105,7 @@ World: ShroudPalette@combined: Name: shroudfog Type: Combined + ShroudRenderer: VoxelNormalsPalette@normals: Name: normals Type: TiberianSun