loop all orders only once

This commit is contained in:
Matthias Mailänder
2013-11-02 23:12:39 +01:00
parent 6b0238a6cc
commit 21b7d0eadb

View File

@@ -138,22 +138,27 @@ namespace OpenRA.Widgets
var pos = worldRenderer.Position(xy);
var orders = world.OrderGenerator.Order(world, pos.ToCPos(), mi).ToArray();
orders.Do(o => world.IssueOrder(o));
world.PlayVoiceForOrders(orders);
var flashed = false;
foreach (var o in orders)
{
if (o.TargetActor != null)
if (!flashed)
{
world.Add(new FlashTarget(o.TargetActor));
break;
}
else if (o.Subject != world.LocalPlayer.PlayerActor && o.TargetLocation != CPos.Zero)
{
world.Add(new MoveFlash(worldRenderer.Position(worldRenderer.Viewport.ViewToWorldPx(mi.Location)), world));
break;
if (o.TargetActor != null)
{
world.AddFrameEndTask(w => w.Add(new FlashTarget(o.TargetActor)));
flashed = true;
}
else if (o.Subject != world.LocalPlayer.PlayerActor && o.TargetLocation != CPos.Zero) // TODO: this filters building placement, but also suppport powers :(
{
world.AddFrameEndTask(w => w.Add(new MoveFlash(worldRenderer.Position(worldRenderer.Viewport.ViewToWorldPx(mi.Location)), world)));
flashed = true;
}
}
world.IssueOrder(o);
}
}