Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.
 
 
 

162 Zeilen
3.0 KiB

  1. define([
  2. 'js/components/components',
  3. 'js/rendering/renderer',
  4. 'js/system/events'
  5. ], function(
  6. components,
  7. renderer,
  8. events
  9. ) {
  10. var scale = 40;
  11. var scaleMult = 5;
  12. return {
  13. components: [],
  14. offsetX: 0,
  15. offsetY: 0,
  16. eventCallbacks: {},
  17. addComponent: function(type, options) {
  18. var c = this[type];
  19. if ((!c) || (options.new)) {
  20. var template = components.getTemplate(type);
  21. if (!template)
  22. return;
  23. c = $.extend(true, {}, template);
  24. c.obj = this;
  25. for (var o in options) {
  26. c[o] = options[o];
  27. }
  28. //Only use component to initialize other components?
  29. if ((c.init) && (c.init(options)))
  30. return null;
  31. this[c.type] = c;
  32. this.components.push(c);
  33. return c;
  34. }
  35. else {
  36. if (c.extend)
  37. c.extend(options);
  38. return c;
  39. }
  40. },
  41. render: function() {
  42. return;
  43. if (this.sheetName)
  44. canvas.renderObject(this);
  45. var components = this.components;
  46. var len = components.length;
  47. for (var i = 0; i < len; i++) {
  48. var c = components[i];
  49. if (c.render)
  50. c.render();
  51. }
  52. },
  53. update: function() {
  54. var components = this.components;
  55. var len = components.length;
  56. for (var i = 0; i < len; i++) {
  57. var c = components[i];
  58. if (c.update)
  59. c.update();
  60. if (c.destroyed) {
  61. if (c.destroy)
  62. c.destroy();
  63. components.splice(i, 1);
  64. i--;
  65. len--;
  66. delete this[c.type];
  67. }
  68. }
  69. },
  70. on: function(event, callback) {
  71. var list = this.eventCallbacks[event] || (this.eventCallbacks[event] = []);
  72. list.push(events.on(event, callback));
  73. },
  74. setSpritePosition: function() {
  75. if (!this.sprite)
  76. return;
  77. this.sprite.x = (this.x * scale) + (this.flipX ? scale : 0) + this.offsetX;
  78. var oldY = this.sprite.x;
  79. this.sprite.y = (this.y * scale) + this.offsetY;
  80. if (this.sprite.width > scale) {
  81. if (this.flipX)
  82. this.sprite.x += scale;
  83. else
  84. this.sprite.x -= scale;
  85. this.sprite.y -= (scale * 2);
  86. }
  87. if (oldY != this.sprite.y)
  88. renderer.reorder();
  89. this.sprite.scale.x = (this.flipX ? -scaleMult : scaleMult);
  90. ['nameSprite', 'chatSprite'].forEach(function(s, i) {
  91. var sprite = this[s];
  92. if (!sprite)
  93. return;
  94. var yAdd = scale;
  95. if (i == 1)
  96. yAdd *= -0.8;
  97. sprite.x = (this.x * scale) + (scale / 2) - (sprite.width / 2);
  98. sprite.y = (this.y * scale) + yAdd;
  99. }, this);
  100. if (this.stats)
  101. this.stats.updateHpSprite();
  102. },
  103. destroy: function() {
  104. if (this.sprite)
  105. renderer.destroyObject(this);
  106. if (this.nameSprite)
  107. renderer.destroyObject({
  108. layerName: 'effects',
  109. sprite: this.nameSprite
  110. });
  111. var components = this.components;
  112. var cLen = components.length;
  113. for (var i = 0; i < cLen; i++) {
  114. var c = components[i];
  115. if (c.destroy)
  116. c.destroy();
  117. }
  118. this.destroyed = true;
  119. this.offEvents();
  120. },
  121. offEvents: function() {
  122. if (this.pather)
  123. this.pather.onDeath();
  124. for (var e in this.eventCallbacks) {
  125. this.eventCallbacks[e].forEach(function(c) {
  126. events.off(e, c);
  127. }, this);
  128. }
  129. }
  130. };
  131. });