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

Entites will have their parent entity set to NULL now when removed from their parent, lights in the entity editor are now properly removed and added on Undo/Redo events, fixed small icon version in the editor

Ivan Safrin 12 лет назад
Родитель
Сommit
651c4e600c

+ 1 - 0
Core/Contents/Source/PolyEntity.cpp

@@ -240,6 +240,7 @@ void Entity::lookAtEntity(Entity *entity,  const Vector3 &upVector) {
 void Entity::removeChild(Entity *entityToRemove) {
 	for(int i=0;i<children.size();i++) {
 		if(children[i] == entityToRemove) {
+            entityToRemove->setParentEntity(NULL);
 			children.erase(children.begin()+i);
 			return;
 		}

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

@@ -73,7 +73,9 @@ class PolycodeSceneEditorActionData : public PolycodeEditorActionData {
         ~PolycodeSceneEditorActionData() {
             if(deleteEntitiesInDestructor) {
                 for(int i=0; i < entries.size(); i++) {
-                    delete entries[i].entity;
+                    if(!entries[i].entity->getParentEntity()) {
+                        delete entries[i].entity;
+                    }
                 }
             }
         }

BIN
IDE/Contents/Resources/Images/entityEditor/nolights_icon.png


+ 1 - 1
IDE/Contents/Source/PolycodeEditor.cpp

@@ -106,7 +106,7 @@ void PolycodeEditor::handleEvent(Event *event) {
 			break;
 			case Core::EVENT_UNDO:
 			{
-				if(editorActions.size() > 0) {
+				if(editorActions.size() > 0 && currentUndoPosition >= 0) {
 				doAction(editorActions[currentUndoPosition].actionName, editorActions[currentUndoPosition].beforeData);
 				currentUndoPosition--;
 				if(currentUndoPosition < -1) {

+ 17 - 1
IDE/Contents/Source/PolycodeEntityEditor.cpp

@@ -384,6 +384,12 @@ void EntityEditorMainView::doAction(String actionName, PolycodeEditorActionData
             selectNone(false);
             for(int i=0; i < sceneData->entries.size(); i++) {
                 sceneData->entries[i].parentEntity->addChild(sceneData->entries[i].entity);
+                
+                SceneLight *sceneLight = dynamic_cast<SceneLight*>(sceneData->entries[i].entity);
+                if(sceneLight) {
+                    mainScene->addLight(sceneLight);
+                }
+                
                 setEditorPropsRecursive(sceneData->entries[i].entity);
                 selectEntity(sceneData->entries[i].entity, true, false);
             }
@@ -403,6 +409,13 @@ void EntityEditorMainView::doAction(String actionName, PolycodeEditorActionData
 		} else {
             selectNone(false);
             sceneData->entries[0].parentEntity->addChild(sceneData->entries[0].entity);
+            
+            SceneLight *sceneLight = dynamic_cast<SceneLight*>(sceneData->entries[0].entity);
+            if(sceneLight) {
+                mainScene->addLight(sceneLight);
+            }
+            
+            
             setEditorPropsRecursive(sceneData->entries[0].entity);
             selectEntity(sceneData->entries[0].entity, true, false);
 		}
@@ -776,6 +789,10 @@ void EntityEditorMainView::deleteSelected(bool doAction) {
     }
     for(int i=0; i < selectedEntities.size(); i++) {
         selectedEntities[i]->getParentEntity()->removeChild(selectedEntities[i]);
+        SceneLight *sceneLight = dynamic_cast<SceneLight*>(selectedEntities[i]);
+        if(sceneLight) {
+            mainScene->removeLight(sceneLight);
+        }
     }
     
     for(int i=0; i < selectedEntities.size(); i++) {
@@ -789,7 +806,6 @@ void EntityEditorMainView::deleteSelected(bool doAction) {
             }
         }
         selectedEntities[i]->removeAllHandlers();
-      //  delete selectedEntities[i];
     }
     
     selectedEntities.clear();