Просмотр исходного кода

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 10 лет назад
Родитель
Сommit
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() {
 }