diff ship.d @ 7:2217fd1fe384

added angular and linear velocity limit
author zzzzrrr <mason.green@gmail.com>
date Sat, 21 Mar 2009 19:34:20 -0400
parents eb6059f7035a
children 4ee9e4a0c03b
line wrap: on
line diff
--- a/ship.d	Sat Mar 21 16:42:08 2009 -0400
+++ b/ship.d	Sat Mar 21 19:34:20 2009 -0400
@@ -34,7 +34,7 @@
 import tango.util.container.LinkedList : LinkedList;
 import blaze.dynamics.bzBody : bzBody;
 import blaze.collision.shapes.bzShape : bzShape;
-import blaze.common.bzMath: bzVec2, bzCross;
+import blaze.common.bzMath: bzVec2, bzCross, bzClamp;
 import blaze.bzWorld : bzWorld;
 import blaze.dynamics.forces.bzAttractor: bzAttractor;
 
@@ -50,32 +50,49 @@
     bzVec2 leftTurnPoint;
     bzVec2 rightTurnPoint;
 
+    float maxLinVel = 100;
+    float maxAngVel = 2;
+    
     this(bzWorld world) {
+        
         this.world = world;
         shapes = new ShapeList;
     }
 
     void thrust() {
+        
         rBody.force += engineForce.rotate(rBody.angle);
     }
 
     void turnLeft() {
+        
         rBody.torque += bzCross(leftTurnPoint.rotate(rBody.angle), 
                                 turnForce.rotate(rBody.angle));
     }
     
     void turnRight() {
+        
         rBody.torque += bzCross(rightTurnPoint.rotate(rBody.angle), 
                                 turnForce.rotate(rBody.angle));
     }
     
     void setGravity() {
         
-        float minRadius = 1;
-        float maxRadius = 30;
-        float strength = 4;
+        float minRadius = 0.1;
+        float maxRadius = 10;
+        float strength = 3.5;
         bzVec2 center = bzVec2(0,0);
         auto attractor = new bzAttractor(rBody, center, strength, minRadius, maxRadius);
         world.addForce(attractor);
     }
+    
+    void limitVelocity() {
+        
+        float vx = rBody.linearVelocity.x;
+        float vy = rBody.linearVelocity.y;
+        float av = rBody.angularVelocity;
+        rBody.linearVelocity.x = bzClamp(vx, -maxLinVel, maxLinVel);
+        rBody.linearVelocity.y = bzClamp(vy, -maxLinVel, maxLinVel);
+        rBody.angularVelocity = bzClamp(av, -maxAngVel, maxAngVel);
+    }
 }