Merge pull request #10120 from RoosterDragon/gps-dot-perf

Fix broken GPS and frozen actor behaviour
This commit is contained in:
Oliver Brakmann
2015-12-13 18:28:12 +01:00
4 changed files with 77 additions and 45 deletions

View File

@@ -42,8 +42,11 @@ namespace OpenRA.Traits
public bool Visible = true;
public bool Shrouded { get; private set; }
public bool NeedRenderables { get; private set; }
public bool IsRendering { get; private set; }
public bool NeedRenderables { get; set; }
public IRenderable[] Renderables = NoRenderables;
static readonly IRenderable[] NoRenderables = new IRenderable[0];
int flashTicks;
public FrozenActor(Actor self, PPos[] footprint, Shroud shroud, bool startsRevealed)
{
@@ -69,11 +72,6 @@ namespace OpenRA.Traits
public ActorInfo Info { get { return actor.Info; } }
public Actor Actor { get { return !actor.IsDead ? actor : null; } }
static readonly IRenderable[] NoRenderables = new IRenderable[0];
int flashTicks;
IRenderable[] renderables = NoRenderables;
public void Tick()
{
UpdateVisibility();
@@ -103,8 +101,7 @@ namespace OpenRA.Traits
Shrouded = false;
}
if (Visible && !wasVisible)
NeedRenderables = true;
NeedRenderables = Visible && !wasVisible;
}
public void Flash()
@@ -114,31 +111,20 @@ namespace OpenRA.Traits
public IEnumerable<IRenderable> Render(WorldRenderer wr)
{
if (NeedRenderables)
{
NeedRenderables = false;
if (!actor.Disposed)
{
IsRendering = true;
renderables = actor.Render(wr).ToArray();
IsRendering = false;
}
}
if (Shrouded)
return NoRenderables;
if (flashTicks > 0 && flashTicks % 2 == 0)
{
var highlight = wr.Palette("highlight");
return renderables.Concat(renderables.Where(r => !r.IsDecoration)
return Renderables.Concat(Renderables.Where(r => !r.IsDecoration)
.Select(r => r.WithPalette(highlight)));
}
return renderables;
return Renderables;
}
public bool HasRenderables { get { return !Shrouded && renderables.Any(); } }
public bool HasRenderables { get { return !Shrouded && Renderables.Any(); } }
public bool ShouldBeRemoved(Player owner)
{