2017-10-21 19:09:31 +08:00
|
|
|
#include "..\etools.h"
|
2017-11-08 15:23:07 +08:00
|
|
|
#include "..\enodes.h"
|
2017-10-26 17:17:30 +08:00
|
|
|
#include "..\emanagers.h"
|
2017-10-21 19:09:31 +08:00
|
|
|
#include "..\Win\winbase.h"
|
2017-10-17 21:22:25 +08:00
|
|
|
|
|
|
|
|
e2d::ETimer::ETimer()
|
|
|
|
|
: m_bRunning(false)
|
|
|
|
|
, m_nRunTimes(0)
|
|
|
|
|
, m_pParentNode(nullptr)
|
2017-11-07 22:20:46 +08:00
|
|
|
, m_Callback(nullptr)
|
2017-10-21 19:09:31 +08:00
|
|
|
, m_nInterval(0)
|
|
|
|
|
, m_nRepeatTimes(0)
|
|
|
|
|
, m_bAtOnce(false)
|
2017-10-17 21:22:25 +08:00
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
2017-10-21 19:09:31 +08:00
|
|
|
e2d::ETimer::ETimer(const TIMER_CALLBACK & callback, int repeatTimes /* = -1 */, LONGLONG interval /* = 0 */, bool atOnce /* = false */)
|
2017-10-17 21:22:25 +08:00
|
|
|
: ETimer()
|
|
|
|
|
{
|
2017-10-21 19:09:31 +08:00
|
|
|
this->setCallback(callback);
|
|
|
|
|
this->setRepeatTimes(repeatTimes);
|
|
|
|
|
this->setInterval(interval);
|
|
|
|
|
m_bAtOnce = atOnce;
|
2017-10-17 21:22:25 +08:00
|
|
|
}
|
|
|
|
|
|
2017-10-21 19:09:31 +08:00
|
|
|
e2d::ETimer::ETimer(const EString & name, const TIMER_CALLBACK & callback, int repeatTimes /* = -1 */, LONGLONG interval /* = 0 */, bool atOnce /* = false */)
|
2017-10-17 21:22:25 +08:00
|
|
|
: ETimer()
|
|
|
|
|
{
|
2017-10-21 19:09:31 +08:00
|
|
|
this->setName(name);
|
|
|
|
|
this->setCallback(callback);
|
|
|
|
|
this->setRepeatTimes(repeatTimes);
|
|
|
|
|
this->setInterval(interval);
|
|
|
|
|
m_bAtOnce = atOnce;
|
2017-10-17 21:22:25 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool e2d::ETimer::isRunning() const
|
|
|
|
|
{
|
2017-10-20 00:59:26 +08:00
|
|
|
return m_bRunning;
|
2017-10-17 21:22:25 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void e2d::ETimer::start()
|
|
|
|
|
{
|
|
|
|
|
m_bRunning = true;
|
2017-11-03 12:51:01 +08:00
|
|
|
m_tLast = steady_clock::now();
|
2017-10-17 21:22:25 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void e2d::ETimer::stop()
|
|
|
|
|
{
|
|
|
|
|
m_bRunning = false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
e2d::EString e2d::ETimer::getName() const
|
|
|
|
|
{
|
|
|
|
|
return m_sName;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
e2d::ENode * e2d::ETimer::getParentNode() const
|
|
|
|
|
{
|
|
|
|
|
return m_pParentNode;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void e2d::ETimer::setName(const EString & name)
|
|
|
|
|
{
|
|
|
|
|
m_sName = name;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void e2d::ETimer::setInterval(LONGLONG interval)
|
|
|
|
|
{
|
|
|
|
|
m_nInterval = max(interval, 0);
|
|
|
|
|
}
|
|
|
|
|
|
2017-10-21 19:09:31 +08:00
|
|
|
void e2d::ETimer::setCallback(const TIMER_CALLBACK & callback)
|
|
|
|
|
{
|
|
|
|
|
m_Callback = callback;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void e2d::ETimer::setRepeatTimes(int repeatTimes)
|
|
|
|
|
{
|
|
|
|
|
m_nRepeatTimes = repeatTimes;
|
|
|
|
|
}
|
|
|
|
|
|
2017-10-17 21:22:25 +08:00
|
|
|
void e2d::ETimer::bindWith(EScene * pParentScene)
|
|
|
|
|
{
|
|
|
|
|
ETimerManager::bindTimer(this, pParentScene);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void e2d::ETimer::bindWith(ENode * pParentNode)
|
|
|
|
|
{
|
|
|
|
|
ETimerManager::bindTimer(this, pParentNode);
|
|
|
|
|
}
|
|
|
|
|
|
2017-10-19 00:50:04 +08:00
|
|
|
void e2d::ETimer::_callOn()
|
2017-10-17 21:22:25 +08:00
|
|
|
{
|
2017-10-21 19:09:31 +08:00
|
|
|
if (m_nRunTimes == m_nRepeatTimes)
|
|
|
|
|
{
|
|
|
|
|
this->stop();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
2017-11-07 22:20:46 +08:00
|
|
|
if (m_Callback)
|
|
|
|
|
{
|
|
|
|
|
m_Callback(m_nRunTimes);
|
|
|
|
|
}
|
2017-10-17 21:22:25 +08:00
|
|
|
m_nRunTimes++;
|
|
|
|
|
}
|
2017-10-21 19:09:31 +08:00
|
|
|
|
|
|
|
|
bool e2d::ETimer::_isReady()
|
|
|
|
|
{
|
2017-11-08 15:23:07 +08:00
|
|
|
if (m_bRunning &&
|
|
|
|
|
m_pParentNode &&
|
|
|
|
|
m_pParentNode->getParentScene() == EApp::getCurrentScene())
|
|
|
|
|
{
|
|
|
|
|
if (m_bAtOnce && m_nRunTimes == 0)
|
|
|
|
|
return true;
|
2017-10-21 19:09:31 +08:00
|
|
|
|
2017-11-08 15:23:07 +08:00
|
|
|
if (m_nInterval == 0)
|
|
|
|
|
return true;
|
2017-10-21 19:09:31 +08:00
|
|
|
|
2017-11-08 15:23:07 +08:00
|
|
|
if (GetInterval(m_tLast) >= m_nInterval)
|
|
|
|
|
{
|
|
|
|
|
m_tLast += milliseconds(m_nInterval);
|
|
|
|
|
return true;
|
|
|
|
|
}
|
2017-10-21 19:09:31 +08:00
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|