TimeScheduler* TimeScheduler::instance = NULL;
-TimeScheduler::TimeScheduler() : paused(false), last_update(0), internal_time(0)
+TimeScheduler::TimeScheduler()
{
}
void
TimeScheduler::update(float time)
{
- if (!paused) internal_time+=(time - last_update);
- last_update = time;
-
- while(!schedule.empty() && schedule.front().wakeup_time < internal_time) {
+ while(!schedule.empty() && schedule.front().wakeup_time < time) {
HSQOBJECT thread_ref = schedule.front().thread_ref;
sq_pushobject(global_vm, thread_ref);
HSQUIRRELVM scheduled_vm;
if(sq_gettype(global_vm, -1) == OT_THREAD &&
SQ_SUCCEEDED(sq_getthread(global_vm, -1, &scheduled_vm))) {
- if(SQ_FAILED(sq_wakeupvm(scheduled_vm, SQFalse, SQFalse, SQTrue))) {
+ if(SQ_FAILED(sq_wakeupvm(scheduled_vm, SQFalse, SQFalse, SQTrue, SQFalse))) {
std::ostringstream msg;
- msg << "Couldn't wakeup scheduled squirrel VM: ";
+ msg << "Error waking VM: ";
sq_getlasterror(scheduled_vm);
if(sq_gettype(scheduled_vm, -1) != OT_STRING) {
msg << "(no info)";
sq_pop(global_vm, 2);
throw SquirrelError(global_vm, "Couldn't get thread weakref from vm");
}
- entry.wakeup_time = time - (last_update - internal_time);
+ entry.wakeup_time = time;
sq_addref(global_vm, & entry.thread_ref);
sq_pop(global_vm, 2);
std::push_heap(schedule.begin(), schedule.end());
}
-void
-TimeScheduler::set_pause(bool paused)
-{
- this->paused = paused;
-}
-
}