Răsfoiți Sursa

Fixed transform gizmo getting stuck in view move mode, saving and loading for SceneSounds, Cameras, empty Entities and SceneLabels in entity editor

Ivan Safrin 12 ani în urmă
părinte
comite
2b14c3ddbf

+ 49 - 34
Core/Contents/Source/PolySceneEntityInstance.cpp

@@ -27,6 +27,9 @@
 #include "PolyMaterial.h"
 #include "PolyMaterial.h"
 #include "PolySceneLight.h"
 #include "PolySceneLight.h"
 #include "PolySceneMesh.h"
 #include "PolySceneMesh.h"
+#include "PolySceneLabel.h"
+#include "PolySceneSound.h"
+#include "PolyCamera.h"
 
 
 using namespace Polycode;
 using namespace Polycode;
 
 
@@ -232,6 +235,22 @@ Entity *SceneEntityInstance::loadObjectEntryIntoEntity(ObjectEntry *entry, Entit
 			sprite->playAnimation(animName, -1, false);
 			sprite->playAnimation(animName, -1, false);
 			entity = sprite;
 			entity = sprite;
             applySceneMesh((*entry)["SceneMesh"], sprite);
             applySceneMesh((*entry)["SceneMesh"], sprite);
+        } else 	if(entityType->stringVal == "SceneLabel") {
+			ObjectEntry *labelEntry = (*entry)["SceneLabel"];
+			
+			String text = (*labelEntry)["text"]->stringVal;
+			String font = (*labelEntry)["font"]->stringVal;
+			int size = (*labelEntry)["size"]->intVal;
+            Number actualHeight = (*labelEntry)["actualHeight"]->intVal;
+			int aaMode = (*labelEntry)["aaMode"]->intVal;
+            
+			SceneLabel *label = new SceneLabel("", size, font, aaMode, actualHeight);
+            label->setAnchorPoint(0.0, 0.0, 0.0);
+            label->snapToPixels = false;
+            label->positionAtBaseline = false;
+            applySceneMesh((*entry)["SceneMesh"], label);
+            label->setText(text);
+			entity = label;
 		} else if(entityType->stringVal == "SceneLight") {
 		} else if(entityType->stringVal == "SceneLight") {
             
             
 			ObjectEntry *lightEntry = (*entry)["SceneLight"];
 			ObjectEntry *lightEntry = (*entry)["SceneLight"];
@@ -281,45 +300,41 @@ Entity *SceneEntityInstance::loadObjectEntryIntoEntity(ObjectEntry *entry, Entit
                     entity = newMesh;
                     entity = newMesh;
                 }
                 }
             }
             }
