onLoad and onDestroy events

This commit is contained in:
Eduardo Bart
2011-04-23 00:28:23 -03:00
parent 02ada0b82e
commit a98f1d67db
16 changed files with 210 additions and 31 deletions

View File

@@ -34,10 +34,10 @@ void Dispatcher::poll()
Task *task = m_taskList.top();
if(g_engine.getCurrentFrameTicks() < task->ticks)
break;
m_taskList.pop();
task->callback();
delete task;
m_taskList.pop();
}
}
@@ -50,3 +50,41 @@ void Dispatcher::addTask(const SimpleCallback& callback)
{
m_taskList.push(new Task(callback));
}
/*
* #include <prerequisites.h>
#include <core/dispatcher.h>
#include <core/engine.h>
#include <stack>
Dispatcher g_dispatcher;
void Dispatcher::poll()
{
if(!m_taskList.empty()) {
auto it = m_taskList.begin();
m_taskList.erase(it);
(*it)();
}
while(!m_scheduledTaskList.empty()) {
ScheduledTask *task = m_scheduledTaskList.top();
if(g_engine.getCurrentFrameTicks() < task->ticks)
break;
m_scheduledTaskList.pop();
task->callback();
delete task;
}
}
void Dispatcher::scheduleTask(const SimpleCallback& callback, int delay)
{
m_scheduledTaskList.push(new ScheduledTask(g_engine.getCurrentFrameTicks() + delay, callback));
}
void Dispatcher::addTask(const SimpleCallback& callback)
{
m_taskList.push_back(callback);
}
*/

View File

@@ -61,4 +61,39 @@ private:
extern Dispatcher g_dispatcher;
/*
* class ScheduledTask {
public:
inline ScheduledTask(const SimpleCallback& _callback) : ticks(0), callback(_callback) { }
inline ScheduledTask(int _ticks, const SimpleCallback& _callback) : ticks(_ticks), callback(_callback) { }
inline bool operator<(const ScheduledTask& other) const { return ticks > other.ticks; }
int ticks;
SimpleCallback callback;
};
class lessScheduledTask : public std::binary_function<ScheduledTask*&, ScheduledTask*&, bool> {
public:
bool operator()(ScheduledTask*& t1,ScheduledTask*& t2) { return (*t1) < (*t2); }
};
class Dispatcher
{
public:
Dispatcher() { }
/// Execute scheduled events
void poll();
/// Add an event
void addTask(const SimpleCallback& callback);
/// Schedula an event
void scheduleTask(const SimpleCallback& callback, int delay);
private:
std::vector<SimpleCallback> m_taskList;
std::priority_queue<ScheduledTask*, std::vector<ScheduledTask*>, lessScheduledTask> m_scheduledTaskList;
};
extern Dispatcher g_dispatcher;*/
#endif // DISPATCHER_H

View File

@@ -52,11 +52,11 @@ void Engine::poll()
// poll platform events
Platform::poll();
// poll network events
Connection::poll();
// poll diaptcher tasks
g_dispatcher.poll();
// poll network events
Connection::poll();
}
void Engine::run()