Przeglądaj źródła

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 lat temu
rodzic
commit
2b14c3ddbf

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

@@ -27,6 +27,9 @@
 #include "PolyMaterial.h"
 #include "PolySceneLight.h"
 #include "PolySceneMesh.h"
+#include "PolySceneLabel.h"
+#include "PolySceneSound.h"
+#include "PolyCamera.h"
 
 using namespace Polycode;
 
@@ -232,6 +235,22 @@ Entity *SceneEntityInstance::loadObjectEntryIntoEntity(ObjectEntry *entry, Entit
 			sprite->playAnimation(animName, -1, false);
 			entity = 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") {
             
 			ObjectEntry *lightEntry = (*entry)["SceneLight"];
@@ -281,45 +300,41 @@ Entity *SceneEntityInstance::loadObjectEntryIntoEntity(ObjectEntry *entry, Entit
                     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()->setPitch(pitch);	
+			sound->getSound()->setPitch(pitch);
 			
-			sound->setWidth(50);
-			sound->setHeight(50);				
-										
 			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(targetEntity) {

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

@@ -401,6 +401,10 @@ void EntityEditorMainView::setEditorProps(Entity *entity) {
         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();
         sceneObjectRoot->addChild(newEntity);
         setEditorProps(newEntity);
-        createIcon(newEntity, "empty_icon.png");
-        newEntity->bBox = Vector3(0.5, 0.5, 0.5);
         newEntity->setPosition(cursorPosition);
         selectEntity(newEntity);
         return;
@@ -430,7 +432,6 @@ void EntityEditorMainView::addEntityFromMenu(String command) {
         SceneSound *newSound = new SceneSound("default.wav", 1.0, 2.0);
         sceneObjectRoot->addChild(newSound);
         setEditorProps(newSound);
-        newSound->bBox = Vector3(0.5, 0.5, 0.5);
         newSound->setPosition(cursorPosition);
         selectEntity(newSound);
         return;
@@ -440,7 +441,6 @@ void EntityEditorMainView::addEntityFromMenu(String command) {
         SceneSound *newSound = new SceneSound("default.wav", 1.0, 2.0);
         sceneObjectRoot->addChild(newSound);
         setEditorProps(newSound);
-        newSound->bBox = Vector3(0.5, 0.5, 0.5);
         newSound->setPosition(cursorPosition);
         selectEntity(newSound);
         return;
@@ -450,7 +450,6 @@ void EntityEditorMainView::addEntityFromMenu(String command) {
         Camera *newCamera = new Camera(mainScene);
         sceneObjectRoot->addChild(newCamera);
         setEditorProps(newCamera);
-        newCamera->bBox = Vector3(0.5, 0.5, 0.5);
         newCamera->setPosition(cursorPosition);
         selectEntity(newCamera);
         return;
@@ -867,6 +866,7 @@ void PolycodeEntityEditor::saveEntityToObjectEntry(Entity *entity, ObjectEntry *
         labelEntry->addChild("text", label->getText());
         labelEntry->addChild("font", label->getLabel()->getFont()->getFontName());
         labelEntry->addChild("size", (int)label->getLabel()->getSize());
+        labelEntry->addChild("actualHeight", (int)label->getLabelActualHeight());
         labelEntry->addChild("aaMode", (int)label->getLabel()->getAntialiasMode());
     }
     
@@ -907,8 +907,6 @@ void PolycodeEntityEditor::saveEntityToObjectEntry(Entity *entity, ObjectEntry *
         
     }
     
-    
-    
     if(dynamic_cast<SceneSound*>(entity)) {
         SceneSound *sound = (SceneSound*) entity;
         
@@ -922,8 +920,30 @@ void PolycodeEntityEditor::saveEntityToObjectEntry(Entity *entity, ObjectEntry *
         soundEntry->addChild("volume", sound->getSound()->getVolume());
         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"]) {
             entry->addChild("type", "ScenePrimitive");
         }

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

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