@dcl-sdk/utils
Version:
A collection of helpers to make it easier to build a Decentraland scene using the SDK 7.
47 lines • 6.63 kB
JavaScript
import { engine } from '@dcl/sdk/ecs';
import { priority } from './priority';
function createTimers(targetEngine) {
const timers = new Map();
let timerIdCounter = 0;
function system(dt) {
let deadTimers = [];
let callbacks = [];
for (let [timerId, timerData] of timers) {
timerData.accumulatedTime += 1000 * dt;
if (timerData.accumulatedTime < timerData.interval)
continue;
callbacks.push(timerData.callback);
if (timerData.recurrent) {
timerData.accumulatedTime -= Math.floor(timerData.accumulatedTime / timerData.interval) * timerData.interval;
}
else {
deadTimers.push(timerId);
}
}
for (let timerId of deadTimers)
timers.delete(timerId);
for (let callback of callbacks)
callback();
}
targetEngine.addSystem(system, priority.TimerSystemPriority);
return {
setTimeout(callback, milliseconds) {
let timerId = timerIdCounter++;
timers.set(timerId, { callback: callback, interval: milliseconds, recurrent: false, accumulatedTime: 0 });
return timerId;
},
clearTimeout(timer) {
timers.delete(timer);
},
setInterval(callback, milliseconds) {
let timerId = timerIdCounter++;
timers.set(timerId, { callback: callback, interval: milliseconds, recurrent: true, accumulatedTime: 0 });
return timerId;
},
clearInterval(timer) {
timers.delete(timer);
}
};
}
export const timers = createTimers(engine);
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdGltZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBc0QsTUFBTSxjQUFjLENBQUE7QUFDekYsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQVFyQyxTQUFTLFlBQVksQ0FBQyxZQUFxQjtJQVF6QyxNQUFNLE1BQU0sR0FBNEIsSUFBSSxHQUFHLEVBQUUsQ0FBQTtJQUNqRCxJQUFJLGNBQWMsR0FBRyxDQUFDLENBQUE7SUFFdEIsU0FBUyxNQUFNLENBQUMsRUFBVTtRQUN4QixJQUFJLFVBQVUsR0FBRyxFQUFFLENBQUE7UUFDbkIsSUFBSSxTQUFTLEdBQUcsRUFBRSxDQUFBO1FBRWxCLEtBQUssSUFBSSxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUN4QyxTQUFTLENBQUMsZUFBZSxJQUFJLElBQUksR0FBRyxFQUFFLENBQUE7WUFDdEMsSUFBSSxTQUFTLENBQUMsZUFBZSxHQUFHLFNBQVMsQ0FBQyxRQUFRO2dCQUNoRCxTQUFRO1lBRVYsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUE7WUFFbEMsSUFBSSxTQUFTLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQ3hCLFNBQVMsQ0FBQyxlQUFlLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsZUFBZSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFBO1lBQzlHLENBQUM7aUJBQU0sQ0FBQztnQkFDTixVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1lBQzFCLENBQUM7UUFDSCxDQUFDO1FBRUQsS0FBSyxJQUFJLE9BQU8sSUFBSSxVQUFVO1lBQzVCLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUE7UUFFeEIsS0FBSyxJQUFJLFFBQVEsSUFBSSxTQUFTO1lBQzVCLFFBQVEsRUFBRSxDQUFBO0lBQ2QsQ0FBQztJQUVELFlBQVksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFBO0lBRTVELE9BQU87UUFDTCxVQUFVLENBQUMsUUFBa0IsRUFBRSxZQUFvQjtZQUNqRCxJQUFJLE9BQU8sR0FBRyxjQUFjLEVBQUUsQ0FBQTtZQUM5QixNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxFQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxDQUFDLEVBQUMsQ0FBQyxDQUFBO1lBQ3ZHLE9BQU8sT0FBTyxDQUFBO1FBQ2hCLENBQUM7UUFDRCxZQUFZLENBQUMsS0FBYztZQUN6QixNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ3RCLENBQUM7UUFDRCxXQUFXLENBQUMsUUFBa0IsRUFBRSxZQUFvQjtZQUNsRCxJQUFJLE9BQU8sR0FBRyxjQUFjLEVBQUUsQ0FBQTtZQUM5QixNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxFQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxDQUFDLEVBQUMsQ0FBQyxDQUFBO1lBQ3RHLE9BQU8sT0FBTyxDQUFBO1FBQ2hCLENBQUM7UUFDRCxhQUFhLENBQUMsS0FBYztZQUMxQixNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ3RCLENBQUM7S0FDRixDQUFBO0FBQ0gsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBlbmdpbmUsIEVudGl0eSwgSUVuZ2luZSwgVHJhbnNmb3JtVHlwZSwgU2NoZW1hcywgVHJhbnNmb3JtIH0gZnJvbSAnQGRjbC9zZGsvZWNzJ1xuaW1wb3J0IHsgcHJpb3JpdHkgfSBmcm9tICcuL3ByaW9yaXR5J1xuXG5leHBvcnQgdHlwZSBUaW1lcnMgPSBSZXR1cm5UeXBlPHR5cGVvZiBjcmVhdGVUaW1lcnM+XG5cbmV4cG9ydCB0eXBlIENhbGxiYWNrID0gKCkgPT4gdm9pZFxuXG5leHBvcnQgdHlwZSBUaW1lcklkID0gbnVtYmVyXG5cbmZ1bmN0aW9uIGNyZWF0ZVRpbWVycyh0YXJnZXRFbmdpbmU6IElFbmdpbmUpIHtcbiAgdHlwZSBUaW1lckRhdGEgPSB7XG4gICAgYWNjdW11bGF0ZWRUaW1lOiBudW1iZXIsXG4gICAgaW50ZXJ2YWw6IG51bWJlcixcbiAgICByZWN1cnJlbnQ6IGJvb2xlYW4sXG4gICAgY2FsbGJhY2s6IENhbGxiYWNrXG4gIH1cblxuICBjb25zdCB0aW1lcnM6IE1hcDxUaW1lcklkLCBUaW1lckRhdGE+ID0gbmV3IE1hcCgpXG4gIGxldCB0aW1lcklkQ291bnRlciA9IDBcblxuICBmdW5jdGlvbiBzeXN0ZW0oZHQ6IG51bWJlcikge1xuICAgIGxldCBkZWFkVGltZXJzID0gW11cbiAgICBsZXQgY2FsbGJhY2tzID0gW11cblxuICAgIGZvciAobGV0IFt0aW1lcklkLCB0aW1lckRhdGFdIG9mIHRpbWVycykge1xuICAgICAgdGltZXJEYXRhLmFjY3VtdWxhdGVkVGltZSArPSAxMDAwICogZHRcbiAgICAgIGlmICh0aW1lckRhdGEuYWNjdW11bGF0ZWRUaW1lIDwgdGltZXJEYXRhLmludGVydmFsKVxuICAgICAgICBjb250aW51ZVxuXG4gICAgICBjYWxsYmFja3MucHVzaCh0aW1lckRhdGEuY2FsbGJhY2spXG5cbiAgICAgIGlmICh0aW1lckRhdGEucmVjdXJyZW50KSB7XG4gICAgICAgIHRpbWVyRGF0YS5hY2N1bXVsYXRlZFRpbWUgLT0gTWF0aC5mbG9vcih0aW1lckRhdGEuYWNjdW11bGF0ZWRUaW1lIC8gdGltZXJEYXRhLmludGVydmFsKSAqIHRpbWVyRGF0YS5pbnRlcnZhbFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVhZFRpbWVycy5wdXNoKHRpbWVySWQpXG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChsZXQgdGltZXJJZCBvZiBkZWFkVGltZXJzKVxuICAgICAgdGltZXJzLmRlbGV0ZSh0aW1lcklkKVxuICAgIFxuICAgIGZvciAobGV0IGNhbGxiYWNrIG9mIGNhbGxiYWNrcylcbiAgICAgIGNhbGxiYWNrKClcbiAgfVxuXG4gIHRhcmdldEVuZ2luZS5hZGRTeXN0ZW0oc3lzdGVtLCBwcmlvcml0eS5UaW1lclN5c3RlbVByaW9yaXR5KVxuXG4gIHJldHVybiB7XG4gICAgc2V0VGltZW91dChjYWxsYmFjazogQ2FsbGJhY2ssIG1pbGxpc2Vjb25kczogbnVtYmVyKTogVGltZXJJZCB7XG4gICAgICBsZXQgdGltZXJJZCA9IHRpbWVySWRDb3VudGVyKytcbiAgICAgIHRpbWVycy5zZXQodGltZXJJZCwge2NhbGxiYWNrOiBjYWxsYmFjaywgaW50ZXJ2YWw6IG1pbGxpc2Vjb25kcywgcmVjdXJyZW50OiBmYWxzZSwgYWNjdW11bGF0ZWRUaW1lOiAwfSlcbiAgICAgIHJldHVybiB0aW1lcklkXG4gICAgfSxcbiAgICBjbGVhclRpbWVvdXQodGltZXI6IFRpbWVySWQpIHtcbiAgICAgIHRpbWVycy5kZWxldGUodGltZXIpXG4gICAgfSxcbiAgICBzZXRJbnRlcnZhbChjYWxsYmFjazogQ2FsbGJhY2ssIG1pbGxpc2Vjb25kczogbnVtYmVyKTogVGltZXJJZCB7XG4gICAgICBsZXQgdGltZXJJZCA9IHRpbWVySWRDb3VudGVyKytcbiAgICAgIHRpbWVycy5zZXQodGltZXJJZCwge2NhbGxiYWNrOiBjYWxsYmFjaywgaW50ZXJ2YWw6IG1pbGxpc2Vjb25kcywgcmVjdXJyZW50OiB0cnVlLCBhY2N1bXVsYXRlZFRpbWU6IDB9KVxuICAgICAgcmV0dXJuIHRpbWVySWRcbiAgICB9LFxuICAgIGNsZWFySW50ZXJ2YWwodGltZXI6IFRpbWVySWQpIHtcbiAgICAgIHRpbWVycy5kZWxldGUodGltZXIpXG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBjb25zdCB0aW1lcnMgPSBjcmVhdGVUaW1lcnMoZW5naW5lKVxuIl19