Browse Source

Editor: Simpler way to do the more intutive selecting behavious. Not perfect yet though.

Mr.doob 12 years ago
parent
commit
f53e8cf47e
1 changed files with 17 additions and 28 deletions
  1. 17 28
      editor/js/ui/Viewport.js

+ 17 - 28
editor/js/ui/Viewport.js

@@ -90,7 +90,7 @@ var Viewport = function ( signals ) {
 	var offset = new THREE.Vector3();
 	var picked = null;
 
-	var oldMouseX = 0, oldMouseY = 0;
+	var cameraChanged = false;
 
 	// events
 
@@ -127,8 +127,8 @@ var Viewport = function ( signals ) {
 				var intersects = ray.intersectObject( intersectionPlane );
 				offset.copy( intersects[ 0 ].point ).subSelf( intersectionPlane.position );
 
-				document.addEventListener( 'mousemove', onMouseMoveDrag, false );
-				document.addEventListener( 'mouseup', onMouseUpDrag, false );
+				document.addEventListener( 'mousemove', onMouseMove, false );
+				document.addEventListener( 'mouseup', onMouseUp, false );
 
 			} else {
 
@@ -138,16 +138,11 @@ var Viewport = function ( signals ) {
 
 		}
 
-		if ( controls.enabled ) {
-
-			oldMouseX = event.clientX;
-			oldMouseY = event.clientY;
-
-		}
+		cameraChanged = false;
 
 	};
 
-	var onMouseMoveDrag = function ( event ) {
+	var onMouseMove = function ( event ) {
 
 		var vector = new THREE.Vector3(
 			( ( event.clientX - container.dom.offsetLeft ) / container.dom.offsetWidth ) * 2 - 1,
@@ -173,29 +168,16 @@ var Viewport = function ( signals ) {
 
 	};
 
-	var onMouseUpDrag = function ( event ) {
-
-		document.removeEventListener( 'mousemove', onMouseMoveDrag );
-		document.removeEventListener( 'mouseup', onMouseUpDrag );
-
-	};
-
 	var onMouseUp = function ( event ) {
 
-		// clear selection when clicking in empty space
-
-		if ( controls.enabled && event.clientX === oldMouseX && event.clientY === oldMouseY ) {
-
-			selected = null;
-			signals.objectSelected.dispatch( selected );
-
-		}
+		document.removeEventListener( 'mousemove', onMouseMove );
+		document.removeEventListener( 'mouseup', onMouseUp );
 
 	};
 
 	var onClick = function ( event ) {
 
-		if ( event.button === 0 ) {
+		if ( event.button == 0 && cameraChanged === false ) {
 
 			var vector = new THREE.Vector3(
 				( ( event.clientX - container.dom.offsetLeft ) / container.dom.offsetWidth ) * 2 - 1,
@@ -211,10 +193,15 @@ var Viewport = function ( signals ) {
 			if ( intersects.length > 0 && ! controls.enabled ) {
 
 				selected = intersects[ 0 ].object;
-				signals.objectSelected.dispatch( selected );
+
+			} else {
+
+				selected = null;
 
 			}
 
+			signals.objectSelected.dispatch( selected );
+
 		}
 
 		controls.enabled = true;
@@ -222,7 +209,6 @@ var Viewport = function ( signals ) {
 	};
 
 	container.dom.addEventListener( 'mousedown', onMouseDown, false );
-	container.dom.addEventListener( 'mouseup', onMouseUp, false );
 	container.dom.addEventListener( 'click', onClick, false );
 
 	// controls need to be added *after* main logic,
@@ -238,11 +224,14 @@ var Viewport = function ( signals ) {
 	controls.dynamicDampingFactor = 0.3;
 	controls.addEventListener( 'change', function () {
 
+		cameraChanged = true;
+
 		signals.cameraChanged.dispatch( camera );
 		render();
 
 	} );
 
+
 	// signals
 
 	signals.objectAdded.add( function ( object ) {