Skip to content

Commit fe1c6f5

Browse files
committed
Timers: get rid of unique ptr as it didn't make sense as i was still forwarding raw pointers (aaaghhh) to lua
Timers: remove ugliness Timers: emplace_back instead of push_back Timers: Tried to make concise statements
1 parent 099161c commit fe1c6f5

File tree

3 files changed

+40
-39
lines changed

3 files changed

+40
-39
lines changed

VCMP-LUA/vcmpWrap/Timer/TimerManager.cpp

Lines changed: 35 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,61 +1,65 @@
11
#include "TimerManager.h"
22

33
extern 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");

VCMP-LUA/vcmpWrap/Timer/TimerManager.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,5 @@ class TimerManager {
1010
static vcmpTimer* createTimer(sol::function callback, unsigned int interval, int32_t repeat, sol::variadic_args args);
1111
static void destroyTimer(vcmpTimer* reference);
1212
private:
13-
static std::vector<std::unique_ptr<vcmpTimer>> m_vcmpTimers;
13+
static std::vector<vcmpTimer> m_vcmpTimers;
1414
};

VCMP-LUA/vcmpWrap/Timer/vcmpTimer.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,7 @@ vcmpTimer::vcmpTimer(sol::function callback, unsigned int interval, int32_t repe
77
this->bIsValid = true;
88
}
99

10-
void vcmpTimer::Init(sol::state* Lua) {}
10+
void vcmpTimer::Init(sol::state* Lua)
11+
{
12+
sol::usertype<vcmpTimer> userdata = Lua->new_usertype<vcmpTimer>("vcmpTimer");
13+
}

0 commit comments

Comments
 (0)