public static void Run( ILauncher launcher, Node mainNode, Action initializeEvent = null, params object [] args ) { IWindow window = null; IGraphicsDevice graphicsDevice = null; IAudioDevice audioDevice = null; Launcher = launcher; try { launcher.LauncherInitialize ( out window, out graphicsDevice, out audioDevice ); } catch ( Exception e ) { if ( !SkipInitializeException ) throw new Exception ( "Initialization Exception", e ); } Window = window; GraphicsDevice = graphicsDevice; AudioDevice = audioDevice; if ( initializeEvent != null ) initializeEvent (); MainNode = mainNode; TimeSpan elapsedUpdateTimeStep = new TimeSpan (), elapsedDrawTimeStep = new TimeSpan (); TimeSpan lastUpdateTimeStep = TimeSpan.FromMilliseconds ( Environment.TickCount ), lastDrawTimeStep = TimeSpan.FromMilliseconds ( Environment.TickCount ); GameTime updateGameTime = new GameTime (), drawGameTime = new GameTime (); launcher.LauncherRun ( new LauncherArgument () { Initialize = () => { if ( mainNode != null ) mainNode.Intro ( args ); }, UpdateLogic = () => { if ( elapsedUpdateTimeStep >= FixedUpdateTimeStep || FixedUpdateTimeStep.TotalMilliseconds == 0 ) { updateGameTime.Update (); if ( mainNode != null ) mainNode.Update ( updateGameTime ); elapsedUpdateTimeStep -= FixedUpdateTimeStep; } else { TimeSpan temp = TimeSpan.FromMilliseconds ( Environment.TickCount ); elapsedUpdateTimeStep += ( temp - lastUpdateTimeStep ); lastUpdateTimeStep = temp; } }, DrawLogic = () => { if ( LiqueurSystem.AudioDevice != null ) LiqueurSystem.AudioDevice.Update (); if ( elapsedDrawTimeStep >= FixedDrawTimeStep || FixedDrawTimeStep.TotalMilliseconds == 0 ) { drawGameTime.Update (); if ( mainNode != null ) mainNode.Draw ( drawGameTime ); LiqueurSystem.GraphicsDevice.SwapBuffer (); elapsedDrawTimeStep -= FixedDrawTimeStep; } else { TimeSpan temp = TimeSpan.FromMilliseconds ( Environment.TickCount ); elapsedDrawTimeStep += ( temp - lastDrawTimeStep ); lastDrawTimeStep = temp; } }, Resize = () => { if ( mainNode != null && mainNode is IWindowEvent ) ( mainNode as IWindowEvent ).WindowResize (); }, Activated = () => { if ( mainNode != null && mainNode is IWindowEvent ) ( mainNode as IWindowEvent ).WindowActivated (); }, Deactivated = () => { if ( mainNode != null && mainNode is IWindowEvent ) ( mainNode as IWindowEvent ).WindowDeactivated (); } } ); }