Mercurial > projects > openmelee
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); + } }