Non puoi selezionare più di 25 argomenti Gli argomenti devono iniziare con una lettera o un numero, possono includere trattini ('-') e possono essere lunghi fino a 35 caratteri.
 
 
 

119 righe
2.6 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.y += (scale / 2);
  51. else if (numberObj.heal)
  52. numberObj.x -= scale;
  53. else
  54. numberObj.x += scale;
  55. let text = numberObj.text;
  56. if (!numberObj.event) {
  57. let amount = numberObj.amount;
  58. let div = ((~~(amount * 10) / 10) > 0) ? 10 : 100;
  59. text = (numberObj.heal ? '+' : '') + (~~(amount * div) / div);
  60. }
  61. const colorVariableName = config.damageNumbers === 'element' ? numberObj.element : 'default';
  62. numberObj.sprite = renderer.buildText({
  63. fontSize: numberObj.crit ? 22 : 18,
  64. layerName: 'effects',
  65. x: numberObj.x,
  66. y: numberObj.y,
  67. text: text,
  68. color: elementColors[colorVariableName]
  69. });
  70. this.list.push(numberObj);
  71. },
  72. update: function () {
  73. let list = this.list;
  74. let lLen = list.length;
  75. for (let i = 0; i < lLen; i++) {
  76. let l = list[i];
  77. l.ttl--;
  78. if (l.ttl === 0) {
  79. renderer.destroyObject({
  80. layerName: 'effects',
  81. sprite: l.sprite
  82. });
  83. list.splice(i, 1);
  84. i--;
  85. lLen--;
  86. continue;
  87. }
  88. if (l.event)
  89. l.y += 1;
  90. else
  91. l.y -= 1;
  92. let alpha = l.ttl / l.ttlMax;
  93. l.sprite.x = ~~(l.x / scaleMult) * scaleMult;
  94. l.sprite.y = ~~(l.y / scaleMult) * scaleMult;
  95. l.sprite.alpha = alpha;
  96. }
  97. }
  98. };
  99. });