comparison ships/ship.d @ 26:88cca12cc8b9

added ship explode
author zzzzrrr <mason.green@gmail.com>
date Fri, 27 Mar 2009 19:26:01 -0400
parents 441eb7672404
children da11cc30423f
comparison
equal deleted inserted replaced
25:2bf818f8b005 26:88cca12cc8b9
29 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 */ 30 */
31 module openmelee.ships.ship; 31 module openmelee.ships.ship;
32 32
33 import tango.io.Stdout: Stdout; 33 import tango.io.Stdout: Stdout;
34 import tango.math.Math : PI;
34 35
35 import tango.util.container.LinkedList : LinkedList; 36 import tango.util.container.LinkedList : LinkedList;
36 import blaze.dynamics.bzBody : bzBody; 37 import blaze.dynamics.bzBody : bzBody;
37 import blaze.collision.shapes.bzShape : bzShape; 38 import blaze.collision.shapes.bzShape : bzShape, bzShapeDef, bzMassData;
39 import blaze.collision.shapes.bzShapeType;
38 import blaze.common.bzMath: bzVec2, bzCross, bzClamp; 40 import blaze.common.bzMath: bzVec2, bzCross, bzClamp;
39 import blaze.bzWorld : bzWorld; 41 import blaze.bzWorld : bzWorld;
40 import blaze.dynamics.forces.bzAttractor: bzAttractor; 42 import blaze.dynamics.forces.bzAttractor: bzAttractor;
43 import blaze.dynamics.bzBodyDef : bzBodyDef;
44 import blaze.collision.shapes.bzPolygon : bzPolyDef, bzPolygon;
45 import blaze.collision.shapes.bzCircle : bzCircleDef;
41 46
42 alias LinkedList!(bzShape) ShapeList; 47 alias LinkedList!(bzShape) ShapeList;
48
49 import openmelee.ai.utilities : randomRange;
43 50
44 struct State 51 struct State
45 { 52 {
46 bzVec2 position; 53 bzVec2 position;
47 bzVec2 velocity; 54 bzVec2 velocity;
102 } 109 }
103 110
104 void setPlanetGravity() { 111 void setPlanetGravity() {
105 float minRadius = 0.1; 112 float minRadius = 0.1;
106 float maxRadius = 10; 113 float maxRadius = 10;
107 float strength = 4.0; 114 float strength = 0.75;
108 bzVec2 center = bzVec2(0,0); 115 bzVec2 center = bzVec2(0,0);
109 auto attractor = new bzAttractor(rBody, center, strength, minRadius, maxRadius); 116 auto attractor = new bzAttractor(rBody, center, strength, minRadius, maxRadius);
110 world.addForce(attractor); 117 world.addForce(attractor);
111 } 118 }
112 119
131 if(s.sweepRadius > state.radius) { 138 if(s.sweepRadius > state.radius) {
132 state.radius = s.sweepRadius; 139 state.radius = s.sweepRadius;
133 } 140 }
134 } 141 }
135 } 142 }
143
144 void explode() {
145 for(bzShape shape = rBody.shapeList; shape; shape = shape.next) {
146 auto bodyDef = new bzBodyDef;
147 switch(shape.type) {
148 case bzShapeType.POLYGON:
149 auto s = cast(bzPolygon) shape;
150 auto shapeDef = new bzPolyDef;
151 shapeDef.vertices = s.vertices;
152 shapeDef.density = s.density;
153 bodyDef.position = s.worldCenter;
154 bodyDef.angle = randomRange(-PI, PI);
155 bodyDef.allowFreeze = false;
156 bodyDef.allowSleep = false;
157 auto shrapnel = world.createBody(bodyDef);
158 shrapnel.createShape(shapeDef);
159 bzMassData massData;
160 massData.mass = 5.0f;
161 shrapnel.setMass(massData);
162 float x = randomRange(-300, 300);
163 float y = randomRange(-300, 300);
164 shrapnel.linearVelocity = bzVec2(x, y);
165 break;
166 default:
167 break;
168 }
169 }
170 }
171
136 } 172 }