|
- define([
- 'js/rendering/renderer'
- ], function (
- renderer
- ) {
- let auras = {
- reflectDamage: 0,
- stealth: 1,
- regenHp: 9,
- regenMana: 10,
- swiftness: 11,
- holyVengeance: 8,
- rare: 16
- };
-
- return {
- type: 'effects',
-
- alpha: 0,
- alphaDir: 0.0025,
-
- alphaMax: 0.6,
- alphaMin: 0.35,
-
- alphaCutoff: 0.4,
-
- effects: [],
-
- init: function (blueprint) {
- this.effects = this.effects
- .filter(e => auras[e] !== null)
- .map(e => {
- return {
- name: e,
- sprite: renderer.buildObject({
- layerName: 'effects',
- sheetName: 'auras',
- x: this.obj.x,
- y: this.obj.y + 1,
- w: scale * 3,
- h: scale * 3,
- cell: auras[e]
- })
- };
- });
- },
- extend: function (blueprint) {
- if (blueprint.addEffects) {
- blueprint.addEffects = blueprint.addEffects
- .filter(e => {
- return (auras[e] !== null);
- })
- .map(e => {
- return {
- name: e,
- sprite: renderer.buildObject({
- layerName: 'effects',
- sheetName: 'auras',
- x: this.obj.x,
- y: this.obj.y + 1,
- w: scale * 3,
- h: scale * 3,
- cell: auras[e]
- })
- };
- });
-
- this.effects.push.apply(this.effects, blueprint.addEffects || []);
- }
- if (blueprint.removeEffects) {
- blueprint.removeEffects.forEach(r => {
- let effect = this.effects.find(e => e.name === r);
-
- if (!effect)
- return;
-
- renderer.destroyObject({
- layerName: 'effects',
- sprite: effect.sprite
- });
-
- this.effects.spliceFirstWhere(e => e.name === r);
- });
- }
- },
-
- update: function () {
- this.alpha += this.alphaDir;
- if ((this.alphaDir > 0) && (this.alpha >= this.alphaMax)) {
- this.alpha = this.alphaMax;
- this.alphaDir *= -1;
- } else if ((this.alphaDir < 0) && (this.alpha <= this.alphaMin)) {
- this.alpha = this.alphaMin;
- this.alphaDir *= -1;
- }
-
- let x = this.obj.x;
- let y = this.obj.y;
-
- let useAlpha = this.alpha;
- if (useAlpha < this.alphaCutoff)
- useAlpha = 0;
- else {
- useAlpha -= this.alphaCutoff;
- useAlpha /= (this.alphaMax - this.alphaCutoff);
- }
-
- this.effects.forEach(e => {
- renderer.setSpritePosition({
- x,
- y: y + 1,
- sprite: e.sprite
- });
-
- e.sprite.alpha = useAlpha;
-
- e.sprite.visible = this.obj.isVisible;
- });
- },
-
- setVisible: function (visible) {
- this.effects.forEach(e => {
- e.sprite.visible = visible;
- });
- },
-
- destroy: function () {
- this.effects.forEach(e => {
- renderer.destroyObject({
- layerName: 'effects',
- sprite: e.sprite
- });
- });
- }
- };
- });
|