Browse Source

Editor: added simple object removal (using "delete" key).

alteredq 13 years ago
parent
commit
ad9ad59ded
2 changed files with 76 additions and 3 deletions
  1. 15 0
      editor/index.html
  2. 61 3
      editor/js/ui/Viewport.js

+ 15 - 0
editor/index.html

@@ -74,6 +74,7 @@
 				sceneCreated: new SIGNALS.Signal(),
 				sceneCreated: new SIGNALS.Signal(),
 				sceneChanged: new SIGNALS.Signal(),
 				sceneChanged: new SIGNALS.Signal(),
 				objectAdded: new SIGNALS.Signal(),
 				objectAdded: new SIGNALS.Signal(),
+				objectRemoved: new SIGNALS.Signal(),
 				objectSelected: new SIGNALS.Signal(),
 				objectSelected: new SIGNALS.Signal(),
 				objectChanged: new SIGNALS.Signal(),
 				objectChanged: new SIGNALS.Signal(),
 				materialChanged: new SIGNALS.Signal(),
 				materialChanged: new SIGNALS.Signal(),
@@ -110,6 +111,20 @@
 			viewport.setHeight( '-webkit-calc(100% - 32px)', '-moz-calc(100% - 32px)', 'calc(100% - 32px)' );
 			viewport.setHeight( '-webkit-calc(100% - 32px)', '-moz-calc(100% - 32px)', 'calc(100% - 32px)' );
 			document.body.appendChild( viewport.dom );
 			document.body.appendChild( viewport.dom );
 
 
+			document.addEventListener( 'keydown', function ( event ) {
+
+				// delete
+
+				if ( event.which === 46 ) {
+
+					// here should come confirmation pop-up modal dialog
+
+					signals.objectRemoved.dispatch();
+
+				}
+
+			} );
+
 			document.addEventListener( 'drop', function ( event ) {
 			document.addEventListener( 'drop', function ( event ) {
 
 
 				event.preventDefault();
 				event.preventDefault();

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

@@ -116,8 +116,9 @@ var Viewport = function ( signals ) {
 			controls.enabled = false;
 			controls.enabled = false;
 
 
 			picked = intersects[ 0 ].object;
 			picked = intersects[ 0 ].object;
+			selected = picked;
 
 
-			signals.objectSelected.dispatch( picked );
+			signals.objectSelected.dispatch( selected );
 
 
 			var intersects = ray.intersectObject( intersectionPlane );
 			var intersects = ray.intersectObject( intersectionPlane );
 			offset.copy( intersects[ 0 ].point ).subSelf( intersectionPlane.position );
 			offset.copy( intersects[ 0 ].point ).subSelf( intersectionPlane.position );
@@ -190,14 +191,16 @@ var Viewport = function ( signals ) {
 
 
 		if ( intersects.length > 0 ) {
 		if ( intersects.length > 0 ) {
 
 
-			signals.objectSelected.dispatch( intersects[ 0 ].object );
+			selected = intersects[ 0 ].object;
 
 
 		} else {
 		} else {
 
 
-			signals.objectSelected.dispatch( null );
+			selected = null;
 
 
 		}
 		}
 
 
+		signals.objectSelected.dispatch( selected );
+
 	}, false );
 	}, false );
 
 
 	// events
 	// events
@@ -229,6 +232,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;
 	var selected = null;
 
 
 	signals.objectSelected.add( function ( object ) {
 	signals.objectSelected.add( function ( object ) {
@@ -290,6 +342,12 @@ var Viewport = function ( signals ) {
 
 
 		}
 		}
 
 
+		if ( object !== null ) {
+
+			selected = object;
+
+		}
+
 		render();
 		render();
 
 
 	} );
 	} );