define([ 'js/rendering/lightningBuilder', 'js/rendering/effects' ], function ( lightningBuilder, effects ) { return { type: 'lightningEffect', cd: 0, cdMax: 1, effect: null, ttl: 6, lineGrow: false, linePercentage: 0.1, lineShrink: false, shrinking: false, init: function () { effects.register(this); let xOffset = (this.toX >= this.obj.x) ? 1 : 0; let fromX = this.obj.x + xOffset; let fromY = this.obj.y + 0.5; let toX = this.lineGrow ? fromX : this.toX + 0.5; let toY = this.lineGrow ? fromY : this.toY + 0.5; this.effect = lightningBuilder.build({ fromX: fromX, fromY: fromY, toX: toX, toY: toY, divisions: this.divisions, colors: this.colors, maxDeviate: this.maxDeviate }); }, renderManual: function () { let linePercentage = this.linePercentage; let cdMax = this.cdMax; if (((this.lineGrow) && (linePercentage < 1)) || ((this.shrinking) && (linePercentage > 0))) cdMax = 1; if (this.cd > 0) { this.cd--; return; } this.cd = cdMax; lightningBuilder.destroy(this.effect); this.effect = null; if (!this.shrinking) { this.ttl--; if (this.ttl === 0) { this.destroyed = true; return; } } let xOffset = (this.toX >= this.obj.x) ? 1 : 0; let fromX = this.obj.x + xOffset; let fromY = this.obj.y + 0.5; let toX = this.toX + 0.5; let toY = this.toY + 0.5; let changeTo = ( ( (this.lineGrow) && (linePercentage < 1) ) || ( (this.shrinking) && (linePercentage > 0) ) ); if (changeTo) { if (this.shrinking) linePercentage /= 1.5; else { linePercentage *= 1.5; if (linePercentage > 1) linePercentage = 1; } let angle = Math.atan2(toY - fromY, toX - fromX); let distance = Math.sqrt(Math.pow(fromX - toX, 2) + Math.pow(fromY - toY, 2)); toX = fromX + (Math.cos(angle) * distance * linePercentage); toY = fromY + (Math.sin(angle) * distance * linePercentage); } this.effect = lightningBuilder.build({ fromX: fromX, fromY: fromY, toX: toX, toY: toY, divisions: this.divisions, colors: this.colors, maxDeviate: this.maxDeviate }); if ((this.shrinking) && (linePercentage < 0.1)) this.destroyed = true; this.linePercentage = linePercentage; }, destroyManual: function () { if ((!this.lineShrink) || (this.shrinking)) { if (this.effect) lightningBuilder.destroy(this.effect); //effects.unregister(this); return; } this.destroyed = false; this.shrinking = true; return true; } }; });