diff --git a/src/sim/world.js b/src/sim/world.js index 95f457c..85d041f 100644 --- a/src/sim/world.js +++ b/src/sim/world.js @@ -82,10 +82,15 @@ const HANDLERS = { // Advance the world to absolute time toTime, processing all due events in order. export function advance(world, toTime) { - while (world.queue.size > 0 && world.queue.peek().time <= toTime) { - const ev = world.queue.pop(); - world.t = ev.time; - HANDLERS[ev.type](world, ev.data); + try { + while (world.queue.size > 0 && world.queue.peek().time <= toTime) { + const ev = world.queue.pop(); + world.t = ev.time; + const handler = HANDLERS[ev.type]; + if (!handler) throw new Error(`Unknown event type: ${ev.type}`); + handler(world, ev.data); + } + } finally { + world.t = toTime; } - world.t = toTime; }