瀏覽代碼

Correctly initializing the coordinator and worker.

Now sending init, update (when needed) and collide messages.
Raanan Weber 10 年之前
父節點
當前提交
230eb9a1e2

+ 22 - 1
Babylon/Collisions/babylon.collisionCoordinator.js

@@ -91,13 +91,34 @@ var BABYLON;
             position.divideToRef(collider.radius, this._scaledPosition);
             velocity.divideToRef(collider.radius, this._scaledVelocity);
             this._collisionsCallbackArray[collisionIndex] = onNewPosition;
+            var payload = {
+                collider: {
+                    position: this._scaledPosition.asArray(),
+                    velocity: this._scaledVelocity.asArray(),
+                    radius: collider.radius.asArray()
+                },
+                collisionId: collisionIndex,
+                excludedMeshUniqueId: excludedMesh ? excludedMesh.uniqueId : null,
+                maximumRetry: maximumRetry
+            };
+            var message = {
+                payload: payload,
+                taskType: 2 /* COLLIDE */
+            };
+            //console.time("webworker");
+            this._worker.postMessage(message);
         };
         CollisionCoordinatorWorker.prototype.init = function (scene) {
             this._scene = scene;
             this._scene.registerAfterRender(this._afterRender);
-            var blobURL = URL.createObjectURL(new Blob(['(', BABYLON.CollisionWorker.toString(), ')()'], { type: 'application/javascript' }));
+            var blobURL = URL.createObjectURL(new Blob(['(function(CollisionWorker){', BABYLON.CollisionWorker, '})({})'], { type: 'application/javascript' }));
             this._worker = new Worker(blobURL);
             URL.revokeObjectURL(blobURL);
+            var message = {
+                payload: {},
+                taskType: 0 /* INIT */
+            };
+            this._worker.postMessage(message);
         };
         CollisionCoordinatorWorker.prototype.destroy = function () {
             this._scene.unregisterAfterRender(this._afterRender);

+ 23 - 1
Babylon/Collisions/babylon.collisionCoordinator.ts

@@ -179,14 +179,36 @@ module BABYLON {
 
             this._collisionsCallbackArray[collisionIndex] = onNewPosition;
 
+            var payload: CollidePayload = {
+                collider: {
+                    position: this._scaledPosition.asArray(),
+                    velocity: this._scaledVelocity.asArray(),
+                    radius: collider.radius.asArray()
+                },
+                collisionId: collisionIndex,
+                excludedMeshUniqueId: excludedMesh ? excludedMesh.uniqueId : null,
+                maximumRetry: maximumRetry
+            };
+            var message: BabylonMessage = {
+                payload: payload,
+                taskType: WorkerTaskType.COLLIDE
+            }
+            //console.time("webworker");
+            this._worker.postMessage(message);
+
         }
 
         public init(scene: Scene): void {
             this._scene = scene;
             this._scene.registerAfterRender(this._afterRender);
-            var blobURL = URL.createObjectURL(new Blob(['(', BABYLON.CollisionWorker.toString(), ')()'], { type: 'application/javascript' }));
+            var blobURL = URL.createObjectURL(new Blob(['(function(CollisionWorker){', BABYLON.CollisionWorker, '})({})'], { type: 'application/javascript' }));
             this._worker = new Worker(blobURL);
             URL.revokeObjectURL(blobURL);
+            var message: BabylonMessage = {
+                payload: {},
+                taskType: WorkerTaskType.INIT
+            }
+            this._worker.postMessage(message);
         }
 
         public destroy(): void {

File diff suppressed because it is too large
+ 198 - 198
Babylon/Collisions/babylon.collisionWorker.js


File diff suppressed because it is too large
+ 5 - 1
Babylon/Collisions/babylon.collisionWorker.ts