예제 #1
0
        public void Tick(object sender, EventArgs e)
        {
            TimeSpan currentTime = stopWatch.Elapsed;
            TimeSpan elapsedTime = currentTime - lastTime;

            lastTime = currentTime;

            if (elapsedTime > MaxElapsedTime)
            {
                elapsedTime = MaxElapsedTime;
            }

            accumulatedTime += elapsedTime;

            bool updated = false;

            while (accumulatedTime >= TargetElapsedTime)
            {
                TurnsPerSecond = FrameUtil.CalculateRatePerSecond();

                TakeTurn();

                accumulatedTime -= TargetElapsedTime;
                updated          = true;
            }

            if (updated)
            {
                Thread.Sleep(10);

                InvalidateNeeded?.Invoke(this, EventArgs.Empty);
            }
        }
예제 #2
0
        public void CalculateFrameRateTest()
        {
            int i = 0;
            int currentFrameRate = 0;

            Console.WriteLine("Running frame rate test 1, this takes 10 seconds...");
            while (i < 100)
            {
                currentFrameRate = FrameUtil.CalculateRatePerSecond();
                System.Threading.Thread.Sleep(100); //simulate rendering
                i++;
            }

            //frame rate should be 10, might be +-5
            Assert.Greater(currentFrameRate, 5);
            Assert.Less(currentFrameRate, 15);


            i = 0;
            currentFrameRate = 0;
            Console.WriteLine("Running frame rate test 2, this takes 10 seconds...");
            while (i < 1000)
            {
                currentFrameRate = FrameUtil.CalculateRatePerSecond();
                System.Threading.Thread.Sleep(10); //simulate rendering
                i++;
            }

            //frame rate should be 100, might be +- 50
            Assert.Greater(currentFrameRate, 50);
            Assert.Less(currentFrameRate, 150);
        }
예제 #3
0
        protected override void OnPaint(PaintEventArgs e)
        {
            statusLabel.Text = string.Format("FPS: {0} TPS: {1}", FrameUtil.CalculateRatePerSecond(), _game.TurnsPerSecond);

            _game.Render(e.Graphics);
        }