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