diff --git a/mods/libhooktick.js b/mods/libhooktick.js index 36a00ba2..0800abfc 100644 --- a/mods/libhooktick.js +++ b/mods/libhooktick.js @@ -1,15 +1,49 @@ -let __registeredTickCallbacks = []; +let __registeredAfterTickCallbacks = []; +let __registeredBeforeTickCallbacks = []; window.addEventListener("load", ()=>{ - let oldTick = tick; + const oldTick = tick; clearInterval(tickInterval); tick = function(){ + __registeredBeforeTickCallbacks.forEach(func=>{ + func(); + }); oldTick(); - __registeredTickCallbacks.forEach(func=>{ + __registeredAfterTickCallbacks.forEach(func=>{ func(); }); } tickInterval = setInterval(tick, 1000/tps); }); -function everyTick(callback){ - __registeredTickCallbacks.push(callback); +function everyTick(callback) { + afterEveryTick(callback); } +window.everyTick = everyTick; +function beforeEveryTick(callback) { + __registeredBeforeTickCallbacks.push(callback); +} +window.beforeEveryTick = beforeEveryTick; +function afterEveryTick(callback) { + __registeredAfterTickCallbacks.push(callback); +} +window.afterEveryTick = afterEveryTick; +function removeTickListener(callback, mode) { + let removed = false; + if(mode!=="before") { + let index = __registeredAfterTickCallbacks.indexOf(callback); + if (index === -1 && mode === "after") throw new Error(`Could not find callback.`); + if(index !== -1) { + __registeredAfterTickCallbacks.splice(index, 1); + removed = true; + } + } + if(mode!=="after") { + let index = __registeredBeforeTickCallbacks.indexOf(callback); + if (index === -1 && mode === "before") throw new Error(`Could not find callback.`); + if(index !== -1) { + __registeredBeforeTickCallbacks.splice(index, 1); + removed = true; + } + } + return removed; +} +window.removeTickListener = removeTickListener;