Source: helpers/BaseHelper.js

import { Utils } from '../common/Utils';

const __ = {
	private: Symbol('private'),
}

/**
 * @class BaseHelper
 * The helper object.
 * @memberof THING
 */
class BaseHelper {

	/**
	 * The helper to show in scene.
	 */
	constructor() {
		this[__.private] = {};
		let _private = this[__.private];

		_private.app = Utils.getCurrentApp();

		_private.color = [1, 1, 1];

		_private.points = [];
		_private.colors = [];

		let lines = Utils.createObject('LineSegments');
		lines.setAttribute('Pickable', false);
		lines.getUserData()['isDebugNode'] = true;

		_private.lines = lines;

		_private.app.objectManager.addLateUpdateObject(this);

		// TODO: Enable instanced drawing later for line segments
	}

	// #region Override

	onDispose() {
	}

	onLateUpdate(deltaTime) {
	}

	// #endregion

	dispose() {
		this.onDispose();

		let _private = this[__.private];

		_private.lines.dispose();
		_private.lines = null;

		_private.app.objectManager.removeLateUpdateObject(this);
	}

	begin() {
		let _private = this[__.private];

		_private.points.length = 0;
		_private.colors.length = 0;
	}

	end() { }

	buildHelper(helperPoints) { }

	// Insert line.
	_insertLine(p0, p1) {
		let _private = this[__.private];

		_private.points.push(p0);
		_private.colors.push(_private.color);

		_private.points.push(p1);
		_private.colors.push(_private.color);
	}

	setVisible(value) {
		this.visible = value;
	}

	getVisible() {
		return this.visible;
	}

	// #region Accessor

	/**
	 * Get lines.
	 * @type {Object}
	 */
	get lines() {
		let _private = this[__.private];

		return _private.lines;
	}

	/**
	 * Get/Set visible.
	 * @type {Boolean}
	 */
	get visible() {
		let _private = this[__.private];

		return _private.lines.getVisible();
	}
	set visible(value) {
		let _private = this[__.private];

		_private.lines.setVisible(value);
	}

	/**
	 * Get/Set color.
	 * @type {Number|String|Array<Number>}
	 */
	get color() {
		let _private = this[__.private];

		return _private.color;
	}
	set color(value) {
		let _private = this[__.private];

		_private.color = Utils.parseColor(value);
	}

	/**
	 * Get/Set private.
	 * @private
	 */
	get private() {
		return this[__.private];
	}

	// #endregion

}

export { BaseHelper }