Merge pull request #7281 from RoosterDragon/cache-render-traits

Cache render related TraitsImplementing calls in Actor.
This commit is contained in:
Chris Forbes
2015-01-08 14:13:11 +13:00

View File

@@ -65,6 +65,9 @@ namespace OpenRA
} }
} }
readonly IEnumerable<IRenderModifier> traitsImplementingRenderModifier;
readonly IEnumerable<IRender> traitsImplementingRender;
internal Actor(World world, string name, TypeDictionary initDict) internal Actor(World world, string name, TypeDictionary initDict)
{ {
var init = new ActorInitializer(this, initDict); var init = new ActorInitializer(this, initDict);
@@ -104,6 +107,9 @@ namespace OpenRA
return new Rectangle(offset.X, offset.Y, size.X, size.Y); return new Rectangle(offset.X, offset.Y, size.X, size.Y);
}); });
traitsImplementingRenderModifier = TraitsImplementing<IRenderModifier>();
traitsImplementingRender = TraitsImplementing<IRender>();
} }
public void Tick() public void Tick()
@@ -119,14 +125,14 @@ namespace OpenRA
public IEnumerable<IRenderable> Render(WorldRenderer wr) public IEnumerable<IRenderable> Render(WorldRenderer wr)
{ {
var renderables = Renderables(wr); var renderables = Renderables(wr);
foreach (var modifier in TraitsImplementing<IRenderModifier>()) foreach (var modifier in traitsImplementingRenderModifier)
renderables = modifier.ModifyRender(this, wr, renderables); renderables = modifier.ModifyRender(this, wr, renderables);
return renderables; return renderables;
} }
IEnumerable<IRenderable> Renderables(WorldRenderer wr) IEnumerable<IRenderable> Renderables(WorldRenderer wr)
{ {
foreach (var render in TraitsImplementing<IRender>()) foreach (var render in traitsImplementingRender)
foreach (var renderable in render.Render(this, wr)) foreach (var renderable in render.Render(this, wr))
yield return renderable; yield return renderable;
} }