Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

89 строки
1.7 KiB

  1. define([
  2. 'js/system/events',
  3. 'js/objects/objects',
  4. 'js/rendering/renderer'
  5. ], function(
  6. events,
  7. objects,
  8. renderer
  9. ) {
  10. var scale = 40;
  11. var scaleMult = 5;
  12. return {
  13. list: [],
  14. init: function() {
  15. events.on('onGetDamage', this.onGetDamage.bind(this));
  16. },
  17. onGetDamage: function(msg) {
  18. var target = objects.objects.find(function(o) { return (o.id == msg.id); });
  19. if (!target)
  20. return;
  21. var addY = msg.event ? scale : -(scale * 0.75);
  22. var ttl = 30 * (msg.crit ? 1 : 1);
  23. var numberObj = {
  24. obj: target,
  25. amount: msg.amount,
  26. x: (target.x * scale) + ~~(Math.random() * scale - (scale / 2)),
  27. y: (target.y * scale) + addY,
  28. ttl: ttl,
  29. ttlMax: ttl,
  30. event: msg.event,
  31. text: msg.text,
  32. crit: msg.crit,
  33. heal: msg.heal
  34. };
  35. var text = numberObj.text;
  36. if (!numberObj.event)
  37. text = (numberObj.heal ? '+' : '') + (~~(numberObj.amount * 10) / 10);
  38. numberObj.sprite = renderer.buildText({
  39. fontSize: numberObj.crit ? 22 : 18,
  40. layerName: 'effects',
  41. x: numberObj.x,
  42. y: numberObj.y,
  43. text: text
  44. });
  45. this.list.push(numberObj);
  46. },
  47. render: function() {
  48. var list = this.list;
  49. var lLen = list.length;
  50. for (var i = 0; i < lLen; i++) {
  51. var l = list[i];
  52. l.ttl--;
  53. if (l.ttl == 0) {
  54. renderer.destroyObject({
  55. layerName: 'effects',
  56. sprite: l.sprite
  57. });
  58. list.splice(i, 1);
  59. i--;
  60. lLen--;
  61. continue;
  62. }
  63. if (l.event)
  64. l.y += 0.75;
  65. else
  66. l.y -= 0.75;
  67. var alpha = l.ttl / l.ttlMax;
  68. l.sprite.x = ~~(l.x / scaleMult) * scaleMult;
  69. l.sprite.y = ~~(l.y / scaleMult) * scaleMult;
  70. l.sprite.alpha = alpha;
  71. }
  72. }
  73. };
  74. });