|
- define([
- 'js/rendering/renderer'
- ], function (
- renderer
- ) {
- return {
- type: 'lightPatch',
-
- color: 'ffeb38',
- patches: [],
- rays: [],
-
- init: function (blueprint) {
- this.blueprint = this.blueprint || {};
-
- let obj = this.obj;
-
- let x = obj.x;
- let y = obj.y;
-
- let maxDistance = Math.sqrt(Math.pow(obj.width / 3, 2) + Math.pow(obj.height / 3, 2));
- for (let i = 0; i < obj.width; i++) {
- for (let j = 0; j < obj.height; j++) {
- let distance = maxDistance - Math.sqrt(Math.pow((obj.width / 2) - i, 2) + Math.pow((obj.width / 2) - j, 2));
- const maxAlpha = (distance / maxDistance) * 0.2;
- if (maxAlpha <= 0.05)
- continue;
-
- let sprite = renderer.buildObject({
- x: (x + i),
- y: (y + j),
- sheetName: 'white',
- cell: 0,
- layerName: 'lightPatches'
- });
- sprite.alpha = (maxAlpha * 0.3) + (Math.random() * (maxAlpha * 0.7));
- sprite.tint = '0x' + this.color;
-
- const size = (3 + ~~(Math.random() * 6)) * scaleMult;
-
- sprite.width = size;
- sprite.height = size;
- sprite.x += scaleMult * ~~(Math.random() * 4);
- sprite.y += scaleMult * ~~(Math.random() * 4);
-
- sprite.blendMode = PIXI.BLEND_MODES.ADD;
-
- this.patches.push(sprite);
- }
- }
-
- let rCount = ((obj.width * obj.height) / 10) + ~~(Math.random() + 2);
- for (let i = 0; i < rCount; i++) {
- let nx = x + 3 + ~~(Math.random() * (obj.width - 1));
- let ny = y - 4 + ~~(Math.random() * (obj.height));
- let w = 1 + ~~(Math.random() * 2);
- let h = 6 + ~~(Math.random() * 13);
- let hm = 2;
-
- let rContainer = renderer.buildContainer({
- layerName: 'lightBeams'
- });
- this.rays.push(rContainer);
-
- for (let j = 0; j < h; j++) {
- let ray = renderer.buildObject({
- x: nx,
- y: ny,
- cell: 0,
- sheetName: 'white',
- parent: rContainer
- });
- ray.x = ~~((nx * scale) - (scaleMult * j));
- ray.y = (ny * scale) + (scaleMult * j * hm);
- ray.alpha = ((1.0 - (j / h)) * 0.4);
- ray.width = w * scaleMult;
- ray.height = scaleMult * hm;
- ray.tint = 0xffeb38;
- ray.blendMode = PIXI.BLEND_MODES.ADD;
- }
- }
-
- this.setVisible(this.obj.isVisible);
- },
-
- update: function () {
- let rays = this.rays;
- let rLen = rays.length;
- for (let i = 0; i < rLen; i++) {
- let r = rays[i];
-
- r.alpha += (Math.random() * 0.03) - 0.015;
- if (r.alpha < 0.3)
- r.alpha = 0.3;
- else if (r.alpha > 1)
- r.alpha = 1;
- }
- },
-
- setVisible: function (visible) {
- this.patches.forEach(function (p) {
- p.visible = visible;
- });
-
- this.rays.forEach(function (r) {
- r.visible = visible;
- });
- },
-
- destroy: function () {
- this.patches.forEach(function (p) {
- p.parent.removeChild(p);
- });
- this.patches = [];
-
- this.rays.forEach(function (r) {
- r.parent.removeChild(r);
- });
- this.rays = [];
- }
- };
- });
|