Browse Source

Small code cleanup in scene loader.

alteredq 14 years ago
parent
commit
8679cbcea5
3 changed files with 207 additions and 200 deletions
  1. 161 161
      build/ThreeExtras.js
  2. 2 2
      examples/scene_test.html
  3. 44 37
      src/extras/SceneUtils.js

File diff suppressed because it is too large
+ 161 - 161
build/ThreeExtras.js


+ 2 - 2
examples/scene_test.html

@@ -70,7 +70,7 @@
 				renderer.domElement.style.position = "relative";
 				container.appendChild( renderer.domElement );
 
-				var callback = function( result ) {
+				var callback_sync = function( result ) {
 				
 					scene = result.scene;
 					camera = result.currentCamera;
@@ -97,7 +97,7 @@
 					
 				}
 				
-				SceneUtils.loadScene( "scenes/test_scene.js", callback, callback_async );
+				SceneUtils.loadScene( "scenes/test_scene.js", callback_sync, callback_async );
 				
 
 				stats = new Stats();

+ 44 - 37
src/extras/SceneUtils.js

@@ -1,19 +1,37 @@
 var SceneUtils = {
 	
-	loadScene : function( url, callback, callback_final ) {
+	loadScene : function( url, callback_sync, callback_async ) {
 
-		var dg, dm, dd, dl, dc, df, dt,
-			g, o, m, l, p, c, t, f, tt, pp,
-			geometry, material, camera, fog, 
-			texture, images,
-			materials,
-			loader, worker;
-			
-		worker = new Worker( url );
-		loader = new THREE.Loader();
+		var worker = new Worker( url );
+		worker.postMessage( 0 );
 
 		worker.onmessage = function( event ) {
 
+			var dg, dm, dd, dl, dc, df, dt,
+				g, o, m, l, p, c, t, f, tt, pp,
+				geometry, material, camera, fog, 
+				texture, images,
+				materials,
+				data, loader, async_counter,
+				result;
+
+			data = event.data;
+			loader = new THREE.Loader();
+			async_counter = 0;
+			
+			result = {
+				
+				scene: new THREE.Scene(),
+				geometries: {},
+				materials: {},
+				textures: {},
+				objects: {},
+				cameras: {},
+				lights: {},
+				fogs: {}
+			
+			};
+			
 			function handle_objects() {
 				
 				for( dd in data.objects ) {
@@ -52,6 +70,7 @@ var SceneUtils = {
 					}
 					
 				}
+				
 			};
 			
 			function handle_mesh( geo, id ) {
@@ -66,36 +85,20 @@ var SceneUtils = {
 				return function( geo ) {
 					
 					handle_mesh( geo, id );
+					
 					async_counter -= 1;
 					if( async_counter == 0 ) {
 						
-						callback_final( result );
+						callback_async( result );
 						
 					}
 					
 				}
 				
-			}
-			
-			var data = event.data;
-			
-			var result = {
-				
-				scene: new THREE.Scene(),
-				geometries: {},
-				materials: {},
-				textures: {},
-				objects: {},
-				cameras: {},
-				lights: {},
-				fogs: {}
-			
 			};
 			
 			
-			// geometries	
-			
-			var async_counter = 0;
+			// geometries			
 			
 			for( dg in data.geometries ) {
 				
@@ -170,8 +173,7 @@ var SceneUtils = {
 					images = ImageUtils.loadArray( tt.url );
 					texture = new THREE.Texture( images );
 					
-				}
-				else {
+				} else {
 					
 					texture = ImageUtils.loadTexture( tt.url );
 					
@@ -212,11 +214,10 @@ var SceneUtils = {
 				
 			}
 			
-			// objects
+			// objects ( synchronous init of procedural primitives )
 			
 			handle_objects();
 			
-			
 			// lights
 			
 			for( dl in data.lights ) {
@@ -298,7 +299,13 @@ var SceneUtils = {
 				
 			}
 			
-			result.currentCamera = result.cameras[ data.defaults.camera ];
+			// defaults
+			
+			if ( result.cameras && data.defaults.camera ) {
+				
+				result.currentCamera = result.cameras[ data.defaults.camera ];
+				
+			}
 			
 			if ( result.fogs && data.defaults.fog ) {
 			
@@ -312,11 +319,11 @@ var SceneUtils = {
 			
 			result.bgColorAlpha = data.defaults.bgalpha;
 			
-			callback( result );
+			// synchronous callback
+			
+			callback_sync( result );
 
 		};
-
-		worker.postMessage( 0 );
 		
 	},
 

Some files were not shown because too many files changed in this diff