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