Przeglądaj źródła

Added ability to add entities into other entities in the entity editor, fixed removal of linked resource pools from entity property view, added shortcut to deselect all in entity editor (KEY_ESCAPE)

Ivan Safrin 12 lat temu
rodzic
commit
e0228cb5d3

+ 6 - 14
Core/Contents/Source/PolySceneEntityInstance.cpp

@@ -266,20 +266,12 @@ Entity *SceneEntityInstance::loadObjectEntryIntoEntity(ObjectEntry *entry, Entit
 
 
 	ObjectEntry *entityType = (*entry)["type"];
 	ObjectEntry *entityType = (*entry)["type"];
 	if(entityType) {
 	if(entityType) {
-			
-        
-        /*
-         
-         if(entityType->stringVal == "SceneEntityInstance") {
-         ObjectEntry *screenInstanceEntry = (*entry)["SceneEntityInstance"];
-         String filePath = (*screenInstanceEntry)["filePath"]->stringVal;
-         SceneEntityInstance *instance = new SceneEntityInstance(filePath);
-         entity = instance;
-         }
-         
-         */
-
-		if(entityType->stringVal == "SceneSprite") {
+        if(entityType->stringVal == "SceneEntityInstance") {
+            ObjectEntry *instanceEntry = (*entry)["SceneEntityInstance"];
+            String filePath = (*instanceEntry)["filePath"]->stringVal;
+            SceneEntityInstance *instance = new SceneEntityInstance(parentScene, filePath);
+            entity = instance;
+         } else if(entityType->stringVal == "SceneSprite") {
 			ObjectEntry *spriteEntry = (*entry)["SceneSprite"];
 			ObjectEntry *spriteEntry = (*entry)["SceneSprite"];
 			String filePath = (*spriteEntry)["filePath"]->stringVal;
 			String filePath = (*spriteEntry)["filePath"]->stringVal;
 			
 			

+ 9 - 2
IDE/Contents/Include/PolycodeEntityEditor.h

@@ -88,6 +88,7 @@ class SceneMeshSettings {
         ShaderBinding *shaderBinding;
         ShaderBinding *shaderBinding;
 };
 };
 
 
+
 class EntityEditorMainView : public UIElement {
 class EntityEditorMainView : public UIElement {
 		public:
 		public:
 			EntityEditorMainView();
 			EntityEditorMainView();
@@ -110,13 +111,15 @@ class EntityEditorMainView : public UIElement {
     
     
             void setMaterialRecursive(const String &materialName, bool wireFrame, Entity *entity);
             void setMaterialRecursive(const String &materialName, bool wireFrame, Entity *entity);
             void restoreSettingsRecursive(Entity *entity);
             void restoreSettingsRecursive(Entity *entity);
-    
+            void setOverlayWireframeRecursive(Entity *targetEntity, bool val);
+            void setLinkedEntityPropsRecursive(SceneEntityInstance *parentInstance, Entity *entity);
+        
             void onGainFocus();
             void onGainFocus();
             void onLoseFocus();
             void onLoseFocus();
             void deleteSelected();
             void deleteSelected();
     
     
             Entity *getObjectRoot();
             Entity *getObjectRoot();
-            void setObjectRoot(Entity *entity);
+            void setObjectRoot(SceneEntityInstance *entity);
     
     
             Scene *getMainScene();
             Scene *getMainScene();
     
     
@@ -140,6 +143,10 @@ class EntityEditorMainView : public UIElement {
 			Scene *mainScene;
 			Scene *mainScene;
             Entity *sceneObjectRoot;
             Entity *sceneObjectRoot;
     
     
+            Entity *objectRootBase;
+            Entity *iconBase;
+            SceneEntityInstance *objectRootInstance;
+    
 			SceneRenderTexture *renderTexture;
 			SceneRenderTexture *renderTexture;
 			UIRect *renderTextureShape;	
 			UIRect *renderTextureShape;	
 
 

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

@@ -845,7 +845,7 @@ class LinkedMaterialsSheet : public PropSheet {
         SceneEntityInstance *instance;
         SceneEntityInstance *instance;
         ButtonProp *addMaterialProp;
         ButtonProp *addMaterialProp;
     
     
-        RemovableStringProp *propToRemove;
+        int poolRemoveIndex;
     
     
 };
 };
 
 

+ 2 - 0
IDE/Contents/Include/TransformGizmo.h

@@ -71,6 +71,8 @@ class TransformGizmo : public Entity {
         static const int CENTER_MODE_MEDIAN = 0;
         static const int CENTER_MODE_MEDIAN = 0;
         static const int CENTER_MODE_INDIVIDUAL = 1;
         static const int CENTER_MODE_INDIVIDUAL = 1;
     
     
+        bool enableGizmo;
+    
 	private:
 	private:
         int transformMode;
         int transformMode;
         int gizmoMode;
         int gizmoMode;

+ 124 - 28
IDE/Contents/Source/PolycodeEntityEditor.cpp

@@ -210,6 +210,7 @@ void CameraPreviewWindow::setCamera(Scene *scene, Camera *camera) {
 EntityEditorMainView::EntityEditorMainView() {
 EntityEditorMainView::EntityEditorMainView() {
 	processInputEvents = true;
 	processInputEvents = true;
     multiselectIndex = 0;
     multiselectIndex = 0;
+    objectRootInstance = NULL;
 
 
 	mainScene = new Scene(Scene::SCENE_3D, true);
 	mainScene = new Scene(Scene::SCENE_3D, true);
 	renderTexture = new SceneRenderTexture(mainScene, mainScene->getDefaultCamera(), 512, 512);
 	renderTexture = new SceneRenderTexture(mainScene, mainScene->getDefaultCamera(), 512, 512);
@@ -249,12 +250,20 @@ EntityEditorMainView::EntityEditorMainView() {
 	grid = new EditorGrid();
 	grid = new EditorGrid();
 	mainScene->addChild(grid);
 	mainScene->addChild(grid);
 	
 	
+    objectRootBase = new Entity();
+    mainScene->addChild(objectRootBase);
+    objectRootBase->processInputEvents = true;
+    
     sceneObjectRoot = new Entity();
     sceneObjectRoot = new Entity();
     sceneObjectRoot->processInputEvents = true;
     sceneObjectRoot->processInputEvents = true;
-    mainScene->addChild(sceneObjectRoot);
+    objectRootBase->addChild(sceneObjectRoot);
+    
+    iconBase = new Entity();
+    mainScene->addChild(iconBase);
+    iconBase->processInputEvents = true;
     
     
 	transformGizmo = new TransformGizmo(mainScene, mainScene->getDefaultCamera());
 	transformGizmo = new TransformGizmo(mainScene, mainScene->getDefaultCamera());
-    transformGizmo->enabled = false;
+    transformGizmo->enableGizmo = false;
     
     
 	mainScene->addChild(transformGizmo);		
 	mainScene->addChild(transformGizmo);		
 	trackballCamera = new TrackballCamera(mainScene->getDefaultCamera(), renderTextureShape);
 	trackballCamera = new TrackballCamera(mainScene->getDefaultCamera(), renderTextureShape);
@@ -338,12 +347,19 @@ void EntityEditorMainView::Update() {
     
     
     for(int i=0; i < icons.size(); i++) {
     for(int i=0; i < icons.size(); i++) {
         Number scale;
         Number scale;
+        
+        Entity *parentEntity = (Entity*) icons[i]->getUserData();
+        
+        Vector3 parentPosition = parentEntity->getConcatenatedMatrix().getPosition();
+        icons[i]->setPosition(parentPosition);
+        
         if(editorMode == EDITOR_MODE_2D) {
         if(editorMode == EDITOR_MODE_2D) {
             scale = trackballCamera->getCameraDistance() * 0.1;
             scale = trackballCamera->getCameraDistance() * 0.1;
         } else {
         } else {
             scale = mainScene->getDefaultCamera()->getPosition().distance(icons[i]->getConcatenatedMatrix().getPosition()) * 0.1;
             scale = mainScene->getDefaultCamera()->getPosition().distance(icons[i]->getConcatenatedMatrix().getPosition()) * 0.1;
         }
         }
         icons[i]->setScale(scale, scale, scale);
         icons[i]->setScale(scale, scale, scale);
+        icons[i]->rebuildTransformMatrix();
     }
     }
 }
 }
 
 
@@ -359,11 +375,12 @@ void EntityEditorMainView::createIcon(Entity *entity, String iconFile) {
         iconPrimitive->getLocalShaderOptions()->addTexture("diffuse", tex);
         iconPrimitive->getLocalShaderOptions()->addTexture("diffuse", tex);
 	}
 	}
     
     
-    entity->addChild(iconPrimitive);
+    iconBase->addChild(iconPrimitive);
     iconPrimitive->billboardMode = true;
     iconPrimitive->billboardMode = true;
+    iconPrimitive->setUserData((void*)entity);
     iconPrimitive->processInputEvents = true;
     iconPrimitive->processInputEvents = true;
     iconPrimitive->addEventListener(this, InputEvent::EVENT_MOUSEDOWN);
     iconPrimitive->addEventListener(this, InputEvent::EVENT_MOUSEDOWN);
-    
+    iconPrimitive->ignoreParentMatrix = true;
     iconPrimitive->addTag("");
     iconPrimitive->addTag("");
     iconPrimitive->depthTest = false;
     iconPrimitive->depthTest = false;
     iconPrimitive->depthWrite = false;
     iconPrimitive->depthWrite = false;
@@ -380,6 +397,26 @@ void EntityEditorMainView::setEditorPropsRecursive(Entity *entity) {
     }
     }
 }
 }
 
 
+void EntityEditorMainView::setLinkedEntityPropsRecursive(SceneEntityInstance *parentInstance, Entity *entity) {
+    SceneMesh *sceneMesh = dynamic_cast<SceneMesh*>(entity);
+    SceneParticleEmitter *emitter = dynamic_cast<SceneParticleEmitter*>(entity);
+    
+    entity->setUserData((void*)parentInstance);
+    entity->processInputEvents = true;
+    entity->addEventListener(this, InputEvent::EVENT_MOUSEDOWN);
+    entity->editorOnly = true;
+    
+    if(sceneMesh && !emitter) {
+        sceneMesh->wireFrameColor = Color(0.2, 0.9, 0.6, 1.0);
+        sceneMesh->useGeometryHitDetection = true;
+    }
+ 
+    for(int i=0; i < entity->getNumChildren(); i++) {
+        setLinkedEntityPropsRecursive(parentInstance, entity->getChildAtIndex(i));
+    }
+
+}
+
 void EntityEditorMainView::setEditorProps(Entity *entity) {
 void EntityEditorMainView::setEditorProps(Entity *entity) {
     entity->processInputEvents = true;
     entity->processInputEvents = true;
     entity->addEventListener(this, InputEvent::EVENT_MOUSEDOWN);
     entity->addEventListener(this, InputEvent::EVENT_MOUSEDOWN);
@@ -393,6 +430,13 @@ void EntityEditorMainView::setEditorProps(Entity *entity) {
         sceneMesh->useGeometryHitDetection = true;
         sceneMesh->useGeometryHitDetection = true;
     }
     }
     
     
+    SceneEntityInstance *instance = dynamic_cast<SceneEntityInstance*>(entity);
+    if(instance && instance != objectRootInstance) {
+        for(int i=0; i < instance->getNumChildren(); i++) {
+            setLinkedEntityPropsRecursive(instance, instance->getChildAtIndex(i));
+        }
+    }
+    
     SceneLight *sceneLight = dynamic_cast<SceneLight*>(entity);
     SceneLight *sceneLight = dynamic_cast<SceneLight*>(entity);
     if(sceneLight) {
     if(sceneLight) {
         createIcon(entity, "light_icon.png");
         createIcon(entity, "light_icon.png");
@@ -519,6 +563,15 @@ void EntityEditorMainView::addEntityFromMenu(String command) {
         return;
         return;
     }
     }
     
     
+    if(command == "add_entity") {
+        assetSelectType = "entity";
+        globalFrame->assetBrowser->addEventListener(this, UIEvent::OK_EVENT);
+        std::vector<String> extensions;
+        extensions.push_back("entity");
+        globalFrame->showAssetBrowser(extensions);
+        return;
+    }
+    
     if(command == "add_particles") {
     if(command == "add_particles") {
         SceneParticleEmitter  *newEmitter = new SceneParticleEmitter(30, 3.0, 0.2);
         SceneParticleEmitter  *newEmitter = new SceneParticleEmitter(30, 3.0, 0.2);
         newEmitter->bBox = Vector3(0.5, 0.5, 0.5);
         newEmitter->bBox = Vector3(0.5, 0.5, 0.5);
@@ -577,11 +630,11 @@ void EntityEditorMainView::deleteSelected() {
 }
 }
 
 
 void EntityEditorMainView::onGainFocus() {
 void EntityEditorMainView::onGainFocus() {
-    transformGizmo->enabled = true;
+    transformGizmo->enableGizmo = true;
 }
 }
 
 
 void EntityEditorMainView::onLoseFocus() {
 void EntityEditorMainView::onLoseFocus() {
-    transformGizmo->enabled = false;
+    transformGizmo->enableGizmo = false;
 }
 }
 
 
 void EntityEditorMainView::handleEvent(Event *event) {
 void EntityEditorMainView::handleEvent(Event *event) {
@@ -595,14 +648,14 @@ void EntityEditorMainView::handleEvent(Event *event) {
     } else if(event->getDispatcher() == globalFrame->assetBrowser) {
     } else if(event->getDispatcher() == globalFrame->assetBrowser) {
         if(event->getEventCode() == UIEvent::OK_EVENT) {
         if(event->getEventCode() == UIEvent::OK_EVENT) {
             if(assetSelectType == "mesh") {
             if(assetSelectType == "mesh") {
-                SceneMesh *newMesh = new SceneMesh(globalFrame->assetBrowser->getFullSelectedAssetPath());
+                SceneMesh *newMesh = new SceneMesh(globalFrame->assetBrowser->getSelectedAssetPath());
                 newMesh->cacheToVertexBuffer(true);
                 newMesh->cacheToVertexBuffer(true);
                 sceneObjectRoot->addChild(newMesh);
                 sceneObjectRoot->addChild(newMesh);
                 setEditorProps(newMesh);
                 setEditorProps(newMesh);
                 newMesh->setPosition(cursorPosition);
                 newMesh->setPosition(cursorPosition);
                 selectEntity(newMesh);
                 selectEntity(newMesh);
             } else if(assetSelectType == "image") {
             } else if(assetSelectType == "image") {
-                SceneImage *newImage = new SceneImage(globalFrame->assetBrowser->getFullSelectedAssetPath());
+                SceneImage *newImage = new SceneImage(globalFrame->assetBrowser->getSelectedAssetPath());
                 newImage->setMaterialByName("Unlit");
                 newImage->setMaterialByName("Unlit");
                 if(newImage->getLocalShaderOptions()) {
                 if(newImage->getLocalShaderOptions()) {
                     newImage->getLocalShaderOptions()->addTexture("diffuse", newImage->getTexture());
                     newImage->getLocalShaderOptions()->addTexture("diffuse", newImage->getTexture());
@@ -611,24 +664,29 @@ void EntityEditorMainView::handleEvent(Event *event) {
                 setEditorProps(newImage);
                 setEditorProps(newImage);
                 newImage->setPosition(cursorPosition);
                 newImage->setPosition(cursorPosition);
                 selectEntity(newImage);
                 selectEntity(newImage);
-        } else if(assetSelectType == "sprite") {
-            SceneSprite *newSprite = new SceneSprite(globalFrame->assetBrowser->getFullSelectedAssetPath());
-            
-            if(newSprite->getNumAnimations()) {
-                newSprite->playAnimation(newSprite->getAnimationAtIndex(0)->name, 0, false);
+            } else if(assetSelectType == "sprite") {
+                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);
+                selectEntity(newSprite);
+            } else if(assetSelectType == "entity") {
+                SceneEntityInstance *newEntity = new SceneEntityInstance(mainScene, globalFrame->assetBrowser->getSelectedAssetPath());
+                sceneObjectRoot->addChild(newEntity);
+                setEditorProps(newEntity);
+                newEntity->setPosition(cursorPosition);
+                selectEntity(newEntity);
             }
             }
             
             
-            newSprite->setMaterialByName("Unlit");
-            if(newSprite->getLocalShaderOptions()) {
-                newSprite->getLocalShaderOptions()->addTexture("diffuse", newSprite->getTexture());
-            }
-            sceneObjectRoot->addChild(newSprite);
-            setEditorProps(newSprite);
-            newSprite->setPosition(cursorPosition);
-            selectEntity(newSprite);
-        }
-        
-        
             globalFrame->assetBrowser->removeAllHandlersForListener(this);
             globalFrame->assetBrowser->removeAllHandlersForListener(this);
             globalFrame->hideModal();
             globalFrame->hideModal();
         }
         }
@@ -666,6 +724,16 @@ void EntityEditorMainView::handleEvent(Event *event) {
                         deleteSelected();
                         deleteSelected();
                     }
                     }
                 break;
                 break;
+                case KEY_ESCAPE:
+                {
+                    for(int i=0; i < selectedEntities.size(); i++) {
+                        doEntityDeselect(selectedEntities[i]);
+                    }
+                    selectedEntities.clear();
+                    transformGizmo->setTransformSelection(selectedEntities);
+                    dispatchEvent(new Event(), Event::CHANGE_EVENT);                    
+                }
+                break;
             }
             }
         }
         }
     } else if(event->getDispatcher() == shadeModeSelector) {
     } else if(event->getDispatcher() == shadeModeSelector) {
@@ -755,6 +823,22 @@ void EntityEditorMainView::doEntityDeselect(Entity *targetEntity) {
     if(sceneMesh) {
     if(sceneMesh) {
         sceneMesh->overlayWireframe = false;
         sceneMesh->overlayWireframe = false;
     }
     }
+    
+    SceneEntityInstance *instance = dynamic_cast<SceneEntityInstance*>(targetEntity);
+    if(instance) {
+        setOverlayWireframeRecursive(targetEntity, false);
+    }
+    
+}
+
+void EntityEditorMainView::setOverlayWireframeRecursive(Entity *targetEntity, bool val) {
+    SceneMesh *sceneMesh = dynamic_cast<SceneMesh*>(targetEntity);
+    if(sceneMesh) {
+        sceneMesh->overlayWireframe = val;
+    }
+    for(int i=0; i < targetEntity->getNumChildren(); i++) {
+        setOverlayWireframeRecursive(targetEntity->getChildAtIndex(i), val);
+    }
 }
 }
 
 
 void EntityEditorMainView::doEntitySelect(Entity *targetEntity) {
 void EntityEditorMainView::doEntitySelect(Entity *targetEntity) {
@@ -765,6 +849,11 @@ void EntityEditorMainView::doEntitySelect(Entity *targetEntity) {
         sceneMesh->overlayWireframe = true;
         sceneMesh->overlayWireframe = true;
     }
     }
     
     
+    SceneEntityInstance *instance = dynamic_cast<SceneEntityInstance*>(targetEntity);
+    if(instance) {
+        setOverlayWireframeRecursive(targetEntity, true);
+    }
+    
     Camera *camera = dynamic_cast<Camera*>(targetEntity);
     Camera *camera = dynamic_cast<Camera*>(targetEntity);
     cameraPreview->setCamera(mainScene, camera);
     cameraPreview->setCamera(mainScene, camera);
 }
 }
@@ -772,6 +861,11 @@ void EntityEditorMainView::doEntitySelect(Entity *targetEntity) {
 
 
 void EntityEditorMainView::selectEntity(Entity *targetEntity, bool addToSelection) {
 void EntityEditorMainView::selectEntity(Entity *targetEntity, bool addToSelection) {
     
     
+    if(targetEntity->getUserData()) {
+        SceneEntityInstance *instance = (SceneEntityInstance*)targetEntity->getUserData();
+        targetEntity = instance;
+    }
+    
     bool doNotReselect = false;
     bool doNotReselect = false;
     if(!addToSelection) {
     if(!addToSelection) {
         for(int i=0; i < selectedEntities.size(); i++) {
         for(int i=0; i < selectedEntities.size(); i++) {
@@ -803,14 +897,15 @@ Entity *EntityEditorMainView::getObjectRoot() {
     return sceneObjectRoot;
     return sceneObjectRoot;
 }
 }
 
 
-void EntityEditorMainView::setObjectRoot(Entity *entity) {
+void EntityEditorMainView::setObjectRoot(SceneEntityInstance *entity) {
+    objectRootInstance = entity;
     if(sceneObjectRoot) {
     if(sceneObjectRoot) {
         sceneObjectRoot->getParentEntity()->removeChild(sceneObjectRoot);
         sceneObjectRoot->getParentEntity()->removeChild(sceneObjectRoot);
         delete sceneObjectRoot;
         delete sceneObjectRoot;
     }
     }
     sceneObjectRoot = entity;
     sceneObjectRoot = entity;
     sceneObjectRoot->processInputEvents = true;
     sceneObjectRoot->processInputEvents = true;
-    mainScene->addChild(sceneObjectRoot);
+    objectRootBase->addChild(sceneObjectRoot);
     sceneObjectRoot->getParentEntity()->moveChildBottom(sceneObjectRoot);
     sceneObjectRoot->getParentEntity()->moveChildBottom(sceneObjectRoot);
 }
 }
 
 
@@ -945,6 +1040,7 @@ bool PolycodeEntityEditor::openFile(OSFileEntry filePath) {
     
     
     mainView->setObjectRoot(loadedInstance);
     mainView->setObjectRoot(loadedInstance);
     mainView->setEditorPropsRecursive(loadedInstance);
     mainView->setEditorPropsRecursive(loadedInstance);
+    
     treeView->setRootEntity(loadedInstance);
     treeView->setRootEntity(loadedInstance);
     propertyView->setEntityInstance(loadedInstance);
     propertyView->setEntityInstance(loadedInstance);
     settingsView->setEntityInstance(loadedInstance);
     settingsView->setEntityInstance(loadedInstance);
@@ -1003,7 +1099,7 @@ void PolycodeEntityEditor::saveEntityToObjectEntry(Entity *entity, ObjectEntry *
         }
         }
     }
     }
     
     
-    if(dynamic_cast<SceneEntityInstance*>(entity)) {
+    if(dynamic_cast<SceneEntityInstance*>(entity) && entity != mainView->getObjectRoot()) {
         if(!(*(entry))["type"]) {
         if(!(*(entry))["type"]) {
             entry->addChild("type", "SceneEntityInstance");
             entry->addChild("type", "SceneEntityInstance");
         }
         }
@@ -1122,7 +1218,7 @@ void PolycodeEntityEditor::saveEntityToObjectEntry(Entity *entity, ObjectEntry *
         }
         }
         
         
     }
     }
-    
+
     if(dynamic_cast<SceneSound*>(entity)) {
     if(dynamic_cast<SceneSound*>(entity)) {
         SceneSound *sound = (SceneSound*) entity;
         SceneSound *sound = (SceneSound*) entity;
         
         

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

@@ -3377,7 +3377,7 @@ LinkedMaterialsSheet::LinkedMaterialsSheet() : PropSheet("LINKED MATERIALS", "li
     addProp(addMaterialProp);
     addProp(addMaterialProp);
     addMaterialProp->getButton()->addEventListener(this, UIEvent::CLICK_EVENT);
     addMaterialProp->getButton()->addEventListener(this, UIEvent::CLICK_EVENT);
     
     
-    propToRemove = NULL;
+    poolRemoveIndex = -1;
 }
 }
 
 
 LinkedMaterialsSheet::~LinkedMaterialsSheet() {
 LinkedMaterialsSheet::~LinkedMaterialsSheet() {
@@ -3385,12 +3385,12 @@ LinkedMaterialsSheet::~LinkedMaterialsSheet() {
 }
 }
 
 
 void LinkedMaterialsSheet::Update() {
 void LinkedMaterialsSheet::Update() {
-    if(propToRemove) {
+    if(poolRemoveIndex > -1) {
         if(instance) {
         if(instance) {
-//            instance->removeLinkedMaterialFile(propToRemove->getCaption());
+            instance->unlinkResourcePool(instance->getLinkedResourcePoolAtIndex(poolRemoveIndex));
             updateMaterials();
             updateMaterials();
         }
         }
-        propToRemove = NULL;
+        poolRemoveIndex = -1;
     }
     }
 }
 }
 
 
@@ -3402,7 +3402,7 @@ void LinkedMaterialsSheet::handleEvent(Event *event) {
     
     
     for(int i=0; i < props.size(); i++) {
     for(int i=0; i < props.size(); i++) {
         if(props[i] == event->getDispatcher()) {
         if(props[i] == event->getDispatcher()) {
-            propToRemove = (RemovableStringProp*) props[i];
+            poolRemoveIndex = i;
         }
         }
     }
     }
     
     

+ 2 - 3
IDE/Contents/Source/TextureBrowser.cpp

@@ -50,7 +50,7 @@ AssetEntry::AssetEntry(String assetPath, String assetName, String extension, Res
 	} else if(extension == "ogg" || extension == "wav") {
 	} else if(extension == "ogg" || extension == "wav") {
 		imageShape->loadTexture("browserIcons/sound_icon.png");
 		imageShape->loadTexture("browserIcons/sound_icon.png");
 	} else if(extension == "entity") {
 	} else if(extension == "entity") {
-		imageShape->loadTexture("browserIcons/entity_icon");
+		imageShape->loadTexture("browserIcons/entity_icon.png");
 	} else if(extension == "sprite") {
 	} else if(extension == "sprite") {
 		imageShape->loadTexture("browserIcons/sprite_icon.png");
 		imageShape->loadTexture("browserIcons/sprite_icon.png");
 	} else if(extension == "ttf" || extension == "otf") {
 	} else if(extension == "ttf" || extension == "otf") {
@@ -63,8 +63,7 @@ AssetEntry::AssetEntry(String assetPath, String assetName, String extension, Res
 		imageShape->loadTexture("browserIcons/materials_icon.png");
 		imageShape->loadTexture("browserIcons/materials_icon.png");
     } else if(extension == "material_resource") {
     } else if(extension == "material_resource") {
 		imageShape->loadTexture("browserIcons/material_resource_icon.png");
 		imageShape->loadTexture("browserIcons/material_resource_icon.png");
-	}
-
+    }
 	
 	
 	imageShape->setPosition(28, 10);
 	imageShape->setPosition(28, 10);
     imageShape->setBlendingMode(Renderer::BLEND_MODE_NORMAL);
     imageShape->setBlendingMode(Renderer::BLEND_MODE_NORMAL);

+ 2 - 1
IDE/Contents/Source/TransformGizmo.cpp

@@ -91,6 +91,7 @@ TransformGizmo::TransformGizmo(Scene *targetScene, Camera *targetCamera) : Entit
 	processInputEvents = true;
 	processInputEvents = true;
     orientation = ORIENTATION_GLOBAL;
     orientation = ORIENTATION_GLOBAL;
     centerMode = CENTER_MODE_MEDIAN;
     centerMode = CENTER_MODE_MEDIAN;
+    enableGizmo = true;
 	
 	
 	this->targetScene = targetScene;
 	this->targetScene = targetScene;
 	this->targetCamera = targetCamera;
 	this->targetCamera = targetCamera;
@@ -610,7 +611,7 @@ void TransformGizmo::setGizmoMode(int newMode) {
 }
 }
 
 
 void TransformGizmo::handleEvent(Event *event) {
 void TransformGizmo::handleEvent(Event *event) {
-    if(!enabled) {
+    if(!enableGizmo) {
         return;
         return;
     }
     }