ソースを参照

Bug fixes

Returned value from the worker is now correctly calculated
Worker has now less dependencies with the sub mesh original
functionality
A string was added to simulate the way the BJS file will be build.
Should be removed .
Raanan Weber 10 年 前
コミット
5b8d1ee906

+ 4 - 1
Babylon/Cameras/babylon.arcRotateCamera.js

@@ -44,6 +44,8 @@ var BABYLON;
             this._newPosition = BABYLON.Vector3.Zero();
             this._onCollisionPositionChange = function (collisionId, newPosition, collidedMesh) {
                 if (collidedMesh === void 0) { collidedMesh = null; }
+                if (collisionId != null || collisionId != undefined)
+                    newPosition.multiplyInPlace(_this._collider.radius);
                 if (!newPosition.equalsWithEpsilon(_this.position)) {
                     _this.position.copyFrom(_this._previousPosition);
                     _this.alpha = _this._previousAlpha;
@@ -402,4 +404,5 @@ var BABYLON;
     })(BABYLON.Camera);
     BABYLON.ArcRotateCamera = ArcRotateCamera;
 })(BABYLON || (BABYLON = {}));
-//# sourceMappingURL=babylon.arcRotateCamera.js.map
+
+//# sourceMappingURL=../Cameras/babylon.arcRotateCamera.js.map

+ 3 - 0
Babylon/Cameras/babylon.arcRotateCamera.ts

@@ -458,6 +458,9 @@
 
         private _onCollisionPositionChange = (collisionId: number, newPosition: Vector3, collidedMesh: AbstractMesh = null) => {
 
+            if (collisionId != null || collisionId != undefined)
+               newPosition.multiplyInPlace(this._collider.radius);
+
             if (!newPosition.equalsWithEpsilon(this.position)) {
                 this.position.copyFrom(this._previousPosition);
 

+ 7 - 2
Babylon/Cameras/babylon.freeCamera.js

@@ -27,7 +27,11 @@ var BABYLON;
             this._newPosition = BABYLON.Vector3.Zero();
             this._onCollisionPositionChange = function (collisionId, newPosition, collidedMesh) {
                 if (collidedMesh === void 0) { collidedMesh = null; }
-                newPosition.subtractToRef(_this._oldPosition, _this._diffPosition);
+                //TODO move this to the collision coordinator!
+                if (collisionId != null || collisionId != undefined)
+                    newPosition.multiplyInPlace(_this._collider.radius);
+                _this._newPosition.copyFrom(newPosition);
+                _this._newPosition.subtractToRef(_this._oldPosition, _this._diffPosition);
                 var oldPosition = _this.position.clone();
                 if (_this._diffPosition.length() > BABYLON.Engine.CollisionsEpsilon) {
                     _this.position.addInPlace(_this._diffPosition);
@@ -217,4 +221,5 @@ var BABYLON;
     })(BABYLON.TargetCamera);
     BABYLON.FreeCamera = FreeCamera;
 })(BABYLON || (BABYLON = {}));
-//# sourceMappingURL=babylon.freeCamera.js.map
+
+//# sourceMappingURL=../Cameras/babylon.freeCamera.js.map

+ 8 - 1
Babylon/Cameras/babylon.freeCamera.ts

@@ -194,7 +194,14 @@
         }
 
         private _onCollisionPositionChange = (collisionId: number, newPosition: Vector3, collidedMesh: AbstractMesh = null) => {
-            newPosition.subtractToRef(this._oldPosition, this._diffPosition);
+            //TODO move this to the collision coordinator!
+            if (collisionId != null || collisionId != undefined)
+                newPosition.multiplyInPlace(this._collider.radius);
+
+            this._newPosition.copyFrom(newPosition);
+
+            this._newPosition.subtractToRef(this._oldPosition, this._diffPosition);
+
             var oldPosition = this.position.clone();
             if (this._diffPosition.length() > Engine.CollisionsEpsilon) {
                 this.position.addInPlace(this._diffPosition);

ファイルの差分が大きいため隠しています
+ 11 - 2
Babylon/Collisions/babylon.collisionCoordinator.js


ファイルの差分が大きいため隠しています
+ 13 - 3
Babylon/Collisions/babylon.collisionCoordinator.ts


ファイルの差分が大きいため隠しています
+ 13 - 11
Babylon/Collisions/babylon.collisionWorker.js


ファイルの差分が大きいため隠しています
+ 14 - 12
Babylon/Collisions/babylon.collisionWorker.ts


+ 7 - 3
Babylon/Mesh/babylon.abstractMesh.js

@@ -74,6 +74,9 @@ var BABYLON;
             this._isWorldMatrixFrozen = false;
             this._onCollisionPositionChange = function (collisionId, newPosition, collidedMesh) {
                 if (collidedMesh === void 0) { collidedMesh = null; }
+                //TODO move this to the collision coordinator!
+                if (collisionId != null || collisionId != undefined)
+                    newPosition.multiplyInPlace(_this._collider.radius);
                 newPosition.subtractToRef(_this._oldPositionForCollisions, _this._diffPositionForCollisions);
                 if (_this._diffPositionForCollisions.length() > BABYLON.Engine.CollisionsEpsilon) {
                     _this.position.addInPlace(_this._diffPositionForCollisions);
@@ -196,7 +199,7 @@ var BABYLON;
                 this.rotationQuaternion = BABYLON.Quaternion.RotationYawPitchRoll(this.rotation.y, this.rotation.x, this.rotation.z);
                 this.rotation = BABYLON.Vector3.Zero();
             }
-            if (!space || space === BABYLON.Space.LOCAL) {
+            if (!space || space === 0 /* LOCAL */) {
                 var rotationQuaternion = BABYLON.Quaternion.RotationAxis(axis, amount);
                 this.rotationQuaternion = this.rotationQuaternion.multiply(rotationQuaternion);
             }
@@ -212,7 +215,7 @@ var BABYLON;
         };
         AbstractMesh.prototype.translate = function (axis, distance, space) {
             var displacementVector = axis.scale(distance);
-            if (!space || space === BABYLON.Space.LOCAL) {
+            if (!space || space === 0 /* LOCAL */) {
                 var tempV3 = this.getPositionExpressedInLocalSpace().add(displacementVector);
                 this.setPositionWithLocalVector(tempV3);
             }
@@ -813,4 +816,5 @@ var BABYLON;
     })(BABYLON.Node);
     BABYLON.AbstractMesh = AbstractMesh;
 })(BABYLON || (BABYLON = {}));
-//# sourceMappingURL=babylon.abstractMesh.js.map
+
+//# sourceMappingURL=../Mesh/babylon.abstractMesh.js.map

+ 4 - 0
Babylon/Mesh/babylon.abstractMesh.ts

@@ -718,6 +718,10 @@
         }
 
         private _onCollisionPositionChange = (collisionId: number, newPosition: Vector3, collidedMesh: AbstractMesh = null) => {
+            //TODO move this to the collision coordinator!
+            if (collisionId != null || collisionId != undefined)
+                newPosition.multiplyInPlace(this._collider.radius);
+
             newPosition.subtractToRef(this._oldPositionForCollisions, this._diffPositionForCollisions);
 
             if (this._diffPositionForCollisions.length() > Engine.CollisionsEpsilon) {