public PrecisionTimer()
        {
            //how many ticks per sec do we get
            QueryPerformanceWrapper.QueryPerformanceFrequency(out _perfCountFreq);

            _timeScale = 1.0 / _perfCountFreq;
        }
        //only use this after a call to ReadyForNextFrame.
        public double TimeElapsed()
        {
            _lastTimeElapsed = _timeElapsed;


            QueryPerformanceWrapper.QueryPerformanceCounter(out _currentTime);

            _timeElapsed = (_currentTime - _lastTimeInTimeElapsed) * _timeScale;

            _lastTimeInTimeElapsed = _currentTime;


            if (_smoothUpdates)
            {
                if (_timeElapsed < (_lastTimeElapsed * Smoothness))
                {
                    return(_timeElapsed);
                }

                else
                {
                    return(0.0);
                }
            }

            else
            {
                return(_timeElapsed);
            }
        }
        public PrecisionTimer(double fps)
        {
            _normalFPS = fps;

            //how many ticks per sec do we get
            QueryPerformanceWrapper.QueryPerformanceFrequency(out _perfCountFreq);

            _timeScale = 1.0 / _perfCountFreq;

            //calculate ticks per frame
            _frameTime = (long)(_perfCountFreq / _normalFPS);
        }
        public void Start()
        {
            _started = true;

            _timeElapsed = 0.0;

            //get the time
            QueryPerformanceWrapper.QueryPerformanceCounter(out _lastTime);

            //keep a record of when the timer was started
            _startTime = _lastTimeInTimeElapsed = _lastTime;

            //update time to render next frame
            _nextTime = _lastTime + _frameTime;
        }
        public bool ReadyForNextFrame()
        {
            Debug.Assert(Math.Abs(_normalFPS) > double.MinValue, "PrecisionTimer::ReadyForNextFrame<No FPS set in timer>");

            QueryPerformanceWrapper.QueryPerformanceCounter(out _currentTime);

            if (_currentTime > _nextTime)
            {
                _timeElapsed = (_currentTime - _lastTime) * _timeScale;
                _lastTime    = _currentTime;

                //update time to render next frame
                _nextTime = _currentTime + _frameTime;

                return(true);
            }

            return(false);
        }