//constructor /// <summary> /// A physical window that displays on the screen. This is where all DisplayObjects will live when drawn to the screen. You may have multiple windows. /// </summary> /// <param name="width">The window's width.</param> /// <param name="height">The window's height.</param> /// <param name="title">The window's title.</param> /// <param name="style">Any style flags to apply to the window.</param> /// <param name="vSync">(optional) Whether or not this window syncs its rendering to the refresh rate of the monitor.</param> /// <param name="synchronous">(optional) Whether or not the window's update() and draw() calls will be handled by the main GameEngine (ture) or itself (false).</param> /// <param name="antiAliasing">(optional) The amount of AntiAliasing to use. More = slower but lexx pixelated.</param> public Window(double width, double height, string title, WindowStyle style, bool vSync = true, bool synchronous = true, uint antiAliasing = 16) { if (double.IsNaN(width)) { throw new ArgumentNullException("width"); } if (double.IsInfinity(width) || width < 1.0d) { throw new InvalidOperationException("width cannot be less than 1 or infinity."); } if (double.IsNaN(height)) { throw new ArgumentNullException("height"); } if (double.IsInfinity(height) || height < 1.0d) { throw new InvalidOperationException("height cannot be less than 1 or infinity."); } window = new RenderWindow(new VideoMode((uint)width, (uint)height), title, (Styles)style, new ContextSettings(24, 8, antiAliasing)); styles = style; _fullscreen = ((style & WindowStyle.Fullscreen) != WindowStyle.None) ? true : false; _title = title; previousVsync = _vSync = vSync; previousSynchronous = _synchronous = synchronous; previousAntialiasing = _antiAliasing = antiAliasing; _icon = TextureUtil.FromBitmap(new System.Drawing.Bitmap(1, 1)); window.SetIcon(_icon.Size.X, _icon.Size.Y, TextureUtil.ToBytes(_icon)); window.Closed += onClosed; window.Resized += onResize; window.GainedFocus += onFocused; window.KeyPressed += onKeyDown; window.KeyReleased += onKeyUp; window.MouseMoved += onMouseMove; window.MouseWheelScrolled += onMouseWheel; window.MouseButtonPressed += onMouseDown; window.MouseButtonReleased += onMouseUp; window.SetVerticalSyncEnabled(vSync); IntRect vp = window.GetViewport(window.GetView()); viewport.Width = (double)vp.Width; viewport.Height = (double)vp.Height; _quadTree = new QuadTree <DisplayObject>(new PreciseRectangle(0.0d, 0.0d, viewport.Width, viewport.Height)); int processors = Environment.ProcessorCount; if (processors >= 4) { drawTimer.ProcessorNumber = processors - 3; updateTimer.ProcessorNumber = processors - 2; } else if (processors >= 2) { drawTimer.ProcessorNumber = 1; updateTimer.ProcessorNumber = 1; } updateTimer.Elapsed += onUpdateTimer; updateTimer.AutoReset = true; drawTimer.Elapsed += onDrawTimer; drawTimer.AutoReset = true; window.SetActive(false); _physicsWorld = physicsEngine.CreateWorld(); inputEngine.AddWindow(this); gameEngine.AddWindow(this); Start.AddWindow(this); if (!synchronous) { updateTimer.Start(); drawTimer.Start(); } }