Add IRenderModifier.ModifyScreenBounds to support WithShadow.
This commit is contained in:
@@ -254,7 +254,15 @@ namespace OpenRA.Traits
|
|||||||
IEnumerable<Actor> ActorsInBox(WPos a, WPos b);
|
IEnumerable<Actor> ActorsInBox(WPos a, WPos b);
|
||||||
}
|
}
|
||||||
|
|
||||||
public interface IRenderModifier { IEnumerable<IRenderable> ModifyRender(Actor self, WorldRenderer wr, IEnumerable<IRenderable> r); }
|
public interface IRenderModifier
|
||||||
|
{
|
||||||
|
IEnumerable<IRenderable> ModifyRender(Actor self, WorldRenderer wr, IEnumerable<IRenderable> r);
|
||||||
|
|
||||||
|
// HACK: This is here to support the WithShadow trait.
|
||||||
|
// That trait should be rewritten using standard techniques, and then this interface method removed
|
||||||
|
IEnumerable<Rectangle> ModifyScreenBounds(Actor self, WorldRenderer wr, IEnumerable<Rectangle> r);
|
||||||
|
}
|
||||||
|
|
||||||
public interface ILoadsPalettes { void LoadPalettes(WorldRenderer wr); }
|
public interface ILoadsPalettes { void LoadPalettes(WorldRenderer wr); }
|
||||||
public interface ILoadsPlayerPalettes { void LoadPlayerPalettes(WorldRenderer wr, string playerName, HSLColor playerColor, bool replaceExisting); }
|
public interface ILoadsPlayerPalettes { void LoadPlayerPalettes(WorldRenderer wr, string playerName, HSLColor playerColor, bool replaceExisting); }
|
||||||
public interface IPaletteModifier { void AdjustPalette(IReadOnlyDictionary<string, MutablePalette> b); }
|
public interface IPaletteModifier { void AdjustPalette(IReadOnlyDictionary<string, MutablePalette> b); }
|
||||||
|
|||||||
@@ -137,6 +137,11 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
return SpriteRenderable.None;
|
return SpriteRenderable.None;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
IEnumerable<Rectangle> IRenderModifier.ModifyScreenBounds(Actor self, WorldRenderer wr, IEnumerable<Rectangle> bounds)
|
||||||
|
{
|
||||||
|
return bounds;
|
||||||
|
}
|
||||||
|
|
||||||
void ITick.Tick(Actor self)
|
void ITick.Tick(Actor self)
|
||||||
{
|
{
|
||||||
if (!IsTraitDisabled)
|
if (!IsTraitDisabled)
|
||||||
|
|||||||
@@ -10,6 +10,7 @@
|
|||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Drawing;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using OpenRA.Graphics;
|
using OpenRA.Graphics;
|
||||||
using OpenRA.Primitives;
|
using OpenRA.Primitives;
|
||||||
@@ -148,6 +149,11 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
{
|
{
|
||||||
return IsVisible(self, self.World.RenderPlayer) || isRendering ? r : SpriteRenderable.None;
|
return IsVisible(self, self.World.RenderPlayer) || isRendering ? r : SpriteRenderable.None;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
IEnumerable<Rectangle> IRenderModifier.ModifyScreenBounds(Actor self, WorldRenderer wr, IEnumerable<Rectangle> bounds)
|
||||||
|
{
|
||||||
|
return bounds;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class HiddenUnderFogInit : IActorInit { }
|
public class HiddenUnderFogInit : IActorInit { }
|
||||||
|
|||||||
@@ -10,6 +10,7 @@
|
|||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Drawing;
|
||||||
using OpenRA.Graphics;
|
using OpenRA.Graphics;
|
||||||
using OpenRA.Traits;
|
using OpenRA.Traits;
|
||||||
|
|
||||||
@@ -58,9 +59,14 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
return Info.AlwaysVisibleStances.HasStance(stance) || IsVisibleInner(self, byPlayer);
|
return Info.AlwaysVisibleStances.HasStance(stance) || IsVisibleInner(self, byPlayer);
|
||||||
}
|
}
|
||||||
|
|
||||||
public IEnumerable<IRenderable> ModifyRender(Actor self, WorldRenderer wr, IEnumerable<IRenderable> r)
|
IEnumerable<IRenderable> IRenderModifier.ModifyRender(Actor self, WorldRenderer wr, IEnumerable<IRenderable> r)
|
||||||
{
|
{
|
||||||
return IsVisible(self, self.World.RenderPlayer) ? r : SpriteRenderable.None;
|
return IsVisible(self, self.World.RenderPlayer) ? r : SpriteRenderable.None;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
IEnumerable<Rectangle> IRenderModifier.ModifyScreenBounds(Actor self, WorldRenderer wr, IEnumerable<Rectangle> bounds)
|
||||||
|
{
|
||||||
|
return bounds;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,6 +10,7 @@
|
|||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Drawing;
|
||||||
using OpenRA.Graphics;
|
using OpenRA.Graphics;
|
||||||
using OpenRA.Traits;
|
using OpenRA.Traits;
|
||||||
|
|
||||||
@@ -49,5 +50,10 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
.AsDecoration();
|
.AsDecoration();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
IEnumerable<Rectangle> IRenderModifier.ModifyScreenBounds(Actor self, WorldRenderer wr, IEnumerable<Rectangle> bounds)
|
||||||
|
{
|
||||||
|
return bounds;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -11,6 +11,7 @@
|
|||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Drawing;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using OpenRA.Graphics;
|
using OpenRA.Graphics;
|
||||||
using OpenRA.Traits;
|
using OpenRA.Traits;
|
||||||
@@ -50,5 +51,10 @@ namespace OpenRA.Mods.Common.Traits.Render
|
|||||||
|
|
||||||
return r.Select(a => a.OffsetBy(worldVisualOffset));
|
return r.Select(a => a.OffsetBy(worldVisualOffset));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
IEnumerable<Rectangle> IRenderModifier.ModifyScreenBounds(Actor self, WorldRenderer wr, IEnumerable<Rectangle> bounds)
|
||||||
|
{
|
||||||
|
return bounds;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,6 +10,7 @@
|
|||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Drawing;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using OpenRA.Graphics;
|
using OpenRA.Graphics;
|
||||||
using OpenRA.Traits;
|
using OpenRA.Traits;
|
||||||
@@ -40,7 +41,7 @@ namespace OpenRA.Mods.Common.Traits.Render
|
|||||||
this.info = info;
|
this.info = info;
|
||||||
}
|
}
|
||||||
|
|
||||||
public IEnumerable<IRenderable> ModifyRender(Actor self, WorldRenderer wr, IEnumerable<IRenderable> r)
|
IEnumerable<IRenderable> IRenderModifier.ModifyRender(Actor self, WorldRenderer wr, IEnumerable<IRenderable> r)
|
||||||
{
|
{
|
||||||
if (IsTraitDisabled)
|
if (IsTraitDisabled)
|
||||||
return r;
|
return r;
|
||||||
@@ -55,5 +56,19 @@ namespace OpenRA.Mods.Common.Traits.Render
|
|||||||
|
|
||||||
return shadowSprites.Concat(r);
|
return shadowSprites.Concat(r);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
IEnumerable<Rectangle> IRenderModifier.ModifyScreenBounds(Actor self, WorldRenderer wr, IEnumerable<Rectangle> bounds)
|
||||||
|
{
|
||||||
|
foreach (var r in bounds)
|
||||||
|
yield return r;
|
||||||
|
|
||||||
|
if (IsTraitDisabled)
|
||||||
|
yield break;
|
||||||
|
|
||||||
|
var height = self.World.Map.DistanceAboveTerrain(self.CenterPosition).Length;
|
||||||
|
var offset = wr.ScreenPxOffset(info.Offset - new WVec(0, 0, height));
|
||||||
|
foreach (var r in bounds)
|
||||||
|
yield return new Rectangle(r.X + offset.X, r.Y + offset.Y, r.Width, r.Height);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user