module els{ export let registerEventListener: boolean = false; export let editorTargets: any[] = []; export function BindComponent($Class: any = null) { return function (target: Function) { editorTargets.push(target); if (!registerEventListener) { registerEventListener = true; window.addEventListener('componentsInstanceComplete', () => { if ($Class) { for (let key in Editor.editors) { var item: Editor = Editor.editors[key]; for (var m: number = 0, ml: number = editorTargets.length; m < ml; m++){ var eTarget = editorTargets[m]; if (item.constructor == eTarget) { let gameobject: GameObject = item.gameobject; let components = gameobject.components; for (let i: number = 0, l: number = components.length; i < l; i++){ var name: string = egret.getQualifiedClassName(components[i].constructor); if (name === item['componentName']) { item.component = components[i]; item.onEnabled(); break; } } break; } } } } window.dispatchEvent(new Event('componentsInitComplete')); }); } } } export class Editor{ static editors: any = {}; component: Component; gameobject: GameObject; private _id: number = 0; private static _uniqueID: number = 0; private _sceneuis: HTMLElement[]; private _componentuis: HTMLElement[]; private _renderContainer: HTMLElement; constructor() { this._id = Editor._uniqueID; Editor._uniqueID++; Editor.editors[Editor._uniqueID] = this; this._sceneuis = []; this._componentuis = []; this._renderContainer = document.createElement('div'); } get id() { return this._id; } get sceneuis() { return this._sceneuis; } get componentuis() { return this._componentuis; } get renderContainer():HTMLElement { return this._renderContainer; } /** * 每帧更新 */ tick() { } onEnabled() { } addSceneUI(ui:HTMLElement): void{ this._sceneuis.push(ui); } addComponentUI(ui:HTMLElement): void{ this._componentuis.push(ui); } } }