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.
 
 
 

123 lines
2.7 KiB

  1. define([
  2. 'js/system/events',
  3. 'js/objects/objects',
  4. 'js/rendering/renderer',
  5. 'js/config'
  6. ], function (
  7. events,
  8. objects,
  9. renderer,
  10. config
  11. ) {
  12. //Create an object of the form: { elementName: elementIntegerColor, ... } from corresponding variable values.
  13. // These variables are defiend in main.less and take the form: var(--color-element-elementName)
  14. const elementColors = Object.fromEntries(
  15. ['default', 'arcane', 'frost', 'fire', 'holy', 'poison'].map(e => {
  16. const variableName = `--color-element-${e}`;
  17. const variableValue = getComputedStyle(document.documentElement).getPropertyValue(variableName);
  18. const integerColor = `0x${variableValue.replace('#', '')}`;
  19. return [e, integerColor];
  20. })
  21. );
  22. return {
  23. list: [],
  24. init: function () {
  25. events.on('onGetDamage', this.onGetDamage.bind(this));
  26. },
  27. onGetDamage: function (msg) {
  28. if (config.damageNumbers === 'off')
  29. return;
  30. let target = objects.objects.find(function (o) {
  31. return (o.id === msg.id);
  32. });
  33. if (!target || !target.isVisible)
  34. return;
  35. let ttl = 35;
  36. let numberObj = {
  37. obj: target,
  38. amount: msg.amount,
  39. x: (target.x * scale),
  40. y: (target.y * scale) + scale - (scale / 4),
  41. ttl: ttl,
  42. ttlMax: ttl,
  43. event: msg.event,
  44. text: msg.text,
  45. crit: msg.crit,
  46. heal: msg.heal,
  47. element: msg.element
  48. };
  49. if (numberObj.event) {
  50. numberObj.x += (scale / 2);
  51. numberObj.y += (scale / 2);
  52. } else if (numberObj.heal)
  53. numberObj.x -= scale;
  54. else
  55. numberObj.x += scale;
  56. let text = numberObj.text;
  57. if (!numberObj.event) {
  58. let amount = numberObj.amount;
  59. let div = ((~~(amount * 10) / 10) > 0) ? 10 : 100;
  60. text = (numberObj.heal ? '+' : '') + (~~(amount * div) / div);
  61. }
  62. const colorVariableName = config.damageNumbers === 'element' ? numberObj.element : 'default';
  63. numberObj.sprite = renderer.buildText({
  64. fontSize: numberObj.crit ? 22 : 18,
  65. layerName: 'effects',
  66. x: numberObj.x,
  67. y: numberObj.y,
  68. text: text,
  69. color: elementColors[colorVariableName]
  70. });
  71. this.list.push(numberObj);
  72. },
  73. update: function () {
  74. let list = this.list;
  75. let lLen = list.length;
  76. for (let i = 0; i < lLen; i++) {
  77. let l = list[i];
  78. l.ttl--;
  79. if (l.ttl === 0) {
  80. renderer.destroyObject({
  81. layerName: 'effects',
  82. sprite: l.sprite
  83. });
  84. list.splice(i, 1);
  85. i--;
  86. lLen--;
  87. continue;
  88. }
  89. if (l.event)
  90. l.y += 1;
  91. else
  92. l.y -= 1;
  93. let alpha = l.ttl / l.ttlMax;
  94. l.sprite.alpha = alpha;
  95. l.sprite.x = ~~(l.x / scaleMult) * scaleMult;
  96. l.sprite.y = ~~(l.y / scaleMult) * scaleMult;
  97. if (l.event)
  98. l.sprite.x -= (l.sprite.width) / 2;
  99. }
  100. }
  101. };
  102. });