Use HashSet instead of IEnumerable to pass actors to renderable lists

This commit is contained in:
reaperrr
2017-11-18 23:37:07 +01:00
committed by RoosterDragon
parent 04fb0f209d
commit fbc18dfb18

View File

@@ -100,7 +100,7 @@ namespace OpenRA.Graphics
palettes[name].Palette = pal; palettes[name].Palette = pal;
} }
List<IFinalizedRenderable> GenerateRenderables(IEnumerable<Actor> actorsInBox) List<IFinalizedRenderable> GenerateRenderables(HashSet<Actor> actorsInBox)
{ {
var actors = actorsInBox.Append(World.WorldActor); var actors = actorsInBox.Append(World.WorldActor);
if (World.RenderPlayer != null) if (World.RenderPlayer != null)
@@ -126,7 +126,7 @@ namespace OpenRA.Graphics
return renderables; return renderables;
} }
List<IFinalizedRenderable> GenerateOverlayRenderables(IEnumerable<Actor> actorsInBox) List<IFinalizedRenderable> GenerateOverlayRenderables(HashSet<Actor> actorsInBox)
{ {
var aboveShroud = World.ActorsWithTrait<IRenderAboveShroud>() var aboveShroud = World.ActorsWithTrait<IRenderAboveShroud>()
.Where(a => a.Actor.IsInWorld && !a.Actor.Disposed && (!a.Trait.SpatiallyPartitionable || actorsInBox.Contains(a.Actor))) .Where(a => a.Actor.IsInWorld && !a.Actor.Disposed && (!a.Trait.SpatiallyPartitionable || actorsInBox.Contains(a.Actor)))
@@ -171,7 +171,7 @@ namespace OpenRA.Graphics
RefreshPalette(); RefreshPalette();
var onScreenActors = World.ScreenMap.RenderableActorsInBox(Viewport.TopLeft, Viewport.BottomRight); var onScreenActors = World.ScreenMap.RenderableActorsInBox(Viewport.TopLeft, Viewport.BottomRight).ToHashSet();
var renderables = GenerateRenderables(onScreenActors); var renderables = GenerateRenderables(onScreenActors);
var bounds = Viewport.GetScissorBounds(World.Type != WorldType.Editor); var bounds = Viewport.GetScissorBounds(World.Type != WorldType.Editor);
Game.Renderer.EnableScissor(bounds); Game.Renderer.EnableScissor(bounds);