public void Run(IGame game) { if (_game != null) throw new InvalidOperationException("A game is already running."); if (_device == null) throw new InvalidOperationException("Setup must be called before Run."); Current = this; Show(); _game = game; try { var sw = Stopwatch.StartNew(); _game.Setup(_device, this); while (_game != null) { Application.DoEvents(); if (!IsDeviceLost()) { var deltaTime = sw.Elapsed; sw.Restart(); if (game.Process(_device, deltaTime)) game.Paint(_device); else { Close(); break; } } } } catch { Close(); throw; } game.ShutDown(_device); Current = null; }
public void Setup(IHost host, IGame game) { IsDebugEnabled = true; _host = host; _game = game; _host.SetGameCore(this); _game.Setup(); // Create assets var drawables = _game.Entities.Cast<Entity>().Where(e => e.IsDrawable).OrderBy(d => d.ZIndex).Cast<IDrawable>().ToList(); drawables.ForEach(d => { _host.GraphicsProvider.RegisterImageResource(d.ResourceUrl, d.ResourceUrl); _host.GraphicsProvider.LoadImageResource(d.ResourceUrl); }); }