Cache render related TraitsImplementing calls in Actor.
The TraitsImplementing<T> performs a dictionary lookup to match up its generic type parameter with the right trait collection. Since actors are rendered so much, it is useful to cache this result to avoid looking it up repeatedly.
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user