Exemple #1
0
        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();
        }