105 lines
3.1 KiB
ActionScript
105 lines
3.1 KiB
ActionScript
class TreePannel : DockPanel {
|
|
void onRender() {
|
|
Entity root = Engine::getRoot();
|
|
UI::contextMenuPopup("Window popup", any(root), ReciverFunc(this.entityContextMenu));
|
|
|
|
if (root.childs.count == 0) {
|
|
// END OF THE TREE
|
|
UI::treeNodeLeaf("Scene Environment", false);
|
|
entityInteraction(root);
|
|
} else {
|
|
// ADD ANOTHER NODE
|
|
bool opened = UI::treeNode("Scene Environment", false, any(root), ReciverFunc(this.renderNode));
|
|
if (!opened) {
|
|
entityInteraction(root);
|
|
}
|
|
}
|
|
|
|
UI::modalPopup("Rename entity", ActiveEntity::renameEntity);
|
|
}
|
|
|
|
void renderNode(any@ data) {
|
|
Entity entity;
|
|
data.retrieve(entity);
|
|
entityInteraction(entity);
|
|
|
|
// Maybe we deleted the entity in the context menu
|
|
if (!entity.exists)
|
|
return;
|
|
|
|
for (int i = 0; i < entity.childs.count; i++) {
|
|
Entity child = entity.childs[i];
|
|
bool isActive = child == ActiveEntity::getActiveEntity();
|
|
|
|
string displayName = child.name;
|
|
if (displayName == "") {
|
|
displayName = "-";
|
|
}
|
|
|
|
displayName += "##" + child.id;
|
|
if (child.childs.count == 0) {
|
|
// END OF THE TREE
|
|
UI::treeNodeLeaf(displayName, isActive);
|
|
entityInteraction(child);
|
|
} else {
|
|
// ADD ANOTHER NODE
|
|
bool opened = UI::treeNode(displayName, isActive, any(child), ReciverFunc(this.renderNode));
|
|
if (!opened) {
|
|
entityInteraction(child);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void entityInteraction(Entity entity) {
|
|
any data = any(entity);
|
|
|
|
UI::dragDropSource("ENTITY", data, entity.name);
|
|
UI::dragDropTarget("ENTITY", data, TransferFunc(this.entityDrop));
|
|
UI::contextItemPopup("POP_ENTITY_" + entity.id, data, ReciverFunc(this.entityContextMenu));
|
|
|
|
// We can't select the entity
|
|
if (UI::isItemClicked(0)) {
|
|
ActiveEntity::setActiveEntity(entity);
|
|
}
|
|
}
|
|
|
|
void entityContextMenu(any@ data) {
|
|
Entity entity;
|
|
data.retrieve(entity);
|
|
|
|
if (entity.isRoot) {
|
|
if (UI::menuItem("New Entity")) {
|
|
entity.createChild("node");
|
|
}
|
|
} else {
|
|
if (UI::menuItem("Add child")) {
|
|
entity.createChild("node");
|
|
}
|
|
|
|
if (UI::menuItem("Rename")) {
|
|
UI::openPopup("Rename entity", data);
|
|
}
|
|
|
|
if (UI::menuItem("Destroy")) {
|
|
entity.destroy();
|
|
}
|
|
}
|
|
}
|
|
|
|
void entityDrop(any@ reciver, any@ emiter) {
|
|
Entity reciver_entity;
|
|
reciver.retrieve(reciver_entity);
|
|
|
|
Entity emiter_entity;
|
|
emiter.retrieve(emiter_entity);
|
|
|
|
// You cant be the father of your father
|
|
if (emiter_entity.isRoot || reciver_entity.isDescendantOf(emiter_entity)) {
|
|
return;
|
|
}
|
|
|
|
emiter_entity.parent = reciver_entity;
|
|
}
|
|
}
|