Browse Source

Editor: More rework.

Mr.doob 12 years ago
parent
commit
a24fcbad47
4 changed files with 112 additions and 106 deletions
  1. 8 6
      editor/js/Editor.js
  2. 81 83
      editor/js/Loader.js
  3. 15 3
      editor/js/Menubar.Edit.js
  4. 8 14
      editor/js/Viewport.js

+ 8 - 6
editor/js/Editor.js

@@ -6,9 +6,6 @@ var Editor = function () {
 
 		// actions
 
-		flattenSelectedObject: new SIGNALS.Signal(),
-		cloneSelectedObject: new SIGNALS.Signal(),
-		removeSelectedObject: new SIGNALS.Signal(),
 		playAnimations: new SIGNALS.Signal(),
 
 		// notifications
@@ -17,9 +14,12 @@ var Editor = function () {
 		snapChanged: new SIGNALS.Signal(),
 		rendererChanged: new SIGNALS.Signal(),
 		sceneChanged: new SIGNALS.Signal(),
+
 		objectAdded: new SIGNALS.Signal(),
-		objectSelected: new SIGNALS.Signal(),
 		objectChanged: new SIGNALS.Signal(),
+		objectRemoved: new SIGNALS.Signal(),
+		objectSelected: new SIGNALS.Signal(),
+
 		materialChanged: new SIGNALS.Signal(),
 		clearColorChanged: new SIGNALS.Signal(),
 		fogTypeChanged: new SIGNALS.Signal(),
@@ -81,6 +81,8 @@ Editor.prototype = {
 
 		this.scene.remove( object );
 		this.removeHelper( object );
+
+		this.signals.objectRemoved.dispatch( object );
 		this.signals.sceneChanged.dispatch();
 
 	},
@@ -204,13 +206,13 @@ Editor.prototype = {
 		var geometry = object.geometry.clone();
 		geometry.applyMatrix( object.matrix );
 
-		object.setGeometry( geometry );
+		object.geometry = geometry;
 
 		object.position.set( 0, 0, 0 );
 		object.rotation.set( 0, 0, 0 );
 		object.scale.set( 1, 1, 1 );
 
-		signals.objectChanged.dispatch( object );
+		this.signals.objectChanged.dispatch( object );
 
 	}
 

+ 81 - 83
editor/js/Loader.js

@@ -26,20 +26,6 @@ var Loader = function ( editor ) {
 
 	}, false );
 
-	var timeout;
-
-	signals.sceneChanged.add( function () {
-
-		clearTimeout( timeout );
-
-		timeout = setTimeout( function () {
-
-			scope.saveLocalStorage( editor.scene );
-
-		}, 3000 );
-
-	} );
-
 	this.loadLocalStorage = function () {
 
 		if ( localStorage.threejsEditor !== undefined ) {
@@ -53,81 +39,25 @@ var Loader = function ( editor ) {
 
 	};
 
-	this.saveLocalStorage = function ( scene ) {
-
-		localStorage.threejsEditor = JSON.stringify( sceneExporter.parse( scene ) );
-		console.log( 'Saved state to Local Storage' );
-
-	}
-
-	this.handleJSON = function ( data, file, filename ) {
-
-		if ( data.metadata === undefined ) { // 2.0
-
-			data.metadata = { type: 'geometry' };
-
-		}
-
-		if ( data.metadata.type === undefined ) { // 3.0
-
-			data.metadata.type = 'geometry';
-
-		}
-
-		if ( data.metadata.version === undefined ) {
-
-			data.metadata.version = data.metadata.formatVersion;
-
-		}
-
-		if ( data.metadata.type === 'geometry' ) {
-
-			var loader = new THREE.JSONLoader();
-			var result = loader.parse( data );
-
-			var geometry = result.geometry;
-			var material = result.materials !== undefined
-						? new THREE.MeshFaceMaterial( result.materials )
-						: new THREE.MeshPhongMaterial();
-
-			geometry.sourceType = "ascii";
-			geometry.sourceFile = file.name;
-
-			var mesh = new THREE.Mesh( geometry, material );
-			mesh.name = filename;
-
-			editor.addObject( mesh );
-
-		} else if ( data.metadata.type === 'object' ) {
-
-			var loader = new THREE.ObjectLoader();
-			var result = loader.parse( data );
-
-			if ( result instanceof THREE.Scene ) {
-
-				editor.setScene( result );
-
-			} else {
-
-				editor.addObject( result );
-
-			}
-
-		} else if ( data.metadata.type === 'scene' ) {
+	var timeout;
 
-			// DEPRECATED
+	this.saveLocalStorage = function ( scene ) {
 
-			var loader = new THREE.SceneLoader();
-			loader.parse( data, function ( result ) {
+		clearTimeout( timeout );
 
-				editor.setScene( result.scene );
+		timeout = setTimeout( function () {
 
-			}, '' );
+			localStorage.threejsEditor = JSON.stringify( sceneExporter.parse( scene ) );
+			console.log( 'Saved state to Local Storage' );
 
-		}
+		}, 3000 );
 
 	};
 
+	signals.objectAdded.add( this.saveLocalStorage );
+	signals.objectChanged.add( this.saveLocalStorage );
+	signals.objectRemoved.add( this.saveLocalStorage );
+
 	this.parseFile = function ( file, filename, extension ) {
 
 		switch ( extension ) {
@@ -211,7 +141,7 @@ var Loader = function ( editor ) {
 						worker.onmessage = function ( event ) {
 
 							event.data.metadata = { version: 2 };
-							scope.handleJSON( event.data, file, filename );
+							handleJSON( event.data, file, filename );
 
 						};
 
@@ -236,7 +166,7 @@ var Loader = function ( editor ) {
 
 					}
 
-					scope.handleJSON( data, file, filename );
+					handleJSON( data, file, filename );
 
 				}, false );
 				reader.readAsText( file );
@@ -381,4 +311,72 @@ var Loader = function ( editor ) {
 
 	}
 
+	var handleJSON = function ( data, file, filename ) {
+
+		if ( data.metadata === undefined ) { // 2.0
+
+			data.metadata = { type: 'geometry' };
+
+		}
+
+		if ( data.metadata.type === undefined ) { // 3.0
+
+			data.metadata.type = 'geometry';
+
+		}
+
+		if ( data.metadata.version === undefined ) {
+
+			data.metadata.version = data.metadata.formatVersion;
+
+		}
+
+		if ( data.metadata.type === 'geometry' ) {
+
+			var loader = new THREE.JSONLoader();
+			var result = loader.parse( data );
+
+			var geometry = result.geometry;
+			var material = result.materials !== undefined
+						? new THREE.MeshFaceMaterial( result.materials )
+						: new THREE.MeshPhongMaterial();
+
+			geometry.sourceType = "ascii";
+			geometry.sourceFile = file.name;
+
+			var mesh = new THREE.Mesh( geometry, material );
+			mesh.name = filename;
+
+			editor.addObject( mesh );
+
+		} else if ( data.metadata.type === 'object' ) {
+
+			var loader = new THREE.ObjectLoader();
+			var result = loader.parse( data );
+
+			if ( result instanceof THREE.Scene ) {
+
+				editor.setScene( result );
+
+			} else {
+
+				editor.addObject( result );
+
+			}
+
+		} else if ( data.metadata.type === 'scene' ) {
+
+			// DEPRECATED
+
+			var loader = new THREE.SceneLoader();
+			loader.parse( data, function ( result ) {
+
+				editor.setScene( result.scene );
+
+			}, '' );
+
+		}
+
+	};
+
 }

+ 15 - 3
editor/js/Menubar.Edit.js

@@ -24,7 +24,11 @@ Menubar.Edit = function ( editor ) {
 	var option = new UI.Panel();
 	option.setClass( 'option' );
 	option.setTextContent( 'Clone' );
-	option.onClick( function () { editor.cloneObject( editor.selected ); } );
+	option.onClick( function () {
+
+		editor.cloneObject( editor.selected );
+
+	} );
 	options.add( option );
 
 	// flatten
@@ -32,7 +36,11 @@ Menubar.Edit = function ( editor ) {
 	var option = new UI.Panel();
 	option.setClass( 'option' );
 	option.setTextContent( 'Flatten' );
-	option.onClick( function () { editor.flattenObject( editor.selected ); } );
+	option.onClick( function () {
+
+		editor.flattenObject( editor.selected );
+
+	} );
 	options.add( option );
 
 	// delete
@@ -40,7 +48,11 @@ Menubar.Edit = function ( editor ) {
 	var option = new UI.Panel();
 	option.setClass( 'option' );
 	option.setTextContent( 'Delete' );
-	option.onClick( function () { editor.removeObject( editor.selected ); } );
+	option.onClick( function () {
+
+		editor.removeObject( editor.selected );
+
+	} );
 	options.add( option );
 
 	//

+ 8 - 14
editor/js/Viewport.js

@@ -45,7 +45,7 @@ var Viewport = function ( editor ) {
 	var transformControls = new THREE.TransformControls( camera, container.dom );
 	transformControls.addEventListener( 'change', function () {
 
-		signals.objectChanged.dispatch( selected );
+		signals.objectChanged.dispatch( editor.selected );
 
 	} );
 	sceneHelpers.add( transformControls.gizmo );
@@ -118,21 +118,17 @@ var Viewport = function ( editor ) {
 
 			if ( intersects.length > 0 ) {
 
-				selected = intersects[ 0 ].object;
+				editor.select( intersects[ 0 ].object );
 
 				if ( helpersToObjects[ selected.id ] !== undefined ) {
 
-					selected = helpersToObjects[ selected.id ];
+					editor.select( helpersToObjects[ selected.id ] );
 
 				}
 
-				signals.objectSelected.dispatch( selected );
-
 			} else {
 
-				selected = camera;
-
-				signals.objectSelected.dispatch( selected );
+				editor.select( camera );
 
 			}
 
@@ -150,9 +146,9 @@ var Viewport = function ( editor ) {
 
 		var intersects = getIntersects( event, objects );
 
-		if ( intersects.length > 0 && intersects[ 0 ].object === selected ) {
+		if ( intersects.length > 0 && intersects[ 0 ].object === editor.selected ) {
 
-			controls.focus( selected );
+			controls.focus( editor.selected );
 
 		}
 
@@ -237,11 +233,9 @@ var Viewport = function ( editor ) {
 
 			}
 
-			selected = object;
-
-			if ( selected instanceof THREE.PerspectiveCamera === false ) {
+			if ( object instanceof THREE.PerspectiveCamera === false ) {
 
-				transformControls.attach(object);
+				transformControls.attach( object );
 
 			}