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.
 
 
 

120 lines
2.5 KiB

  1. define([
  2. 'js/system/events',
  3. 'js/rendering/renderer'
  4. ], function (
  5. events,
  6. renderer
  7. ) {
  8. const hpBarPadding = scaleMult;
  9. const hpBarHeight = scaleMult;
  10. return {
  11. type: 'stats',
  12. values: null,
  13. hpSprite: null,
  14. hpSpriteInner: null,
  15. init: function (blueprint) {
  16. if (this.obj.self)
  17. events.emit('onGetStats', this.values);
  18. if (this.obj.has('serverId'))
  19. events.emit('onGetPartyStats', this.obj.serverId, this.values);
  20. let obj = this.obj;
  21. this.hpSprite = renderer.buildRectangle({
  22. layerName: 'effects',
  23. x: obj.x * scale,
  24. y: obj.y * scale,
  25. w: 1,
  26. h: 1,
  27. color: 0x802343
  28. });
  29. this.hpSpriteInner = renderer.buildRectangle({
  30. x: 0,
  31. y: 0,
  32. w: 1,
  33. h: 1,
  34. layerName: 'effects',
  35. color: 0xd43346
  36. });
  37. this.updateHpSprite();
  38. },
  39. updateHpSprite: function () {
  40. const { obj: { x, y, dead, sprite } } = this;
  41. if (dead)
  42. return;
  43. //By default, hp sprites are 10px higher than the owner object's sprite. Keeping in
  44. // mind that bigger sprites always have their 'origin' in the bottom middle tile
  45. const spriteHeight = sprite ? sprite.height : scale;
  46. const spriteWidth = sprite ? sprite.width : scale;
  47. const xOffset = -(spriteWidth - scale) / 2;
  48. const yOffset = -(spriteHeight - scale) - (scaleMult * 2);
  49. const hpBarWidth = spriteWidth - (hpBarPadding * 2);
  50. const newX = (x * scale) + hpBarPadding + xOffset;
  51. const newY = (y * scale) + yOffset;
  52. renderer.moveRectangle({
  53. sprite: this.hpSprite,
  54. x: newX,
  55. y: newY,
  56. w: hpBarWidth,
  57. h: hpBarHeight
  58. });
  59. renderer.moveRectangle({
  60. sprite: this.hpSpriteInner,
  61. x: newX,
  62. y: newY,
  63. w: (this.values.hp / this.values.hpMax) * hpBarWidth,
  64. h: hpBarHeight
  65. });
  66. const isVisible = (this.values.hp < this.values.hpMax) && (!sprite || sprite.visible);
  67. this.hpSprite.visible = isVisible;
  68. this.hpSpriteInner.visible = isVisible;
  69. },
  70. extend: function (blueprint) {
  71. let bValues = blueprint.values || {};
  72. let values = this.values;
  73. for (let b in bValues)
  74. values[b] = bValues[b];
  75. if (this.obj.self)
  76. events.emit('onGetStats', this.values, blueprint);
  77. if (this.obj.has('serverId'))
  78. events.emit('onGetPartyStats', this.obj.serverId, this.values);
  79. this.updateHpSprite();
  80. },
  81. destroy: function () {
  82. renderer.destroyObject({
  83. sprite: this.hpSprite,
  84. layerName: 'effects'
  85. });
  86. renderer.destroyObject({
  87. sprite: this.hpSpriteInner,
  88. layerName: 'effects'
  89. });
  90. }
  91. };
  92. });