Add IRenderModifier.ModifyScreenBounds to support WithShadow.

This commit is contained in:
Paul Chote
2017-12-09 19:04:34 +00:00
committed by reaperrr
parent 86bfe28ade
commit fa65fef4d1
7 changed files with 55 additions and 3 deletions

View File

@@ -10,6 +10,7 @@
#endregion
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using OpenRA.Graphics;
using OpenRA.Traits;
@@ -40,7 +41,7 @@ namespace OpenRA.Mods.Common.Traits.Render
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)
return r;
@@ -55,5 +56,19 @@ namespace OpenRA.Mods.Common.Traits.Render
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);
}
}
}