protected override void OnRenderFrame(FrameEventArgs e) { long now = gameTime.ElapsedMilliseconds; int dt = (int)(now - lastUpdate); double frameFraction = Math.Min(1.0, (double)dt / 50.0); g.NextGraphicFrame(dt); // Setup camera, centered on the target (instead of the target being at the bottom- // left). There are some constraints to prevent the camera from scrolling off the // background; they make it stop just short of doing so. // XXX: These hardcoded values should be taken from the level map, // somehow... const int xCenterOffset = 16; const int yCenterOffset = 12; Vector2d CameraTarget = g.Camera.Target; CameraTarget.X = Misc.Clamp(CameraTarget.X, xCenterOffset, g.GetLevel().Width - xCenterOffset - 1); CameraTarget.Y = Misc.Clamp(CameraTarget.Y, yCenterOffset, g.GetLevel().Height - yCenterOffset - 1); Graphics.StartDraw(CameraTarget); // Draw background Vector2d MapOffset = new Vector2d(-xCenterOffset, -yCenterOffset); Vector2d MapPoint = Vector2d.Add(CameraTarget, MapOffset); //Console.WriteLine("MapPoint: {0}, {1}", MapPoint.X, MapPoint.Y); g.Levels[g.CurrentLevel].Draw(MapPoint); // Draw actual objects foreach (IGameObj o in g.Objs) { o.Draw(frameFraction); } foreach (Particle p in g.Particles) { p.Draw(frameFraction); } //gui.Draw(g); SwapBuffers(); }