Add ScreenBounds method to IRender interface.
This method is expected to return Rectangles that cover the region where Renderables returned by Render may exist.
This commit is contained in:
@@ -11,6 +11,7 @@
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using OpenRA.Graphics;
|
||||
using OpenRA.Mods.Common.Graphics;
|
||||
@@ -154,7 +155,7 @@ namespace OpenRA.Mods.Common.Traits.Render
|
||||
shadow.Tick();
|
||||
}
|
||||
|
||||
public IEnumerable<IRenderable> Render(Actor self, WorldRenderer wr)
|
||||
IEnumerable<IRenderable> IRender.Render(Actor self, WorldRenderer wr)
|
||||
{
|
||||
if (info.ShadowImage == null)
|
||||
return Enumerable.Empty<IRenderable>();
|
||||
@@ -170,5 +171,21 @@ namespace OpenRA.Mods.Common.Traits.Render
|
||||
var palette = wr.Palette(info.ShadowPalette);
|
||||
return new IRenderable[] { new SpriteRenderable(shadow.Image, pos, info.ShadowOffset, info.ShadowZOffset, palette, 1, true) };
|
||||
}
|
||||
|
||||
IEnumerable<Rectangle> IRender.ScreenBounds(Actor self, WorldRenderer wr)
|
||||
{
|
||||
if (info.ShadowImage == null)
|
||||
return Enumerable.Empty<Rectangle>();
|
||||
|
||||
if (IsTraitDisabled || self.IsDead || !self.IsInWorld)
|
||||
return Enumerable.Empty<Rectangle>();
|
||||
|
||||
if (self.World.FogObscures(self))
|
||||
return Enumerable.Empty<Rectangle>();
|
||||
|
||||
var dat = self.World.Map.DistanceAboveTerrain(self.CenterPosition);
|
||||
var pos = self.CenterPosition - new WVec(0, 0, dat.Length);
|
||||
return new Rectangle[] { shadow.ScreenBounds(wr, pos, info.ShadowOffset, 1) };
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user