11#include " TimerManager.h"
22
33extern sol::state Lua;
4- std::vector<std::unique_ptr< vcmpTimer> > TimerManager::m_vcmpTimers;
4+ std::vector<vcmpTimer> TimerManager::m_vcmpTimers;
55
66#define DEBUG_TIMERMANAGER 1
77#undef DEBUG_TIMERMANAGER
88
9- void TimerManager::OnFrame (float elapsedTime) {
10- size_t size = m_vcmpTimers. size ();
11- if (size == 0 ) return ;
9+ void TimerManager::OnFrame (float elapsedTime)
10+ {
11+ if (m_vcmpTimers. empty () ) return ;
1212
13- for (auto timer = m_vcmpTimers.begin (); timer != m_vcmpTimers.end (); timer++) {
13+ for (auto timer = m_vcmpTimers.begin (); timer != m_vcmpTimers.end (); timer++)
14+ {
1415 const int64_t currentTick = GetCurrentSysTime ();
1516
16- if (!timer->get ()-> bIsValid ) {
17- timer-> reset ();
17+ if (!timer->bIsValid )
18+ {
1819 timer = m_vcmpTimers.erase (timer);
1920 if (timer == m_vcmpTimers.end ())
2021 break ;
2122 }
2223
23- int64_t lastTick = timer->get ()-> getLastTick ();
24- int32_t repeat = timer->get ()-> getRepeat ();
24+ int64_t lastTick = timer->getLastTick ();
25+ int32_t repeat = timer->getRepeat ();
2526
2627 // Calculate the elapsed time
2728 const auto delta = int64_t ((currentTick - lastTick) / 1000L );
2829
29- if (delta > timer->get ()->getInterval () && repeat != 0 ) {
30- const sol::function& fn = timer->get ()->getCallback ();
31- if (fn.valid ()) {
32- Lua[" thisTimer" ] = timer->get ();
33- const std::vector<sol::object>& args = timer->get ()->getArgs ();
30+ if (delta > timer->getInterval () && repeat != 0 )
31+ {
32+ const sol::function& fn = timer->getCallback ();
33+ if (fn.valid ())
34+ {
35+ Lua[" thisTimer" ] = &(*timer);
36+ const std::vector<sol::object>& args = timer->getArgs ();
3437 sol::function_result result = fn (sol::as_args (args));
3538 Lua[" thisTimer" ] = sol::nil;
36- if (!result.valid ()) {
39+ if (!result.valid ())
40+ {
3741 sol::error e = result;
3842 spdlog::error (" Timer handler failed: {}" , e.what ());
3943 }
4044 }
41- else {
42- timer->get ()->bIsValid = false ;
43- continue ;;
45+ else
46+ {
47+ timer->bIsValid = false ;
48+ continue ;
4449 }
4550
46- timer->get ()-> setLastTick (currentTick);
51+ timer->setLastTick (currentTick);
4752
48- if (repeat > 0 ) {
49- timer->get ()->setRepeat (--repeat);
50-
51- if (repeat == 0 )
52- timer->get ()->bIsValid = false ;
53- }
53+ if (repeat > 0 )
54+ timer->setRepeat (--repeat);
55+ else
56+ timer->bIsValid = false ;
5457 }
5558 }
5659}
5760
58- vcmpTimer* TimerManager::createTimer (sol::function callback, unsigned int interval, int32_t repeat, sol::variadic_args args) {
61+ vcmpTimer* TimerManager::createTimer (sol::function callback, unsigned int interval, int32_t repeat, sol::variadic_args args)
62+ {
5963 if (m_vcmpTimers.size () >= m_vcmpTimers.capacity ()) {
6064 spdlog::error (" Timer object limit of {} reached!" , MAX_TIMERS);
6165 throw (" Timers limit reached1" );
@@ -74,22 +78,16 @@ vcmpTimer* TimerManager::createTimer(sol::function callback, unsigned int interv
7478 spdlog::debug (" createTimer :: Received VA of size: {}" , args.size ());
7579#endif
7680
77- m_vcmpTimers.push_back (std::make_unique<vcmpTimer>(callback, interval, repeat, largs));
78- return m_vcmpTimers.back ().get ();
81+ return &m_vcmpTimers.emplace_back (callback, interval, repeat, largs);
7982}
8083
81- void TimerManager::destroyTimer (vcmpTimer* reference) {
82- /* for (auto it = m_vcmpTimers.begin(); it != m_vcmpTimers.end(); it++) {
83- if (it->get() == reference) {
84- it = m_vcmpTimers.erase(it);
85- if(it == m_vcmpTimers.end())
86- break;
87- }
88- }*/
84+ void TimerManager::destroyTimer (vcmpTimer* reference)
85+ {
8986 reference->bIsValid = false ;
9087}
9188
92- void TimerManager::Init (sol::state* Lua) {
89+ void TimerManager::Init (sol::state* Lua)
90+ {
9391 m_vcmpTimers.reserve (MAX_TIMERS);
9492
9593 sol::usertype<TimerManager> userdata = Lua->new_usertype <TimerManager>(" Timer" );
0 commit comments