#include "StdAfx.h"
#include "intervaltimer.h"

CIntervalTimer::CIntervalTimer(int interval)
{
	m_interval = interval;
	m_oldTick = GetTickCount();
}

CIntervalTimer::~CIntervalTimer(void)
{
}

//	タイムアウトした？
int CIntervalTimer::IsTimeout()
{
	DWORD tick = GetTickCount();

	if(m_oldTick + m_interval < tick || tick < m_oldTick)
	{
		m_oldTick = GetTickCount();
		return(1);
	}
	return(0);
}

CIntervalTimer::operator int()
{
	return(IsTimeout());
}

void CIntervalTimer::Reset()
{
	m_oldTick = GetTickCount();
}

void CIntervalTimer::SetInterval(int interval)
{
	m_interval = interval;
	Reset();
}

//	残り時間を取得
int CIntervalTimer::GetLeftTime()
{
	DWORD tick = GetTickCount();

	if(m_oldTick + m_interval < tick || tick < m_oldTick)
		return(0);

	return(m_oldTick + m_interval - tick);
}




CSaftyTimer::CSaftyTimer(int defaultTick)
{
	m_defaultTick = defaultTick;
	m_oldTick = 0;
}



/*!
	前回呼び出しから指定時間たっているかチェック

	\return 0:->時間がたっている、1:->まだ時間内
*/
int CSaftyTimer::CheckAttack(int tick)
{
	if(tick == 0)
		tick = m_defaultTick;

	//	指定時間を越えている？
	if(m_oldTick == 0 || m_oldTick + m_defaultTick <= GetTickCount() || GetTickCount() < m_oldTick)
	{
		m_oldTick = GetTickCount();
		return(0);
	}

	//	まだ時間内
	return(1);
}

void CSaftyTimer::SetInterval(int interval)
{
	m_defaultTick = interval;
	m_oldTick = 0;
}

void CSaftyTimer::WaitTimeout()
{
	while(CheckAttack())
		Sleep(20);
}
