Explorar o código

Added ability to edit the root entity of an entity file in the IDE entity editor (automatically selectes when nothing else is selected or selected via tree)

Ivan Safrin %!s(int64=10) %!d(string=hai) anos
pai
achega
7cd3a8c427

+ 2 - 1
IDE/Contents/Include/EntityEditorPropertyView.h

@@ -38,10 +38,11 @@ class EntityEditorPropertyView : public UIElement {
         ~EntityEditorPropertyView();
     
         void setEntityInstance(SceneEntityInstance *instance);
-        void setEntity(Entity *entity);
+        void setEntity(Entity *entity, bool rootEntityMode = false);
         void handleEvent(Event *event);
         void updateShaderOptions();
     
+        PropList *getEntityProps();
         void Resize(Number width, Number height);
     
     protected:

+ 1 - 1
IDE/Contents/Include/PolycodeEntityEditor.h

@@ -259,7 +259,7 @@ class EntityEditorMainView : public UIElement {
     
             void didPlaceEntity(Entity *entity);
     
-            void setBBox();
+            void setBBox(Entity *targetEntity = NULL);
     
             Entity *getObjectRoot();
             void setObjectRoot(SceneEntityInstance *entity);

+ 2 - 1
IDE/Contents/Include/PolycodeProps.h

@@ -953,6 +953,7 @@ class PropList : public UIElement {
 		void updateProps();
 		void updateSize();
     
+        void setCaption(const String &newCaption);
 		void addPropSheet(PropSheet *sheet);
 		void handleEvent(Event *event);
 		void Resize(Number width, Number height);
@@ -961,7 +962,7 @@ class PropList : public UIElement {
 	protected:
 	
 		UIElement *propContents;
-	
+        UILabel *label;
 		std::vector<PropSheet*> props;	
 		UIRect *bg;
 		UIRect *bg2;				

+ 12 - 3
IDE/Contents/Source/EntityEditorPropertyView.cpp

@@ -93,6 +93,10 @@ EntityEditorPropertyView::EntityEditorPropertyView() : UIElement() {
     
 }
 
+PropList *EntityEditorPropertyView::getEntityProps() {
+    return entityProps;
+}
+
 void EntityEditorPropertyView::setEntityInstance(SceneEntityInstance *instance) {
     materialSheet->setEntityInstance(instance);
     entitySheet->setEntityInstance(instance);
@@ -142,7 +146,7 @@ void EntityEditorPropertyView::updateShaderOptions() {
     }
 }
 
-void EntityEditorPropertyView::setEntity(Entity *entity) {
+void EntityEditorPropertyView::setEntity(Entity *entity, bool rootEntityMode) {
     
     targetEntity = entity;
     
@@ -183,8 +187,13 @@ void EntityEditorPropertyView::setEntity(Entity *entity) {
 
     entitySheet->setEntity(entity);
     propSheet->setEntity(entity);
-    transformSheet->setEntity(entity);
-        
+    
+    if(!rootEntityMode) {
+        transformSheet->setEntity(entity);
+    } else {
+        transformSheet->setEntity(NULL);
+    }
+    
     Resize(getWidth(), getHeight());
 }
 

+ 8 - 3
IDE/Contents/Source/EntityEditorTreeView.cpp

@@ -152,10 +152,10 @@ void EntityEditorTreeSheet::handleEvent(Event *event) {
 	if(event->getDispatcher() == treeContainer->getRootNode()) {
 		if(event->getEventCode() == UITreeEvent::SELECTED_EVENT){
 			if(!dontSendSelectionEvent) {
-                if(treeContainer->getRootNode()->getSelectedNode() != treeContainer->getRootNode()) {
+//                if(treeContainer->getRootNode()->getSelectedNode() != treeContainer->getRootNode()) {
                     selectedEntity = (Entity*)treeContainer->getRootNode()->getSelectedNode()->getUserData();
                     dispatchEvent(new Event(), Event::CHANGE_EVENT);
-                }
+//                }
 			}
 			dontSendSelectionEvent = false;
 		}
@@ -169,7 +169,12 @@ void EntityEditorTreeView::setEntityInstance(SceneEntityInstance *instance) {
 }
 
 void EntityEditorTreeSheet::refreshTree() {
-    syncNodeToEntity(treeContainer->getRootNode(), rootEntity);
+    if(selectedEntity == rootEntity) {
+        dontSendSelectionEvent = true;
+        treeContainer->getRootNode()->setSelected();
+    } else {
+        syncNodeToEntity(treeContainer->getRootNode(), rootEntity);
+    }
 }
 
 EntityEditorTreeSheet::~EntityEditorTreeSheet() {

+ 38 - 30
IDE/Contents/Source/PolycodeEntityEditor.cpp

@@ -993,7 +993,13 @@ void EntityEditorMainView::Update() {
         }
     }
     
-    setBBox();
+    if(selectedEntities.size() > 0) {
+        setBBox();
+        bBoxVis->wireFrameColor = Color(0.3, 0.5, 1.0, 0.5);
+    } else {
+        setBBox(getObjectRoot());
+        bBoxVis->wireFrameColor = Color(0.5, 1.0, 0.3, 0.5);
+    }
 }
 
 void EntityEditorMainView::createIcon(Entity *entity, String iconFile) {
@@ -1493,24 +1499,6 @@ void EntityEditorMainView::handleEvent(Event *event) {
                     didPlaceEntity(newSprite);
                     selectEntity(newSprite, false, false);
                 }
-                
-                /*
-                SceneSprite *newSprite = new SceneSprite(globalFrame->assetBrowser->getSelectedAssetPath());
-                
-                if(newSprite->getNumAnimations()) {
-                    newSprite->playAnimation(newSprite->getAnimationAtIndex(0)->name, 0, false);
-                }
-                
-                newSprite->setMaterialByName("Unlit");
-                if(newSprite->getLocalShaderOptions()) {
-                    newSprite->getLocalShaderOptions()->addTexture("diffuse", newSprite->getTexture());
-                }
-                sceneObjectRoot->addChild(newSprite);
-                setEditorProps(newSprite);
-                newSprite->setPosition(cursorPosition);
-                didPlaceEntity(newSprite);
-                selectEntity(newSprite, false, false);
-                 */
             } else if(assetSelectType == "entity") {
                 SceneEntityInstance *newEntity = new SceneEntityInstance(mainScene, globalFrame->assetBrowser->getSelectedAssetPath());
                 sceneObjectRoot->addChild(newEntity);
@@ -1626,7 +1614,7 @@ void EntityEditorMainView::handleEvent(Event *event) {
             Entity* targetEntity = (Entity*) event->getDispatcher();
             
             
-            if(inputEvent->mouseButton == CoreInput::MOUSE_BUTTON2 && targetEntity->visible) {
+            if(inputEvent->mouseButton == CoreInput::MOUSE_BUTTON2 && targetEntity->visible && targetEntity != getObjectRoot()) {
 
                 
                 // if it's an icon, select the entity linked to the icon
@@ -1890,19 +1878,25 @@ void EntityEditorMainView::selectEntity(Entity *targetEntity, bool addToSelectio
     
 }
 
-void EntityEditorMainView::setBBox() {
-    if(selectedEntities.size() > 0) {
+void EntityEditorMainView::setBBox(Entity *targetEntity) {
+    
+    if(!targetEntity) {
+        if(selectedEntities.size() > 0) {
+            targetEntity = selectedEntities[0];
+        }
+    }
+    
+    if(!targetEntity) {
+        bBoxVis->visible = false;
+        return;
+    } else {
+    
         bBoxVis->visible = true;
-        
-        Entity *targetEntity = selectedEntities[0];
         bBoxVis->setPrimitiveOptions(ScenePrimitive::TYPE_BOX, targetEntity->getLocalBoundingBox().x, targetEntity->getLocalBoundingBox().y, targetEntity->getLocalBoundingBox().z);
         
         Matrix4 mat = targetEntity->getConcatenatedMatrix();
         bBoxVis->setTransformByMatrixPure(mat);
         bBoxVis->dirtyMatrix(false);
-        
-    } else {
-        bBoxVis->visible = false;
     }
 }
 
@@ -2049,14 +2043,26 @@ PolycodeEntityEditor::PolycodeEntityEditor() : PolycodeEditor(true){
 void PolycodeEntityEditor::handleEvent(Event *event) {
     
     if(event->getDispatcher() == treeView->getTreeSheet()) {
-        mainView->selectEntity(treeView->getTreeSheet()->getSelectedEntity());
+        if(treeView->getTreeSheet()->getSelectedEntity() == mainView->getObjectRoot()) {
+            mainView->selectNone(true);
+        } else {
+            mainView->selectEntity(treeView->getTreeSheet()->getSelectedEntity());
+        }
     }
     
     if(event->getDispatcher() == mainView) {
         switch(event->getEventCode()) {
             case Event::CHANGE_EVENT:
-                propertyView->setEntity(mainView->getSelectedEntity());
-                treeView->getTreeSheet()->setSelectedEntity(mainView->getSelectedEntity());
+                if(mainView->getSelectedEntity()) {
+                    propertyView->setEntity(mainView->getSelectedEntity());
+                    treeView->getTreeSheet()->setSelectedEntity(mainView->getSelectedEntity());
+                    propertyView->getEntityProps()->setCaption("PROPERTIES");
+                } else {
+                    propertyView->setEntity(mainView->getObjectRoot(), true);
+                    treeView->getTreeSheet()->setSelectedEntity(mainView->getObjectRoot());
+                    propertyView->getEntityProps()->setCaption("ROOT ENTITY");
+                    mainView->setBBox(mainView->getObjectRoot());
+                }
             break;
         }
     }
@@ -2106,6 +2112,8 @@ bool PolycodeEntityEditor::openFile(OSFileEntry filePath) {
     propertyView->setEntityInstance(loadedInstance);
     settingsView->setEntityInstance(loadedInstance);
     
+    mainView->dispatchEvent(new Event(), Event::CHANGE_EVENT);
+    
 	return true;
 }
 

+ 5 - 1
IDE/Contents/Source/PolycodeProps.cpp

@@ -133,7 +133,7 @@ PropList::PropList(String caption) : UIElement() {
 	
 	addFocusChild(bg2);
 
-	UILabel *label = new UILabel(caption, 18, "section", Label::ANTIALIAS_FULL);
+	label = new UILabel(caption, 18, "section", Label::ANTIALIAS_FULL);
 	label->color.setColorHexFromString(CoreServices::getInstance()->getConfig()->getStringValue("Polycode", "uiHeaderFontColor"));
 	addFocusChild(label);
 	label->setPosition(10, 3);
@@ -148,6 +148,10 @@ PropList::PropList(String caption) : UIElement() {
     ownsChildren = true;
 }
 
+void PropList::setCaption(const String &newCaption) {
+    label->setText(newCaption);
+}
+
 PropList::~PropList() {
 }