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

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();
         ~EntityEditorPropertyView();
     
     
         void setEntityInstance(SceneEntityInstance *instance);
         void setEntityInstance(SceneEntityInstance *instance);
-        void setEntity(Entity *entity);
+        void setEntity(Entity *entity, bool rootEntityMode = false);
         void handleEvent(Event *event);
         void handleEvent(Event *event);
         void updateShaderOptions();
         void updateShaderOptions();
     
     
+        PropList *getEntityProps();
         void Resize(Number width, Number height);
         void Resize(Number width, Number height);
     
     
     protected:
     protected:

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

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

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

@@ -953,6 +953,7 @@ class PropList : public UIElement {
 		void updateProps();
 		void updateProps();
 		void updateSize();
 		void updateSize();
     
     
+        void setCaption(const String &newCaption);
 		void addPropSheet(PropSheet *sheet);
 		void addPropSheet(PropSheet *sheet);
 		void handleEvent(Event *event);
 		void handleEvent(Event *event);
 		void Resize(Number width, Number height);
 		void Resize(Number width, Number height);
@@ -961,7 +962,7 @@ class PropList : public UIElement {
 	protected:
 	protected:
 	
 	
 		UIElement *propContents;
 		UIElement *propContents;
-	
+        UILabel *label;
 		std::vector<PropSheet*> props;	
 		std::vector<PropSheet*> props;	
 		UIRect *bg;
 		UIRect *bg;
 		UIRect *bg2;				
 		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) {
 void EntityEditorPropertyView::setEntityInstance(SceneEntityInstance *instance) {
     materialSheet->setEntityInstance(instance);
     materialSheet->setEntityInstance(instance);
     entitySheet->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;
     targetEntity = entity;
     
     
@@ -183,8 +187,13 @@ void EntityEditorPropertyView::setEntity(Entity *entity) {
 
 
     entitySheet->setEntity(entity);
     entitySheet->setEntity(entity);
     propSheet->setEntity(entity);
     propSheet->setEntity(entity);
-    transformSheet->setEntity(entity);
-        
+    
+    if(!rootEntityMode) {
+        transformSheet->setEntity(entity);
+    } else {
+        transformSheet->setEntity(NULL);
+    }
+    
     Resize(getWidth(), getHeight());
     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->getDispatcher() == treeContainer->getRootNode()) {
 		if(event->getEventCode() == UITreeEvent::SELECTED_EVENT){
 		if(event->getEventCode() == UITreeEvent::SELECTED_EVENT){
 			if(!dontSendSelectionEvent) {
 			if(!dontSendSelectionEvent) {
-                if(treeContainer->getRootNode()->getSelectedNode() != treeContainer->getRootNode()) {
+//                if(treeContainer->getRootNode()->getSelectedNode() != treeContainer->getRootNode()) {
                     selectedEntity = (Entity*)treeContainer->getRootNode()->getSelectedNode()->getUserData();
                     selectedEntity = (Entity*)treeContainer->getRootNode()->getSelectedNode()->getUserData();
                     dispatchEvent(new Event(), Event::CHANGE_EVENT);
                     dispatchEvent(new Event(), Event::CHANGE_EVENT);
-                }
+//                }
 			}
 			}
 			dontSendSelectionEvent = false;
 			dontSendSelectionEvent = false;
 		}
 		}
@@ -169,7 +169,12 @@ void EntityEditorTreeView::setEntityInstance(SceneEntityInstance *instance) {
 }
 }
 
 
 void EntityEditorTreeSheet::refreshTree() {
 void EntityEditorTreeSheet::refreshTree() {
-    syncNodeToEntity(treeContainer->getRootNode(), rootEntity);
+    if(selectedEntity == rootEntity) {
+        dontSendSelectionEvent = true;
+        treeContainer->getRootNode()->setSelected();
+    } else {
+        syncNodeToEntity(treeContainer->getRootNode(), rootEntity);
+    }
 }
 }
 
 
 EntityEditorTreeSheet::~EntityEditorTreeSheet() {
 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) {
 void EntityEditorMainView::createIcon(Entity *entity, String iconFile) {
@@ -1493,24 +1499,6 @@ void EntityEditorMainView::handleEvent(Event *event) {
                     didPlaceEntity(newSprite);
                     didPlaceEntity(newSprite);
                     selectEntity(newSprite, false, false);
                     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") {
             } else if(assetSelectType == "entity") {
                 SceneEntityInstance *newEntity = new SceneEntityInstance(mainScene, globalFrame->assetBrowser->getSelectedAssetPath());
                 SceneEntityInstance *newEntity = new SceneEntityInstance(mainScene, globalFrame->assetBrowser->getSelectedAssetPath());
                 sceneObjectRoot->addChild(newEntity);
                 sceneObjectRoot->addChild(newEntity);
@@ -1626,7 +1614,7 @@ void EntityEditorMainView::handleEvent(Event *event) {
             Entity* targetEntity = (Entity*) event->getDispatcher();
             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
                 // 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;
         bBoxVis->visible = true;
-        
-        Entity *targetEntity = selectedEntities[0];
         bBoxVis->setPrimitiveOptions(ScenePrimitive::TYPE_BOX, targetEntity->getLocalBoundingBox().x, targetEntity->getLocalBoundingBox().y, targetEntity->getLocalBoundingBox().z);
         bBoxVis->setPrimitiveOptions(ScenePrimitive::TYPE_BOX, targetEntity->getLocalBoundingBox().x, targetEntity->getLocalBoundingBox().y, targetEntity->getLocalBoundingBox().z);
         
         
         Matrix4 mat = targetEntity->getConcatenatedMatrix();
         Matrix4 mat = targetEntity->getConcatenatedMatrix();
         bBoxVis->setTransformByMatrixPure(mat);
         bBoxVis->setTransformByMatrixPure(mat);
         bBoxVis->dirtyMatrix(false);
         bBoxVis->dirtyMatrix(false);
-        
-    } else {
-        bBoxVis->visible = false;
     }
     }
 }
 }
 
 
@@ -2049,14 +2043,26 @@ PolycodeEntityEditor::PolycodeEntityEditor() : PolycodeEditor(true){
 void PolycodeEntityEditor::handleEvent(Event *event) {
 void PolycodeEntityEditor::handleEvent(Event *event) {
     
     
     if(event->getDispatcher() == treeView->getTreeSheet()) {
     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) {
     if(event->getDispatcher() == mainView) {
         switch(event->getEventCode()) {
         switch(event->getEventCode()) {
             case Event::CHANGE_EVENT:
             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;
             break;
         }
         }
     }
     }
@@ -2106,6 +2112,8 @@ bool PolycodeEntityEditor::openFile(OSFileEntry filePath) {
     propertyView->setEntityInstance(loadedInstance);
     propertyView->setEntityInstance(loadedInstance);
     settingsView->setEntityInstance(loadedInstance);
     settingsView->setEntityInstance(loadedInstance);
     
     
+    mainView->dispatchEvent(new Event(), Event::CHANGE_EVENT);
+    
 	return true;
 	return true;
 }
 }
 
 

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

@@ -133,7 +133,7 @@ PropList::PropList(String caption) : UIElement() {
 	
 	
 	addFocusChild(bg2);
 	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"));
 	label->color.setColorHexFromString(CoreServices::getInstance()->getConfig()->getStringValue("Polycode", "uiHeaderFontColor"));
 	addFocusChild(label);
 	addFocusChild(label);
 	label->setPosition(10, 3);
 	label->setPosition(10, 3);
@@ -148,6 +148,10 @@ PropList::PropList(String caption) : UIElement() {
     ownsChildren = true;
     ownsChildren = true;
 }
 }
 
 
+void PropList::setCaption(const String &newCaption) {
+    label->setText(newCaption);
+}
+
 PropList::~PropList() {
 PropList::~PropList() {
 }
 }