Exemple #1
0
        private void FramerateIndependantLoop()
        {
            // update timer
            _time            = _gameTime = FP.GetTimer();
            FP._platformTime = (uint)_time - _platformTime;
            _updateTime      = _time;
            FP.Elapsed       = (_time - _last) / 1000.0f;
            if (FP.Elapsed > MaxElapsed)
            {
                FP.Elapsed = MaxElapsed;
            }
            FP.Elapsed *= FP.Timescale;
            _last       = _time;

            // update console
            if (FP.Console != null)
            {
                FP.Console.Update();
            }

            // update loop
            if (!Paused)
            {
                Update();
            }

            // update input
            Input.Update();

            // update timer
            _time          = _renderTime = FP.GetTimer();
            FP._updateTime = _time - _updateTime;

            // render loop
            if (!Paused)
            {
                Render();
            }

            // update timer
            _time          = _platformTime = FP.GetTimer();
            FP._renderTime = _time - _renderTime;
            FP._gameTime   = _time - _gameTime;
        }
Exemple #2
0
        private void Render()
        {
            var t = FP.GetTimer();

            if (_frameLast == 0)
            {
                _frameLast = t;
            }

            // render loop
            FP.Screen.Clear(ClearColor);
            if (FP._world.Visible)
            {
                var view = new View(FP.Screen.DefaultView);

                view.Rotation = -FP.Camera.Angle;
                view.Zoom(FP.Camera.Zoom);
                //	don't need to set the position

                FP.Screen.SetView(view);

                FP._world.Render();
            }

            FP.Console.Render();

            Draw.Render();

            FP.Screen.Display();

            // more timing stuff
            t = FP.GetTimer();
            _frameList.Add(t - _frameLast);
            _frameListSum += t - _frameLast;

            if (_frameList.Count > 10)
            {
                _frameListSum -= _frameList[0];
                _frameList.RemoveAt(0);
            }

            FP.Framerate = 1000 / ((float)_frameListSum / (float)_frameList.Count);
            _frameLast   = t;
        }
Exemple #3
0
        /// <summary>
        /// Engine constructor
        /// </summary>
        /// <param name="width">The width of your game.</param>
        /// <param name="height">The height of your game.</param>
        /// <param name="framerate">The game framerate, in frames per second (default 60).</param>
        public Engine(uint width, uint height, float framerate = 60)
        {
            //	Engine properties
            FP.Width        = width;
            FP.Height       = height;
            FP.Framerate    = framerate;
            FP.Fixed        = true;
            FP.TimeInFrames = false;

            //	Globals
            FP.Tweener = new Tweener();
            FP.Engine  = this;
            FP.Screen  = new RenderWindow(new VideoMode(FP.Width, FP.Height), "");
            FP._world  = new World();
            FP.Camera  = new Camera();
            FP.Console = new Punk.Debugging.Console();
            CheckWorld();

            FP.Screen.Clear();

            //	Random
            FP.RandomizeSeed();

            //	Timing
            FP.Timer = new Stopwatch();
            FP.Timer.Restart();
            FP._time     = (uint)FP.Timer.ElapsedMilliseconds;
            _frameList   = new List <uint>();
            FP.Timescale = 1;

            //	Window events
            FP.Screen.Closed      += new EventHandler(OnClosed);
            FP.Screen.GainedFocus += new EventHandler(OnFocusGained);
            FP.Screen.LostFocus   += new EventHandler(OnFocusLost);

            Library.LoadEmbeddedAssets();

            Input.Init();

            //	FIXME:	Currently only FixedFramerateLoop is hooked up.
            //	FIXME:	Framerate independent loops may not be possible without timer callbacks like Flash has.

            _rate = 1000.0f / FP.Framerate;

            Init();

            if (FP.Fixed)
            {
                _skip = _rate * (MaxFrameSkip + 1);
                _last = _prev = FP.GetTimer();

                while (FP.Screen.IsOpen())
                {
                    FP.Screen.DispatchEvents();
                    FP.Screen.SetTitle(Math.Round(1000.0f / (FP._gameTime)).ToString());


                    FixedFramerateLoop();
                }
            }
            else
            {
                _last = FP.GetTimer();

                while (FP.Screen.IsOpen())
                {
                    FP.Screen.DispatchEvents();

                    FramerateIndependantLoop();
                }
            }
        }
Exemple #4
0
        private void FixedFramerateLoop()
        {
            // update timer
            _time   = FP.GetTimer();
            _delta += (_time - _last);
            _last   = _time;

            // quit if a frame hasn't passed
            if (_delta < _rate)
            {
                return;
            }

            // update timer
            _gameTime        = _time;
            FP._platformTime = _time - _platformTime;

            // update console
            if (FP.Console != null)
            {
                FP.Console.Update();
            }

            // update loop
            if (_delta > _skip)
            {
                _delta = _skip;
            }
            while (_delta >= _rate)
            {
                FP.Elapsed = _rate * FP.Timescale * 0.001f;

                // update timer
                _updateTime = _time;
                _delta     -= _rate;
                _prev       = _time;

                // update loop
                if (!Paused)
                {
                    Update();
                }

                // update input
                Input.Update();

                // update timer
                _time          = FP.GetTimer();
                FP._updateTime = _time - _updateTime;
            }

            // update timer
            _renderTime = _time;

            // render loop
            if (!Paused)
            {
                Render();
            }

            FP.Console.Render();

            // update timer
            _time          = _platformTime = FP.GetTimer();
            FP._renderTime = _time - _renderTime;
            FP._gameTime   = _time - _gameTime;
        }