aboutsummaryrefslogtreecommitdiff
path: root/V3/UpdatesPerSecond.cs
blob: e180be1664f8172e9de6ad2be565a4a197fac148 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
using Microsoft.Xna.Framework;

namespace V3
{
    /// <summary>
    /// A class for telling when to do an update for events with a constant frequency.
    /// </summary>
    public sealed class UpdatesPerSecond
    {
        private double mTimeBetweenUpdates;
        private double mTimeSinceLastUpdate;

        /// <summary>
        /// Initializes class.
        /// </summary>
        /// <param name="frequency">How many updates should be done per second.</param>
        public UpdatesPerSecond(double frequency)
        {
            ChangeFrequency(frequency);
        }

        /// <summary>
        /// Change update frequency.
        /// </summary>
        /// <param name="frequency">How many updates should be done per second.</param>
        private void ChangeFrequency(double frequency)
        {
            mTimeBetweenUpdates = 1d / frequency;
        }

        /// <summary>
        /// Tells if it is time to do an update.
        /// </summary>
        /// <param name="gameTime">Current game time.</param>
        /// <returns></returns>
        public bool IsItTime(GameTime gameTime)
        {
            mTimeSinceLastUpdate += gameTime.ElapsedGameTime.TotalSeconds;
            if (mTimeSinceLastUpdate >= mTimeBetweenUpdates)
            {
                Reset();
                return true;
            }
            return false;
        }

        /// <summary>
        /// Reset internal timer for checking if update should be done.
        /// </summary>
        private void Reset()
        {
            mTimeSinceLastUpdate = 0;
        }
    }
}