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

Fixed icon and transform gizmo scaling in 2d mode in entity editor, fixed icon and transform gizmo scaling jerkiness

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

+ 2 - 2
IDE/Contents/Include/TrackballCamera.h

@@ -27,7 +27,7 @@
 
 using namespace Polycode;
 
-class TrackballCamera : public EventHandler {
+class TrackballCamera : public EventDispatcher {
 	public:
 		TrackballCamera(Camera *targetCamera, Entity *trackballShape);
 		~TrackballCamera();
@@ -39,7 +39,7 @@ class TrackballCamera : public EventHandler {
     
         void setCameraPosition(Vector3 cameraPosition);
     
-        bool disableRotation(bool val);
+        void disableRotation(bool val);
     
 		static const int MOUSE_MODE_IDLE = 0;
 		static const int MOUSE_MODE_ORBITING = 1;

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

@@ -56,6 +56,7 @@ class TransformGizmo : public Entity {
 	private:
         int transformMode;
         int gizmoMode;
+    
 	
 		std::vector<Entity*> selectedEntities;
 	

+ 10 - 2
IDE/Contents/Source/PolycodeEntityEditor.cpp

@@ -251,6 +251,7 @@ EntityEditorMainView::EntityEditorMainView() {
 	transformGizmo = new TransformGizmo(mainScene, mainScene->getDefaultCamera());
 	mainScene->addChild(transformGizmo);		
 	trackballCamera = new TrackballCamera(mainScene->getDefaultCamera(), renderTextureShape);
+    trackballCamera->addEventListener(this, Event::CHANGE_EVENT);
 	
     addEntityButton = new UIImageButton("entityEditor/add_entity.png", 1.0, 24, 24);
 	topBar->addChild(addEntityButton);
@@ -320,7 +321,12 @@ void EntityEditorMainView::Update() {
     }
     
     for(int i=0; i < icons.size(); i++) {
-        Number scale = mainScene->getDefaultCamera()->getPosition().distance(icons[i]->getConcatenatedMatrix().getPosition()) * 0.1;
+        Number scale;
+        if(editorMode == EDITOR_MODE_2D) {
+            scale = trackballCamera->getCameraDistance() * 0.1;
+        } else {
+            scale = mainScene->getDefaultCamera()->getPosition().distance(icons[i]->getConcatenatedMatrix().getPosition()) * 0.1;
+        }
         icons[i]->setScale(scale, scale, scale);
     }
 }
@@ -526,7 +532,9 @@ void EntityEditorMainView::addEntityFromMenu(String command) {
 
 void EntityEditorMainView::handleEvent(Event *event) {
 
-    if(event->getDispatcher() == modeSwitchDropdown) {
+    if(event->getDispatcher() == trackballCamera) {
+        Update();
+    } else if(event->getDispatcher() == modeSwitchDropdown) {
         setEditorMode(modeSwitchDropdown->getSelectedIndex());
     } else if(event->getDispatcher() == globalFrame->assetBrowser) {
         if(event->getEventCode() == UIEvent::OK_EVENT) {

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

@@ -23,7 +23,7 @@
 #include "TrackballCamera.h"
 
 
-TrackballCamera::TrackballCamera(Camera *targetCamera, Entity *trackballShape) : EventHandler() {
+TrackballCamera::TrackballCamera(Camera *targetCamera, Entity *trackballShape) : EventDispatcher() {
 	mouseMode = MOUSE_MODE_IDLE;
 	
 	this->targetCamera = targetCamera;
@@ -196,9 +196,10 @@ void TrackballCamera::updateCamera() {
 		
 	targetCamera->setPosition(orbitingCenter + trackballEye);	
 	targetCamera->lookAt(orbitingCenter);
+    dispatchEvent(new Event(), Event::CHANGE_EVENT);
 }
 
-bool TrackballCamera::disableRotation(bool val) {
+void TrackballCamera::disableRotation(bool val) {
     rotationDisabled = val;
 }
 

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

@@ -587,7 +587,13 @@ void TransformGizmo::Update() {
     }
     
     viewportRotateGripBase->lookAt(targetCamera->getPosition());
-	Number scale = getPosition().distance(targetCamera->getPosition()) * 0.1;
+	Number scale;
+    if(gizmoMode == GIZMO_MODE_2D) {
+        scale = targetCamera->getPosition().length() * 0.1;
+    } else {
+        scale = getPosition().distance(targetCamera->getPosition()) * 0.1;
+    }
+    
     if(scale < 0.0) {
         scale = 0.0;
     }