-        }
-/*
-		if(entityType->stringVal == "ScreenSound") {
-			ObjectEntry *screenSoundEntry = (*entry)["ScreenSound"];
+        } else if(entityType->stringVal == "SceneSound") {
+			ObjectEntry *soundEntry = (*entry)["SceneSound"];
 			
 			
-			String filePath = (*screenSoundEntry)["filePath"]->stringVal;
-			Number refDistance = (*screenSoundEntry)["refDistance"]->NumberVal;
-			Number maxDistance = (*screenSoundEntry)["maxDistance"]->NumberVal;
-			Number volume = (*screenSoundEntry)["volume"]->NumberVal;
-			Number pitch = (*screenSoundEntry)["pitch"]->NumberVal;
-															
-			ScreenSound *sound = new ScreenSound(filePath, refDistance, maxDistance);
+			String filePath = (*soundEntry)["filePath"]->stringVal;
+			Number refDistance = (*soundEntry)["refDistance"]->NumberVal;
+			Number maxDistance = (*soundEntry)["maxDistance"]->NumberVal;
+			Number volume = (*soundEntry)["volume"]->NumberVal;
+			Number pitch = (*soundEntry)["pitch"]->NumberVal;
+            
+			SceneSound *sound = new SceneSound(filePath, refDistance, maxDistance);
 			sound->getSound()->setVolume(volume);
 			sound->getSound()->setVolume(volume);
-			sound->getSound()->setPitch(pitch);	
+			sound->getSound()->setPitch(pitch);
 			
 			
-			sound->setWidth(50);
-			sound->setHeight(50);				
-										
 			entity = sound;
 			entity = sound;
-		}		
-
-
-		if(entityType->stringVal == "ScreenLabel") {
-			ObjectEntry *screenLabelEntry = (*entry)["ScreenLabel"];
-			
-			String text = (*screenLabelEntry)["text"]->stringVal;
-			String font = (*screenLabelEntry)["font"]->stringVal;
-			int size = (*screenLabelEntry)["size"]->intVal;
-			int aaMode = (*screenLabelEntry)["aaMode"]->intVal;
-												
-			ScreenLabel *label = new ScreenLabel(text, size, font, aaMode);
-			label->positionAtBaseline = false;
-			
-			ObjectEntry *screenShapeEntry = (*entry)["ScreenShape"];			
-			applyScreenShape(screenShapeEntry, label);
-			entity = label;
+        } else if(entityType->stringVal == "Camera") {
+			ObjectEntry *cameraEntry = (*entry)["Camera"];
+            
+			Camera *camera = new Camera(parentScene);
+            
+            camera->setExposureLevel((*cameraEntry)["exposure"]->NumberVal);
+            camera->setClippingPlanes((*cameraEntry)["nearClip"]->NumberVal, (*cameraEntry)["farClip"]->NumberVal);
+            camera->setOrthoMode((*cameraEntry)["ortho"]->boolVal);
+            
+            if(camera->getOrthoMode()) {
+                camera->setOrthoSizeMode((*cameraEntry)["sizeMode"]->intVal);
+                camera->setOrthoSize((*cameraEntry)["orthoWidth"]->NumberVal, (*cameraEntry)["orthoHeight"]->NumberVal);
+            } else {
+                camera->setFOV((*cameraEntry)["fov"]->NumberVal);
+            }
+            
+			entity = camera;
 		}
 		}
-			*/
-	} 
+
+        
+	}
 
 
 	if(!entity) {
 	if(!entity) {
 		if(targetEntity) {
 		if(targetEntity) {

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

@@ -401,6 +401,10 @@ void EntityEditorMainView::setEditorProps(Entity *entity) {
         createIcon(entity, "camera_icon.png");
         createIcon(entity, "camera_icon.png");
     }
     }
     
     
+    if(!emitter && !sceneLight && !camera && !sound && !sceneMesh && entity != sceneObjectRoot) {
+        createIcon(entity, "empty_icon.png");
+    }
+    
     
     
 }
 }
 
 
@@ -419,8 +423,6 @@ void EntityEditorMainView::addEntityFromMenu(String command) {
         Entity *newEntity = new Entity();
         Entity *newEntity = new Entity();
         sceneObjectRoot->addChild(newEntity);
         sceneObjectRoot->addChild(newEntity);
         setEditorProps(newEntity);
         setEditorProps(newEntity);
-        createIcon(newEntity, "empty_icon.png");
-        newEntity->bBox = Vector3(0.5, 0.5, 0.5);
         newEntity->setPosition(cursorPosition);
         newEntity->setPosition(cursorPosition);
         selectEntity(newEntity);
         selectEntity(newEntity);
         return;
         return;
@@ -430,7 +432,6 @@ void EntityEditorMainView::addEntityFromMenu(String command) {
         SceneSound *newSound = new SceneSound("default.wav", 1.0, 2.0);
         SceneSound *newSound = new SceneSound("default.wav", 1.0, 2.0);
         sceneObjectRoot->addChild(newSound);
         sceneObjectRoot->addChild(newSound);
         setEditorProps(newSound);
         setEditorProps(newSound);
-        newSound->bBox = Vector3(0.5, 0.5, 0.5);
         newSound->setPosition(cursorPosition);
         newSound->setPosition(cursorPosition);
         selectEntity(newSound);
         selectEntity(newSound);
         return;
         return;
@@ -440,7 +441,6 @@ void EntityEditorMainView::addEntityFromMenu(String command) {
         SceneSound *newSound = new SceneSound("default.wav", 1.0, 2.0);
         SceneSound *newSound = new SceneSound("default.wav", 1.0, 2.0);
         sceneObjectRoot->addChild(newSound);
         sceneObjectRoot->addChild(newSound);
         setEditorProps(newSound);
         setEditorProps(newSound);
-        newSound->bBox = Vector3(0.5, 0.5, 0.5);
         newSound->setPosition(cursorPosition);
         newSound->setPosition(cursorPosition);
         selectEntity(newSound);
         selectEntity(newSound);
         return;
         return;
@@ -450,7 +450,6 @@ void EntityEditorMainView::addEntityFromMenu(String command) {
         Camera *newCamera = new Camera(mainScene);
         Camera *newCamera = new Camera(mainScene);
         sceneObjectRoot->addChild(newCamera);
         sceneObjectRoot->addChild(newCamera);
         setEditorProps(newCamera);
         setEditorProps(newCamera);
-        newCamera->bBox = Vector3(0.5, 0.5, 0.5);
         newCamera->setPosition(cursorPosition);
         newCamera->setPosition(cursorPosition);
         selectEntity(newCamera);
         selectEntity(newCamera);
         return;
         return;
@@ -867,6 +866,7 @@ void PolycodeEntityEditor::saveEntityToObjectEntry(Entity *entity, ObjectEntry *
         labelEntry->addChild("text", label->getText());
         labelEntry->addChild("text", label->getText());
         labelEntry->addChild("font", label->getLabel()->getFont()->getFontName());
         labelEntry->addChild("font", label->getLabel()->getFont()->getFontName());
         labelEntry->addChild("size", (int)label->getLabel()->getSize());
         labelEntry->addChild("size", (int)label->getLabel()->getSize());
+        labelEntry->addChild("actualHeight", (int)label->getLabelActualHeight());
         labelEntry->addChild("aaMode", (int)label->getLabel()->getAntialiasMode());
         labelEntry->addChild("aaMode", (int)label->getLabel()->getAntialiasMode());
     }
     }
     
     
@@ -907,8 +907,6 @@ void PolycodeEntityEditor::saveEntityToObjectEntry(Entity *entity, ObjectEntry *
         
         
     }
     }
     
     
-    
-    
     if(dynamic_cast<SceneSound*>(entity)) {
     if(dynamic_cast<SceneSound*>(entity)) {
         SceneSound *sound = (SceneSound*) entity;
         SceneSound *sound = (SceneSound*) entity;
         
         
@@ -922,8 +920,30 @@ void PolycodeEntityEditor::saveEntityToObjectEntry(Entity *entity, ObjectEntry *
         soundEntry->addChild("volume", sound->getSound()->getVolume());
         soundEntry->addChild("volume", sound->getSound()->getVolume());
         soundEntry->addChild("pitch", sound->getSound()->getPitch());
         soundEntry->addChild("pitch", sound->getSound()->getPitch());
     }
     }
+
+    if(dynamic_cast<Camera*>(entity)) {
+        Camera *camera = (Camera*) entity;
+        
+        if(!(*(entry))["type"]) {
+            entry->addChild("type", "Camera");
+        }
+        
+        ObjectEntry *cameraEntry = entry->addChild("Camera");
+        
+        cameraEntry->addChild("exposure", camera->getExposureLevel());
+        cameraEntry->addChild("nearClip", camera->getNearClipppingPlane());
+        cameraEntry->addChild("farClip", camera->getFarClipppingPlane());
+        cameraEntry->addChild("ortho", camera->getOrthoMode());
+        if(camera->getOrthoMode()) {
+            cameraEntry->addChild("sizeMode", camera->getOrthoSizeMode());
+            cameraEntry->addChild("orthoWidth", camera->getOrthoSizeX());
+            cameraEntry->addChild("orthoHeight", camera->getOrthoSizeY());
+        } else {
+            cameraEntry->addChild("fov", camera->getFOV());
+        }
+    }
     
     
-    if(dynamic_cast<ScenePrimitive*>(entity) && !dynamic_cast<SceneSprite*>(entity)) {
+    if(dynamic_cast<ScenePrimitive*>(entity) && !dynamic_cast<SceneSprite*>(entity) && !dynamic_cast<SceneLabel*>(entity)) {
         if(!(*(entry))["type"]) {
         if(!(*(entry))["type"]) {
             entry->addChild("type", "ScenePrimitive");
             entry->addChild("type", "ScenePrimitive");
         }
         }

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

@@ -727,6 +727,9 @@ void TransformGizmo::handleEvent(Event *event) {
                 break;
                 break;
                 case KEY_ESCAPE:
                 case KEY_ESCAPE:
                 {
                 {
+                    if(mode == TRANSFORM_SCALE_VIEW || mode == TRANSFORM_ROTATE_VIEW || mode == TRANSFORM_MOVE_VIEW) {
+                        mode = previousMode;
+                    }                    
                     transforming = false;
                     transforming = false;
                 }
                 }
                 break;
                 break;
@@ -803,7 +806,7 @@ void TransformGizmo::handleEvent(Event *event) {
                 break;
                 break;
                 case InputEvent::EVENT_MOUSEUP:
                 case InputEvent::EVENT_MOUSEUP:
                 {
                 {
-                    if(mode == TRANSFORM_SCALE_VIEW || mode == TRANSFORM_ROTATE_VIEW) {
+                    if(mode == TRANSFORM_SCALE_VIEW || mode == TRANSFORM_ROTATE_VIEW || mode == TRANSFORM_MOVE_VIEW) {
                         mode = previousMode;
                         mode = previousMode;
                     }
                     }
                     transforming = false;
                     transforming = false;