mirror of
https://github.com/AxioDL/LibCommon.git
synced 2026-03-30 11:47:23 -07:00
59bdd4f906
This doesn't modify class state.
92 lines
1.5 KiB
C++
92 lines
1.5 KiB
C++
#include "CTimer.h"
|
|
#include <cmath>
|
|
#include <ctime>
|
|
|
|
CTimer::CTimer() = default;
|
|
|
|
void CTimer::Start()
|
|
{
|
|
if (!mStarted)
|
|
{
|
|
mStartTime = GlobalTime();
|
|
mStarted = true;
|
|
mPaused = false;
|
|
mPauseStartTime = 0;
|
|
mTotalPauseTime = 0;
|
|
mStopTime = 0;
|
|
}
|
|
}
|
|
|
|
void CTimer::Start(double StartTime)
|
|
{
|
|
if (!mStarted)
|
|
{
|
|
mStartTime = GlobalTime() - StartTime;
|
|
mStarted = true;
|
|
mPaused = false;
|
|
mPauseStartTime = 0;
|
|
mTotalPauseTime = 0;
|
|
mStopTime = 0;
|
|
}
|
|
}
|
|
|
|
void CTimer::Restart()
|
|
{
|
|
mStarted = false;
|
|
Start();
|
|
}
|
|
|
|
double CTimer::Stop()
|
|
{
|
|
mStopTime = Time();
|
|
mStarted = false;
|
|
mPaused = false;
|
|
return mStopTime;
|
|
}
|
|
|
|
double CTimer::Pause()
|
|
{
|
|
mPauseStartTime = GlobalTime();
|
|
mPaused = true;
|
|
return Time();
|
|
}
|
|
|
|
bool CTimer::IsPaused() const
|
|
{
|
|
return mPaused;
|
|
}
|
|
|
|
void CTimer::Resume()
|
|
{
|
|
if (mPaused)
|
|
{
|
|
mTotalPauseTime += GlobalTime() - mPauseStartTime;
|
|
mPaused = false;
|
|
}
|
|
}
|
|
|
|
double CTimer::Time() const
|
|
{
|
|
if (mStarted)
|
|
{
|
|
double CurrentPauseTime = 0;
|
|
if (mPaused)
|
|
CurrentPauseTime = GlobalTime() - mPauseStartTime;
|
|
|
|
return GlobalTime() - mStartTime - mTotalPauseTime - CurrentPauseTime;
|
|
}
|
|
|
|
return mStopTime;
|
|
}
|
|
|
|
// ************ STATIC ************
|
|
double CTimer::GlobalTime()
|
|
{
|
|
return (double) clock() / CLOCKS_PER_SEC;
|
|
}
|
|
|
|
float CTimer::SecondsMod900()
|
|
{
|
|
return fmodf((float)GlobalTime(), 900.f);
|
|
}
|