comparison 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
comparison
equal deleted inserted replaced
6:eb6059f7035a 7:2217fd1fe384
32 import tango.io.Stdout: Stdout; 32 import tango.io.Stdout: Stdout;
33 33
34 import tango.util.container.LinkedList : LinkedList; 34 import tango.util.container.LinkedList : LinkedList;
35 import blaze.dynamics.bzBody : bzBody; 35 import blaze.dynamics.bzBody : bzBody;
36 import blaze.collision.shapes.bzShape : bzShape; 36 import blaze.collision.shapes.bzShape : bzShape;
37 import blaze.common.bzMath: bzVec2, bzCross; 37 import blaze.common.bzMath: bzVec2, bzCross, bzClamp;
38 import blaze.bzWorld : bzWorld; 38 import blaze.bzWorld : bzWorld;
39 import blaze.dynamics.forces.bzAttractor: bzAttractor; 39 import blaze.dynamics.forces.bzAttractor: bzAttractor;
40 40
41 alias LinkedList!(bzShape) ShapeList; 41 alias LinkedList!(bzShape) ShapeList;
42 42
48 bzVec2 engineForce; 48 bzVec2 engineForce;
49 bzVec2 turnForce; 49 bzVec2 turnForce;
50 bzVec2 leftTurnPoint; 50 bzVec2 leftTurnPoint;
51 bzVec2 rightTurnPoint; 51 bzVec2 rightTurnPoint;
52 52
53 float maxLinVel = 100;
54 float maxAngVel = 2;
55
53 this(bzWorld world) { 56 this(bzWorld world) {
57
54 this.world = world; 58 this.world = world;
55 shapes = new ShapeList; 59 shapes = new ShapeList;
56 } 60 }
57 61
58 void thrust() { 62 void thrust() {
63
59 rBody.force += engineForce.rotate(rBody.angle); 64 rBody.force += engineForce.rotate(rBody.angle);
60 } 65 }
61 66
62 void turnLeft() { 67 void turnLeft() {
68
63 rBody.torque += bzCross(leftTurnPoint.rotate(rBody.angle), 69 rBody.torque += bzCross(leftTurnPoint.rotate(rBody.angle),
64 turnForce.rotate(rBody.angle)); 70 turnForce.rotate(rBody.angle));
65 } 71 }
66 72
67 void turnRight() { 73 void turnRight() {
74
68 rBody.torque += bzCross(rightTurnPoint.rotate(rBody.angle), 75 rBody.torque += bzCross(rightTurnPoint.rotate(rBody.angle),
69 turnForce.rotate(rBody.angle)); 76 turnForce.rotate(rBody.angle));
70 } 77 }
71 78
72 void setGravity() { 79 void setGravity() {
73 80
74 float minRadius = 1; 81 float minRadius = 0.1;
75 float maxRadius = 30; 82 float maxRadius = 10;
76 float strength = 4; 83 float strength = 3.5;
77 bzVec2 center = bzVec2(0,0); 84 bzVec2 center = bzVec2(0,0);
78 auto attractor = new bzAttractor(rBody, center, strength, minRadius, maxRadius); 85 auto attractor = new bzAttractor(rBody, center, strength, minRadius, maxRadius);
79 world.addForce(attractor); 86 world.addForce(attractor);
80 } 87 }
88
89 void limitVelocity() {
90
91 float vx = rBody.linearVelocity.x;
92 float vy = rBody.linearVelocity.y;
93 float av = rBody.angularVelocity;
94 rBody.linearVelocity.x = bzClamp(vx, -maxLinVel, maxLinVel);
95 rBody.linearVelocity.y = bzClamp(vy, -maxLinVel, maxLinVel);
96 rBody.angularVelocity = bzClamp(av, -maxAngVel, maxAngVel);
97 }
81 } 98 }