Otclient  14/8/2020
scheduledevent.cpp
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2010-2020 OTClient <https://github.com/edubart/otclient>
3  *
4  * Permission is hereby granted, free of charge, to any person obtaining a copy
5  * of this software and associated documentation files (the "Software"), to deal
6  * in the Software without restriction, including without limitation the rights
7  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8  * copies of the Software, and to permit persons to whom the Software is
9  * furnished to do so, subject to the following conditions:
10  *
11  * The above copyright notice and this permission notice shall be included in
12  * all copies or substantial portions of the Software.
13  *
14  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20  * THE SOFTWARE.
21  */
22 
23 #include "scheduledevent.h"
24 
25 ScheduledEvent::ScheduledEvent(const std::function<void()>& callback, int delay, int maxCycles) : Event(callback)
26 {
27  m_ticks = g_clock.millis() + delay;
28  m_delay = delay;
29  m_maxCycles = maxCycles;
30  m_cyclesExecuted = 0;
31 }
32 
34 {
35  if(!m_canceled && m_callback && (m_maxCycles == 0 || m_cyclesExecuted < m_maxCycles)) {
36  m_callback();
37  m_executed = true;
38  // callback may be used in the next cycle
39  } else {
40  // reset callback to free object refs
41  m_callback = nullptr;
42  }
43 
44  m_cyclesExecuted++;
45 }
46 
48 {
49  if(m_callback && !m_canceled && (m_maxCycles == 0 || m_cyclesExecuted < m_maxCycles)) {
50  m_ticks += m_delay;
51  return true;
52  }
53 
54  // reset callback to free object refs
55  m_callback = nullptr;
56  return false;
57 }
Event::m_canceled
bool m_canceled
Definition: event.h:43
ScheduledEvent::execute
void execute()
Definition: scheduledevent.cpp:33
ScheduledEvent::ScheduledEvent
ScheduledEvent(const std::function< void()> &callback, int delay, int maxCycles)
Definition: scheduledevent.cpp:25
ScheduledEvent::maxCycles
int maxCycles()
Definition: scheduledevent.h:41
Event
Definition: event.h:29
Event::m_executed
bool m_executed
Definition: event.h:44
ScheduledEvent::nextCycle
bool nextCycle()
Definition: scheduledevent.cpp:47
Event::m_callback
std::function< void()> m_callback
Definition: event.h:42
ScheduledEvent::delay
int delay()
Definition: scheduledevent.h:39
scheduledevent.h
Clock::millis
ticks_t millis()
Definition: clock.h:37
g_clock
Clock g_clock
Definition: clock.cpp:25