add Util.RunActivity, and have Actor.Tick use it. fix medic autoheal

This commit is contained in:
Bob
2010-11-14 18:36:36 +13:00
parent d152d21338
commit 80e897abfb
16 changed files with 59 additions and 57 deletions

View File

@@ -68,28 +68,12 @@ namespace OpenRA
public void Tick()
{
var wasIdle = currentActivity is Idle;
while (currentActivity != null)
{
var a = currentActivity;
var sw = new Stopwatch();
currentActivity = a.Tick(this) ?? new Idle();
var dt = sw.ElapsedTime();
if(dt > Game.Settings.Debug.LongTickThreshold)
Log.Write("perf", "[{2}] Activity: {0} ({1:0.000} ms)", a, dt * 1000, Game.LocalTick);
if (a == currentActivity) break;
var wasIdle = currentActivity is Idle;
currentActivity = Util.RunActivity( this, currentActivity ) ?? new Idle();
if (currentActivity is Idle)
{
if (!wasIdle)
foreach (var ni in TraitsImplementing<INotifyIdle>())
ni.Idle(this);
break;
}
}
if (currentActivity is Idle && !wasIdle)
foreach (var ni in TraitsImplementing<INotifyIdle>())
ni.Idle(this);
}
public bool IsIdle