Calculate actor preview bounds directly.

This commit is contained in:
Paul Chote
2017-12-22 18:12:55 +00:00
committed by RoosterDragon
parent 7bf3d5d7f6
commit 2794b14f52
2 changed files with 6 additions and 11 deletions

View File

@@ -80,15 +80,13 @@ namespace OpenRA.Mods.Common.Traits
// Bounds are fixed from the initial render. // Bounds are fixed from the initial render.
// If this is a problem, then we may need to fetch the area from somewhere else // If this is a problem, then we may need to fetch the area from somewhere else
var r = previews var r = previews.SelectMany(p => p.ScreenBounds(worldRenderer, CenterPosition));
.SelectMany(p => p.Render(worldRenderer, CenterPosition))
.Select(rr => rr.PrepareRender(worldRenderer));
if (r.Any()) if (r.Any())
{ {
Bounds = r.First().ScreenBounds(worldRenderer); Bounds = r.First();
foreach (var rr in r.Skip(1)) foreach (var rr in r.Skip(1))
Bounds = Rectangle.Union(Bounds, rr.ScreenBounds(worldRenderer)); Bounds = Rectangle.Union(Bounds, rr);
} }
} }

View File

@@ -57,16 +57,13 @@ namespace OpenRA.Mods.Common.Widgets
PreviewOffset = int2.Zero; PreviewOffset = int2.Zero;
IdealPreviewSize = int2.Zero; IdealPreviewSize = int2.Zero;
var r = preview var r = preview.SelectMany(p => p.ScreenBounds(worldRenderer, WPos.Zero));
.SelectMany(p => p.Render(worldRenderer, WPos.Zero))
.OrderBy(WorldRenderer.RenderableScreenZPositionComparisonKey)
.Select(rr => rr.PrepareRender(worldRenderer));
if (r.Any()) if (r.Any())
{ {
var b = r.First().ScreenBounds(worldRenderer); var b = r.First();
foreach (var rr in r.Skip(1)) foreach (var rr in r.Skip(1))
b = Rectangle.Union(b, rr.ScreenBounds(worldRenderer)); b = Rectangle.Union(b, rr);
IdealPreviewSize = new int2(b.Width, b.Height); IdealPreviewSize = new int2(b.Width, b.Height);
PreviewOffset = -new int2(b.Left, b.Top) - IdealPreviewSize / 2; PreviewOffset = -new int2(b.Left, b.Top) - IdealPreviewSize / 2;