private void Execute(BBMacro macro, out BBLoopAction action) { action = BBLoopAction.Continue; switch (macro.macroType) { case BBMacroType.If: BBIfMacro ifmacro = macro as BBIfMacro; BBMacro future = null; if (ifmacro.Test(out future)) { BBMacroPlayer inserted = new BBMacroPlayer(mConfig, mModuleProxy); inserted.Set(future); inserted.Play(); mInterrupts.Add(inserted); } else { action = ifmacro.action; } break; case BBMacroType.Series: BBSeriesMacro srmacro = macro as BBSeriesMacro; foreach (BBMacro item in srmacro.items) { BBMacroPlayer inserted = new BBMacroPlayer(mConfig, mModuleProxy); inserted.Set(item); mSeriesQueue.Enqueue(inserted); } break; case BBMacroType.Parallel: BBParallelMacro prmacro = macro as BBParallelMacro; foreach (BBMacro item in prmacro.items) { BBMacroPlayer inserted = new BBMacroPlayer(mConfig, mModuleProxy); inserted.Set(item); inserted.Play(); mInterrupts.Add(inserted); } break; default: mEmulator.Set(Expand(macro)); break; } }