You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

67 lines
1.1 KiB

  1. module.exports = {
  2. callbacks: [],
  3. speed: 100,
  4. init: function () {
  5. setInterval(this.update.bind(this), this.speed);
  6. },
  7. register: function (sourceId, callback, time, destroyCallback) {
  8. let obj = {
  9. sourceId: sourceId,
  10. callback: callback,
  11. destroyCallback: destroyCallback,
  12. time: time
  13. };
  14. this.callbacks.push(obj);
  15. return obj;
  16. },
  17. unregister: function (sourceId) {
  18. let callbacks = this.callbacks;
  19. let cLen = callbacks.length;
  20. for (let i = 0; i < cLen; i++) {
  21. let c = callbacks[i];
  22. if (c.sourceId === sourceId) {
  23. if (c.destroyCallback)
  24. c.destroyCallback();
  25. callbacks.splice(i, 1);
  26. i--;
  27. cLen--;
  28. }
  29. }
  30. },
  31. update: function () {
  32. let speed = this.speed;
  33. let callbacks = this.callbacks;
  34. let cLen = callbacks.length;
  35. for (let i = 0; i < cLen; i++) {
  36. let c = callbacks[i];
  37. //If a spellCallback kills a mob he'll unregister his callbacks
  38. if (!c) {
  39. i--;
  40. cLen--;
  41. continue;
  42. }
  43. c.time -= speed;
  44. if (c.time <= 0) {
  45. if (c.callback)
  46. c.callback();
  47. if (c.destroyCallback)
  48. c.destroyCallback();
  49. callbacks.splice(i, 1);
  50. i--;
  51. cLen--;
  52. }
  53. }
  54. }
  55. };