import * as React from 'react'; import { Tabs, Tree } from 'antd'; import { MessageUtils } from '../message/MessageUtils'; import { HierarchyMessage } from './events/HierarchyMessage'; import { ProjectMessage } from '../project/events/ProjectMessage'; import { Project } from '../project/data/Project'; import { Global } from '../../utils/Global'; import { GameUIScene } from '../project/data/GameUIScene'; import { GameUIObject } from '../project/data/GameUIObject'; import { PropertyMessage } from '../property/events/PropertyMessage'; import { SceneMessage } from '../../plugins/scene/events/SceneMessage'; import { GameUIComponent } from '../project/data/GameUIComponent'; import { ComponentUtils } from '../../utils/ComponentUtils'; const ipcRender = require('electron').ipcRenderer; const clipboard: Electron.Clipboard = require('electron').clipboard; export class HierarchyTab extends React.Component{ constructor() { super(); this.state = { treeNodes: [], defaultExpandedKeys: [] }; this.onRPCReceived(); } onRPCReceived() { ipcRender.on("menu-hierarchy-rightmenu-callback", (sender, data: [string, number, string]) => { switch (data[2]) { case "copy": this.on_copy(data); break; case "parse": this.on_parse(data); break; case "delete": this.on_delete(data); break; case "rename": this.on_rename(data); break; case "clone": this.on_clone(data); break; case "create_gamobject": this.on_create_gameobject(data); break; case "create_displayobject_sprite": this.on_create_displayobject_sprite(data); break; case "create_displayobject_spritesheet": this.on_create_displayobject_spritesheet(data); break; case "create_displayobject_animate": this.on_create_displayobject_animate(data); break; case "create_displayobject_button": this.on_create_displayobject_button(data); break; case "create_displayobject_scale9grid": this.on_create_displayobject_scale9grid(data); break; case "create_displayobject_tiledbackground": this.on_create_displayobject_tiledbackground(data); break; case "create_displayobject_textfield": this.on_create_displayobject_textfield(data); break; case "create_displayobject_bitmapfont": this.on_create_displayobject_bitmapfont(data); break; case "create_displayobject_tiled": this.on_create_displayobject_tiled(data); break; case "create_displayobject_dragonbones": this.on_create_displayobject_dragonbones(data); break; case "create_displayobject_particles": this.on_create_displayobject_particles(data); break; case "create_media_audio": this.on_create_media_audio(data); break; case "create_media_video": this.on_create_media_video(data); break; } }); } on_copy(data:[string,number,string]) { let uid: number = data[1]; clipboard.writeText(uid.toString(), ''); } on_parse(data:[string,number,string]) { let copyUID: number = parseInt(clipboard.readText('')); if (copyUID) { let uid: number = data[1]; let project: Project = Global.currentProject; let uiScene: GameUIScene = project.getGameUIScene(project.currentSceneName); let sourceGameUIObject: GameUIObject = uiScene.getGameObjectByUID(copyUID); let copyGameObject = sourceGameUIObject ? sourceGameUIObject.clone() : null; let parentGameUIObject: GameUIObject = uiScene.getGameObjectByUID(uid); if (parentGameUIObject) { parentGameUIObject.addChild(copyGameObject); } //添加游戏对象 MessageUtils.send(SceneMessage.SCENE_ADD_GAMEOBJECT, { parent: parentGameUIObject, target: copyGameObject }); //更新游戏树 this.onShowGameobjectTree(); } } on_delete(data: [string, number, string]) { let uid: number = data[1]; let project: Project = Global.currentProject; let uiScene: GameUIScene = project.getGameUIScene(project.currentSceneName); let currentGameUIObject: GameUIObject = uiScene.getGameObjectByUID(uid); currentGameUIObject.removeFromParent(); //添加游戏对象 MessageUtils.send(SceneMessage.SCENE_ADD_GAMEOBJECT, { parent: currentGameUIObject.parent, target: currentGameUIObject }); //更新游戏树 this.onShowGameobjectTree(); } on_rename(data:[string,number,string]) { let uid: number = data[1]; let project: Project = Global.currentProject; let uiScene: GameUIScene = project.getGameUIScene(project.currentSceneName); let currentGameUIObject: GameUIObject = uiScene.getGameObjectByUID(uid); //添加游戏对象 MessageUtils.send(SceneMessage.SCENE_UPDATE_GAMEOBJECT, { parent: currentGameUIObject.parent, target: currentGameUIObject }); //更新游戏树 this.onShowGameobjectTree(); } on_clone(data:[string,number,string]) { let uid: number = data[1]; let project: Project = Global.currentProject; let uiScene: GameUIScene = project.getGameUIScene(project.currentSceneName); let sourceGameUIObject: GameUIObject = uiScene.getGameObjectByUID(uid); let copyGameObject = sourceGameUIObject ? sourceGameUIObject.clone() : null; let parentGameUIObject: GameUIObject = sourceGameUIObject.parent; if (parentGameUIObject) { parentGameUIObject.addChild(copyGameObject); } //添加游戏对象 MessageUtils.send(SceneMessage.SCENE_ADD_GAMEOBJECT, { parent: parentGameUIObject, target: copyGameObject }); //更新游戏树 this.onShowGameobjectTree(); } private on_create_gameobject(data:[string,number,string]): void{ let name: string = data[0]; let uid: number = data[1]; let type: string = data[2]; let uiGameObject: GameUIObject = GameUIObject.createInstance(); let project: Project = Global.currentProject; let uiScene: GameUIScene = project.getGameUIScene(project.currentSceneName); let parentGameUIObject: GameUIObject = uiScene.getGameObjectByUID(uid); if (parentGameUIObject) { parentGameUIObject.addChild(uiGameObject); } //添加游戏对象 MessageUtils.send(SceneMessage.SCENE_ADD_GAMEOBJECT, { parent: parentGameUIObject, target: uiGameObject }); //更新游戏树 this.onShowGameobjectTree(); } on_create_displayobject_sprite(data:[string,number,string]) { this.on_create_internal_gameobject(data[1], "new Sprite", "els.SpriteRenderer"); } on_create_displayobject_spritesheet(data:[string,number,string]) { } on_create_displayobject_animate(data:[string,number,string]) { this.on_create_internal_gameobject(data[1], "new Animation", "els.AnimationRenderer"); } on_create_displayobject_button(data:[string,number,string]) { this.on_create_internal_gameobject(data[1], "new Button", "els.ButtonRenderer"); } on_create_displayobject_scale9grid(data:[string,number,string]) { } on_create_displayobject_tiledbackground(data:[string,number,string]) { this.on_create_internal_gameobject(data[1], "new TiledBackground", "els.TiledBackgroundRenderer"); } on_create_displayobject_textfield(data:[string,number,string]) { this.on_create_internal_gameobject(data[1], "new TextField", "els.TextFieldRenderer"); } on_create_displayobject_bitmapfont(data:[string,number,string]) { } on_create_displayobject_tiled(data:[string,number,string]) { } on_create_displayobject_dragonbones(data:[string,number,string]) { this.on_create_internal_gameobject(data[1], "new DragonBones", "els.DragonBonesRenderer"); } on_create_displayobject_particles(data:[string,number,string]) { } on_create_media_audio(data:[string,number,string]) { } on_create_media_video(data:[string,number,string]) { } public onShowGameobjectTree() { const TreeNode = Tree.TreeNode; let project: Project = Global.currentProject; let scenes: GameUIScene[] = project.uiScenes; let currentScene: GameUIScene = project.getGameUIScene(project.currentSceneName); this.state.treeNodes = []; const loop = (data: GameUIObject[]) => { return data.map((item: GameUIObject) => { const itemdata: any =
{item.name}
; return {item.children && loop(item.children)}; }) } this.setState({ treeNodes: loop(currentScene.children) }); } private execTreeNodes(item:GameUIObject,data) { } onSelect(selectedKeys, e: { delected: boolean, selectedNodes, node, event }) { console.log(selectedKeys, e.node); let selectUIGameobject: GameUIObject = e.node.props.data; if (selectUIGameobject) MessageUtils.send(PropertyMessage.SHOW_GAMEOBJECT_PROPERTY, selectUIGameobject.data); } onCheck(info) { } onRightMenu(data: { event, node }) { let selectUIGameobject: GameUIObject = data.node.props.data; let name: string = selectUIGameobject.data.name; let uid: number = selectUIGameobject.data.UID; ipcRender.send('menu-hierarchy-rightmenu', [name, uid]); } onExpand(expandedKeys: string, data: { expanded: boolean, node }) { } private on_create_internal_gameobject(uid: number, gameobjectName: string, componentClassName: string) { let uiGameObject: GameUIObject = GameUIObject.createInstance(); uiGameObject.name = gameobjectName; let project: Project = Global.currentProject; let uiScene: GameUIScene = project.getGameUIScene(project.currentSceneName); let parentGameUIObject: GameUIObject = uiScene.getGameObjectByUID(uid); if (parentGameUIObject) { parentGameUIObject.addChild(uiGameObject); } let component: GameUIComponent = new GameUIComponent(); component.name = componentClassName; ComponentUtils.bindPropertys(component); uiGameObject.addComponent(component); //添加游戏对象 MessageUtils.send(SceneMessage.SCENE_ADD_GAMEOBJECT, { parent: parentGameUIObject, target: uiGameObject }); //更新游戏树 this.onShowGameobjectTree(); } render() { const TabPane = Tabs.TabPane; const TreeNode = Tree.TreeNode; return ( {this.state.treeNodes} ); } }