136 lines
2.3 KiB
C++
136 lines
2.3 KiB
C++
#include "..\etools.h"
|
|
#include "..\enodes.h"
|
|
#include "..\emanagers.h"
|
|
|
|
e2d::Timer::Timer()
|
|
: m_bRunning(false)
|
|
, m_nRunTimes(0)
|
|
, m_pParentNode(nullptr)
|
|
, m_Callback(nullptr)
|
|
, m_fInterval(0)
|
|
, m_fLast(0)
|
|
, m_nRepeatTimes(-1)
|
|
, m_bAtOnce(false)
|
|
{
|
|
}
|
|
|
|
e2d::Timer::Timer(const TimerCallback & callback, float interval /* = 0 */, int repeatTimes /* = -1 */, bool atOnce /* = false */)
|
|
: m_bRunning(false)
|
|
, m_nRunTimes(0)
|
|
, m_pParentNode(nullptr)
|
|
, m_Callback(nullptr)
|
|
, m_fInterval(0)
|
|
, m_fLast(0)
|
|
, m_nRepeatTimes(-1)
|
|
, m_bAtOnce(false)
|
|
{
|
|
this->setCallback(callback);
|
|
this->setRepeatTimes(repeatTimes);
|
|
this->setInterval(interval);
|
|
m_bAtOnce = atOnce;
|
|
}
|
|
|
|
e2d::Timer::Timer(const String & name, const TimerCallback & callback, float interval /* = 0 */, int repeatTimes /* = -1 */, bool atOnce /* = false */)
|
|
: m_bRunning(false)
|
|
, m_nRunTimes(0)
|
|
, m_pParentNode(nullptr)
|
|
, m_Callback(nullptr)
|
|
, m_fInterval(0)
|
|
, m_fLast(0)
|
|
, m_nRepeatTimes(-1)
|
|
, m_bAtOnce(false)
|
|
{
|
|
this->setName(name);
|
|
this->setCallback(callback);
|
|
this->setRepeatTimes(repeatTimes);
|
|
this->setInterval(interval);
|
|
m_bAtOnce = atOnce;
|
|
}
|
|
|
|
bool e2d::Timer::isRunning() const
|
|
{
|
|
return m_bRunning;
|
|
}
|
|
|
|
void e2d::Timer::stop()
|
|
{
|
|
m_bRunning = false;
|
|
}
|
|
|
|
void e2d::Timer::start()
|
|
{
|
|
m_bRunning = true;
|
|
m_fLast = Time::getTotalTime();
|
|
}
|
|
|
|
e2d::String e2d::Timer::getName() const
|
|
{
|
|
return m_sName;
|
|
}
|
|
|
|
e2d::Node * e2d::Timer::getParentNode() const
|
|
{
|
|
return m_pParentNode;
|
|
}
|
|
|
|
void e2d::Timer::setName(const String & name)
|
|
{
|
|
m_sName = name;
|
|
}
|
|
|
|
void e2d::Timer::setInterval(float interval)
|
|
{
|
|
m_fInterval = max(interval, 0);
|
|
}
|
|
|
|
void e2d::Timer::setCallback(const TimerCallback & callback)
|
|
{
|
|
m_Callback = callback;
|
|
}
|
|
|
|
void e2d::Timer::setRepeatTimes(int repeatTimes)
|
|
{
|
|
m_nRepeatTimes = repeatTimes;
|
|
}
|
|
|
|
void e2d::Timer::setRunAtOnce(bool bAtOnce)
|
|
{
|
|
m_bAtOnce = bAtOnce;
|
|
}
|
|
|
|
void e2d::Timer::_callOn()
|
|
{
|
|
if (m_Callback)
|
|
{
|
|
m_Callback();
|
|
}
|
|
|
|
m_nRunTimes++;
|
|
m_fLast += m_fInterval;
|
|
|
|
if (m_nRunTimes == m_nRepeatTimes)
|
|
{
|
|
this->stop();
|
|
}
|
|
}
|
|
|
|
bool e2d::Timer::_isReady() const
|
|
{
|
|
if (m_bRunning &&
|
|
m_pParentNode &&
|
|
m_pParentNode->getParentScene() == SceneManager::getCurrentScene())
|
|
{
|
|
if (m_bAtOnce && m_nRunTimes == 0)
|
|
return true;
|
|
|
|
if (m_fInterval == 0)
|
|
return true;
|
|
|
|
if ((Time::getTotalTime() - m_fLast) >= m_fInterval)
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|