public void ExecuteQueue ( GameTime gameTime, CommandAffinity affinity, bool forceDelayed = false )
{
var delta = (int)gameTime.Elapsed.TotalMilliseconds;
lock (lockObject) {
delayed.Clear();
while (queue.Any()) {
var cmd = queue.Dequeue();
if ( cmd.Affinity == affinity ) {
if ( cmd.Delay<=0 || forceDelayed ) {
// execute :
cmd.Execute();
if (cmd.Result!=null) {
Log.Message( "// Result: {0} //", cmd.GetStringResult() );
}
// push to history :
if (!cmd.NoRollback && cmd.Affinity==CommandAffinity.Default) {
history.Push( cmd );
}
} else {
cmd.Delay -= delta;
delayed.Enqueue( cmd );
}
} else {
delayed.Enqueue( cmd );
}
}
Misc.Swap( ref delayed, ref queue );
}
}