Source: sg2d-custom-sprite.js

"use strict";

import SG2DApplication from './sg2d-application.js';

/**
 * Кастомный спрайт, например иконка напротив счетчика ресурсов
 * @alias SG2D.CustomSprite
 */
class SG2DCustomSprite {
	/**
	 * @param {string|object}	texture - Имя текстуры или экземпляр PIXI.Texture
	 * @param {object}			[options=void 0] - Опции
	 * @param {number}				[options.x=0]
	 * @param {number}				[options.y=0]
	 * @param {(number|object)}		[options.scale=1]
	 * @param {(number|object)}		[options.anchor=1]
	 * @param {number}				[options.angle=0]
	 * @param {number}				[options.alpha=1]
	 * @param {boolean}			[options.visible=true]
	 * @param {boolean}			[options.interactive=false]
	 * @param {boolean}			[options.buttonMode=false]
	 * @param {function}			[options.pointerdown=void 0]
	 * @param {function}			[options.pointerup=void 0]
	 * @param {function}			[options.pointerupoutside=void 0]
	 * @param {function}			[options.pointerover=void 0]
	 * @param {function}			[options.pointerout=void 0]
	 * @param {object}			 [data=void 0]  Свойства объекта data попадают в this
	 */
	constructor(texture, options, data = void 0) {
		options = options || SG2DCustomSprite._options;
		this.sprite = new PIXI.Sprite(typeof texture === "string" ? PIXI.Texture.from(texture) : texture);
		this.sprite.x = options.x || 0;
		this.sprite.y = options.y || 0;
		options.scale = options.scale || {};
		if (typeof options.scale === "number") options.scale = {x: options.scale, y: options.scale};
		this.sprite.scale.x = options.scale.x === void 0 ? 1 : options.scale.x;
		this.sprite.scale.y = options.scale.y === void 0 ? 1 : options.scale.y;
		options.anchor = options.anchor || {};
		if (typeof options.anchor === "number") options.anchor = {x: options.anchor || 0, y: options.anchor || 0};
		this.sprite.anchor.set(options.anchor.x, options.anchor.y);
		this.sprite.angle = options.angle === void 0 ? 0 : options.angle;
		this.sprite.alpha = options.alpha === void 0 ? 1 : options.alpha;
		this.sprite.visible = options.visible === void 0 ? true : options.visible;
		this.sprite.interactive = options.interactive ? true : false;
		this.sprite.buttonMode = options.buttonMode ? true : false;
		
		if (options.pointerdown) this.sprite.on("pointerdown", options.pointerdown);
		if (options.pointerup) this.sprite.on("pointerup", options.pointerup);
		if (options.pointerupoutside) this.sprite.on("pointerupoutside", options.pointerupoutside);
		if (options.pointerover) this.sprite.on("pointerover", options.pointerover);
		if (options.pointerout) this.sprite.on("pointerout", options.pointerout);
		
		var container = (options.layer ? SG2DApplication.getInstance().layers[options.layer].container : SG2DApplication.getInstance().viewport);
		container.addChild(this.sprite);
		
		if (typeof data === "object") Object.assign(this, data);
		this.sprite.SG2DCustomSprite = this;
	}
}

SG2DCustomSprite._options = {};

export default SG2DCustomSprite;