Przeglądaj źródła

Editor: reapplying deletion / selection handling code that got lost in the merge.

alteredq 12 lat temu
rodzic
commit
5670f0e818
1 zmienionych plików z 61 dodań i 3 usunięć
  1. 61 3
      editor/js/ui/Viewport.js

+ 61 - 3
editor/js/ui/Viewport.js

@@ -108,8 +108,9 @@ var Viewport = function ( signals ) {
 			intersectionPlane.lookAt( camera.position );
 
 			picked = intersects[ 0 ].object;
+			selected = picked;
 
-			signals.objectSelected.dispatch( picked );
+			signals.objectSelected.dispatch( selected );
 
 			var intersects = ray.intersectObject( intersectionPlane );
 			offset.copy( intersects[ 0 ].point ).subSelf( intersectionPlane.position );
@@ -173,14 +174,16 @@ var Viewport = function ( signals ) {
 
 		if ( intersects.length > 0 ) {
 
-			signals.objectSelected.dispatch( intersects[ 0 ].object );
+			selected = intersects[ 0 ].object;
 
 		} else {
 
-			signals.objectSelected.dispatch( null );
+			selected = null;
 
 		}
 
+		signals.objectSelected.dispatch( selected );
+
 	};
 
 	container.dom.addEventListener( 'mousedown', onMouseDown, false );
@@ -228,6 +231,55 @@ var Viewport = function ( signals ) {
 
 	} );
 
+	signals.objectRemoved.add( function ( ) {
+
+		if ( !selected ) {
+
+			console.warn( "No object selected for delete" );
+			return;
+
+		}
+
+		var toRemove = {};
+
+		selected.traverse( function ( child ) {
+
+			toRemove[ child.id ] = true;
+
+		} );
+
+		var newObjects = [];
+
+		for ( var i = 0; i < objects.length; i ++ ) {
+
+			var object = objects[ i ];
+
+			if ( ! ( object.id in toRemove ) ) {
+
+				newObjects.push( object );
+
+			}
+
+		}
+
+		objects = newObjects;
+
+		selectionBox.visible = false;
+		selectionAxis.visible = false;
+
+		scene.traverse( function( node ) {
+
+			node.remove( selected );
+
+		} );
+
+		render();
+
+		signals.sceneChanged.dispatch( scene );
+		signals.objectSelected.dispatch( null );
+
+	} );
+
 	var selected = null;
 
 	signals.objectSelected.add( function ( object ) {
@@ -289,6 +341,12 @@ var Viewport = function ( signals ) {
 
 		}
 
+		if ( object !== null ) {
+
+			selected = object;
+
+		}
+
 		render();
 
 	} );