Browse Source

Adding time step setting

It is now possible to slow down the physics engine (to give it a new
fixed time step delta).
Raanan Weber 9 years ago
parent
commit
a3628c1649

+ 5 - 1
src/Physics/Plugins/babylon.cannonJSPlugin.ts

@@ -23,9 +23,13 @@
         public setGravity(gravity: Vector3): void {
             this.world.gravity.copy(gravity);
         }
+        
+        public setTimeStep(timeStep: number) {
+            this._fixedTimeStep = timeStep;
+        }
 
         public executeStep(delta: number, impostors: Array<PhysicsImpostor>): void {
-            this.world.step(this._fixedTimeStep, this._useDeltaForWorldStep ? delta * 1000 : 0);
+            this.world.step(this._fixedTimeStep, this._useDeltaForWorldStep ? delta * 1000 : 0, 3);
         }
 
         public applyImpulse(impostor: PhysicsImpostor, force: Vector3, contactPoint: Vector3) {

+ 4 - 0
src/Physics/Plugins/babylon.oimoJSPlugin.ts

@@ -16,6 +16,10 @@ module BABYLON {
         public setGravity(gravity: Vector3) {
             this.world.gravity.copy(gravity);
         }
+        
+        public setTimeStep(timeStep: number) {
+            this.world.timeStep = timeStep;
+        }
 
         private _tmpImpostorsArray: Array<PhysicsImpostor> = [];
 

+ 12 - 0
src/Physics/babylon.physicsEngine.ts

@@ -17,12 +17,23 @@
             }
             gravity = gravity || new Vector3(0, -9.807, 0)
             this.setGravity(gravity);
+            this.setTimeStep();
         }
 
         public setGravity(gravity: Vector3): void {
             this.gravity = gravity;
             this._physicsPlugin.setGravity(this.gravity);
         }
+        
+        /**
+         * Set the time step of the physics engine.
+         * default is 1/60. 
+         * To slow it down, enter 1/600 for example.
+         * To speed it up, 1/30
+         */
+        public setTimeStep(newTimeStep: number = 1/60) {
+            this._physicsPlugin.setTimeStep(newTimeStep);
+        }
 
         public dispose(): void {
             this._impostors.forEach(function(impostor) {
@@ -139,6 +150,7 @@
         world: any;
         name: string;
         setGravity(gravity: Vector3);
+        setTimeStep(timeStep: number);
         executeStep(delta: number, impostors: Array<PhysicsImpostor>): void; //not forgetting pre and post events
         applyImpulse(impostor: PhysicsImpostor, force: Vector3, contactPoint: Vector3);
         applyForce(impostor: PhysicsImpostor, force: Vector3, contactPoint: Vector3);