import { BaseComponent } from './BaseComponent';
import { Grid } from '../objects/Grid';
const __ = {
private: Symbol('private'),
}
/**
* @class AppHelperComponent
* The application helper component.
* @memberof THING
* @extends THING.BaseComponent
* @public
*/
class AppHelperComponent extends BaseComponent {
/**
* The application helper to show many useful information.
*/
constructor() {
super();
this[__.private] = {};
}
// #region BaseComponent Interface
onAdd(object) {
super.onAdd(object);
}
onRemove() {
super.onRemove();
}
// #endregion
/**
* @typedef {Object} AppDebuggerComponentEvents
* @property {Array<ObjectListenerInfo>} activatedEvents The activated events.
* @property {Array<ObjectListenerInfo>} pausedEvents The paused events.
* @private
*/
/**
* Get events.
* @type {AppDebuggerComponentEvents}
* @private
*/
get events() {
let allEvents = this.object.eventManager.getAllEventListeners();
let events = {
activatedEvents: (function () {
return allEvents.filter(event => {
if (event.paused) {
return false;
}
return true;
});
})(),
pausedEvents: (function () {
return allEvents.filter(event => {
if (!event.paused) {
return false;
}
return true;
});
})(),
};
return events;
}
/**
* @typedef {Object} AppDebuggerComponentObjects
* @property {Array<THING.BaseObject>} objects The objects.
* @property {Array<THING.BaseObject>} tickableObjects The tickable objects.
* @property {Array<THING.BaseObject>} resizableObjects The resizable objects.
* @property {Array<THING.BaseObject>} dirtyObjects The dirty objects.
* @private
*/
/**
* Get objects.
* @type {AppDebuggerComponentObjects}
* @private
*/
get objects() {
let app = this.object;
let objectManager = app.objectManager;
let objects = [];
objectManager.objects.forEach(object => {
objects.push(object);
});
return {
objects: objects,
tickableObjects: objectManager.tickableObjects,
resizableObjects: objectManager.resizableObjects,
dirtyObjects: objectManager.dirtyObjects,
};
}
/**
* Get Info.
* @type {Object}
* @private
*/
get info() {
return {
events: this.events,
objects: this.objects
};
}
/**
* Set grid helper.
* @type {Boolean | Object}
* @example
* app.helper.grid = true;
* @example
* app.helper.grid = { width: 100, height: 100, density: 10}
* @public
*/
set grid(value) {
let _private = this[__.private];
if (value) {
if (_private.grid) {
let size = value === true ? { length: 60, width: 60, density: 1 } : value;
if (!Object.keys(size).length) {
size = { length: 60, width: 60, density: 1 };
}
if (size.length === _private.grid.length && size.width === _private.grid.width && size.density === _private.grid.density) {
return;
}
else {
_private.grid.destroy();
_private.grid = null;
}
}
if (value === true) {
_private.grid = new Grid();
}
else {
_private.grid = new Grid({ size: value });
}
_private.grid.queryable = false;
}
else {
if (_private.grid) {
_private.grid.destroy();
_private.grid = null;
}
}
}
}
export { AppHelperComponent }