2018-04-21 21:24:46 +08:00
|
|
|
#include "..\e2dtool.h"
|
|
|
|
|
#include "..\e2dnode.h"
|
|
|
|
|
#include "..\e2dmanager.h"
|
2017-10-17 21:22:25 +08:00
|
|
|
|
2018-04-13 00:39:27 +08:00
|
|
|
e2d::Timer::Timer(String name, Function func, double interval /* = 0 */, int updateTimes /* = -1 */, bool atOnce /* = false */, bool autoRelease /* = false */)
|
2018-03-04 13:30:52 +08:00
|
|
|
: m_bRunning(false)
|
|
|
|
|
, m_nRunTimes(0)
|
|
|
|
|
, m_Callback(nullptr)
|
|
|
|
|
, m_fInterval(0)
|
|
|
|
|
, m_fLast(0)
|
|
|
|
|
, m_nUpdateTimes(-1)
|
|
|
|
|
, m_bAtOnce(false)
|
|
|
|
|
, m_bAutoRelease(false)
|
2018-04-21 00:46:26 +08:00
|
|
|
, m_bClear(false)
|
2017-10-17 21:22:25 +08:00
|
|
|
{
|
2017-10-21 19:09:31 +08:00
|
|
|
this->setName(name);
|
2018-03-31 18:12:01 +08:00
|
|
|
this->setFunc(func);
|
2018-03-04 13:30:52 +08:00
|
|
|
this->setUpdateTimes(updateTimes);
|
2017-10-21 19:09:31 +08:00
|
|
|
this->setInterval(interval);
|
2018-03-03 17:02:08 +08:00
|
|
|
m_bAutoRelease = autoRelease;
|
2017-10-21 19:09:31 +08:00
|
|
|
m_bAtOnce = atOnce;
|
2017-10-17 21:22:25 +08:00
|
|
|
}
|
|
|
|
|
|
2018-02-07 16:37:12 +08:00
|
|
|
bool e2d::Timer::isRunning() const
|
2017-10-17 21:22:25 +08:00
|
|
|
{
|
2017-10-20 00:59:26 +08:00
|
|
|
return m_bRunning;
|
2017-10-17 21:22:25 +08:00
|
|
|
}
|
|
|
|
|
|
2018-02-07 16:37:12 +08:00
|
|
|
void e2d::Timer::stop()
|
2017-10-17 21:22:25 +08:00
|
|
|
{
|
2018-02-07 16:37:12 +08:00
|
|
|
m_bRunning = false;
|
2017-10-17 21:22:25 +08:00
|
|
|
}
|
|
|
|
|
|
2018-03-03 17:02:08 +08:00
|
|
|
void e2d::Timer::stopAndClear()
|
|
|
|
|
{
|
|
|
|
|
m_bRunning = false;
|
|
|
|
|
m_bClear = true;
|
|
|
|
|
}
|
|
|
|
|
|
2018-02-07 16:37:12 +08:00
|
|
|
void e2d::Timer::start()
|
2017-10-17 21:22:25 +08:00
|
|
|
{
|
2018-04-21 00:46:26 +08:00
|
|
|
if (!m_bRunning)
|
|
|
|
|
{
|
|
|
|
|
m_bRunning = true;
|
|
|
|
|
m_fLast = Time::getTotalTime();
|
|
|
|
|
m_nRunTimes = 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void e2d::Timer::start(int times)
|
|
|
|
|
{
|
|
|
|
|
if (!m_bRunning)
|
|
|
|
|
{
|
|
|
|
|
m_bRunning = true;
|
|
|
|
|
m_fLast = Time::getTotalTime();
|
|
|
|
|
m_nUpdateTimes = times;
|
|
|
|
|
m_nRunTimes = 0;
|
|
|
|
|
}
|
2017-10-17 21:22:25 +08:00
|
|
|
}
|
|
|
|
|
|
2018-02-07 16:37:12 +08:00
|
|
|
e2d::String e2d::Timer::getName() const
|
2017-10-17 21:22:25 +08:00
|
|
|
{
|
|
|
|
|
return m_sName;
|
|
|
|
|
}
|
|
|
|
|
|
2018-03-30 01:41:29 +08:00
|
|
|
void e2d::Timer::setName(String name)
|
2017-10-17 21:22:25 +08:00
|
|
|
{
|
|
|
|
|
m_sName = name;
|
|
|
|
|
}
|
|
|
|
|
|
2018-02-27 21:07:43 +08:00
|
|
|
void e2d::Timer::setInterval(double interval)
|
2017-10-17 21:22:25 +08:00
|
|
|
{
|
2018-01-30 16:45:38 +08:00
|
|
|
m_fInterval = max(interval, 0);
|
2017-10-17 21:22:25 +08:00
|
|
|
}
|
|
|
|
|
|
2018-03-31 18:12:01 +08:00
|
|
|
void e2d::Timer::setFunc(Function func)
|
2017-10-21 19:09:31 +08:00
|
|
|
{
|
2018-03-28 17:56:04 +08:00
|
|
|
m_Callback = func;
|
2017-10-21 19:09:31 +08:00
|
|
|
}
|
|
|
|
|
|
2018-03-04 13:30:52 +08:00
|
|
|
void e2d::Timer::setUpdateTimes(int updateTimes)
|
2017-10-21 19:09:31 +08:00
|
|
|
{
|
2018-03-04 13:30:52 +08:00
|
|
|
m_nUpdateTimes = updateTimes;
|
2017-10-21 19:09:31 +08:00
|
|
|
}
|
|
|
|
|
|
2018-02-07 16:37:12 +08:00
|
|
|
void e2d::Timer::setRunAtOnce(bool bAtOnce)
|
2017-12-04 11:18:38 +08:00
|
|
|
{
|
|
|
|
|
m_bAtOnce = bAtOnce;
|
|
|
|
|
}
|
|
|
|
|
|
2018-03-03 17:02:08 +08:00
|
|
|
void e2d::Timer::update()
|
2017-10-17 21:22:25 +08:00
|
|
|
{
|
2018-03-04 13:30:52 +08:00
|
|
|
if (m_Callback)
|
2018-02-07 16:37:12 +08:00
|
|
|
{
|
|
|
|
|
m_Callback();
|
|
|
|
|
}
|
2017-10-17 21:22:25 +08:00
|
|
|
|
2018-02-07 16:37:12 +08:00
|
|
|
m_nRunTimes++;
|
|
|
|
|
m_fLast += m_fInterval;
|
2017-10-17 21:22:25 +08:00
|
|
|
|
2018-03-04 13:30:52 +08:00
|
|
|
if (m_nRunTimes == m_nUpdateTimes)
|
2017-10-21 19:09:31 +08:00
|
|
|
{
|
2018-03-03 17:02:08 +08:00
|
|
|
if (m_bAutoRelease)
|
|
|
|
|
{
|
|
|
|
|
this->stopAndClear();
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
this->stop();
|
|
|
|
|
}
|
2017-11-07 22:20:46 +08:00
|
|
|
}
|
2017-10-17 21:22:25 +08:00
|
|
|
}
|
2017-10-21 19:09:31 +08:00
|
|
|
|
2018-03-03 17:02:08 +08:00
|
|
|
bool e2d::Timer::isReady() const
|
2017-10-21 19:09:31 +08:00
|
|
|
{
|
2018-03-04 13:30:52 +08:00
|
|
|
if (m_bRunning && !m_bClear)
|
2017-11-08 15:23:07 +08:00
|
|
|
{
|
|
|
|
|
if (m_bAtOnce && m_nRunTimes == 0)
|
|
|
|
|
return true;
|
2017-10-21 19:09:31 +08:00
|
|
|
|
2018-01-30 16:45:38 +08:00
|
|
|
if (m_fInterval == 0)
|
2017-11-08 15:23:07 +08:00
|
|
|
return true;
|
2017-10-21 19:09:31 +08:00
|
|
|
|
2018-02-07 16:37:12 +08:00
|
|
|
if ((Time::getTotalTime() - m_fLast) >= m_fInterval)
|
2017-11-08 15:23:07 +08:00
|
|
|
return true;
|
2017-10-21 19:09:31 +08:00
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|