Mercurial > projects > openmelee
comparison ships/asteroids.d @ 25:2bf818f8b005
fixed asteroids
author | zzzzrrr <mason.green@gmail.com> |
---|---|
date | Fri, 27 Mar 2009 16:25:17 -0400 |
parents | 441eb7672404 |
children |
comparison
equal
deleted
inserted
replaced
24:441eb7672404 | 25:2bf818f8b005 |
---|---|
30 import blaze.collision.shapes.bzPolygon : bzPolyDef; | 30 import blaze.collision.shapes.bzPolygon : bzPolyDef; |
31 import blaze.collision.shapes.bzShape : bzShapeDef; | 31 import blaze.collision.shapes.bzShape : bzShapeDef; |
32 import blaze.common.bzMath: bzVec2, bzMul, bzXForm; | 32 import blaze.common.bzMath: bzVec2, bzMul, bzXForm; |
33 import blaze.dynamics.forces.bzAttractor: bzAttractor; | 33 import blaze.dynamics.forces.bzAttractor: bzAttractor; |
34 | 34 |
35 | 35 import openmelee.ships.ship: Ship; |
36 import openmelee.ai.utilities; | 36 import openmelee.ai.utilities; |
37 | 37 |
38 const PI = 3.141593; | 38 const PI = 3.141593; |
39 | 39 |
40 class Asteroid | 40 class Asteroid : Ship |
41 { | 41 { |
42 | 42 |
43 bzBodyDef bd; | 43 bzBodyDef bd; |
44 bzBody rBody; | |
45 bzShapeDef sd; | 44 bzShapeDef sd; |
46 | 45 |
47 bzWorld world; | |
48 | |
49 this(bzWorld world) { | 46 this(bzWorld world) { |
50 this.world = world; | 47 super(world); |
51 init(); | 48 init(); |
49 calcRadius(); | |
52 } | 50 } |
53 | 51 |
54 void init() { | 52 void init() { |
55 | |
56 float minRadius = 0.1; | |
57 float maxRadius = 10; | |
58 float strength = 0.5f; | |
59 bzVec2 center = bzVec2(0,0); | |
60 | |
61 { | 53 { |
62 float radius = 0.5f; | 54 float radius = 0.5f; |
63 float density = 5.0f; | 55 float density = 5.0f; |
64 auto sd1 = new bzCircleDef(density, radius); | 56 auto sd1 = new bzCircleDef(density, radius); |
65 sd1.localPosition.set(-0.5f, 0.5f); | 57 sd1.localPosition.set(-0.5f, 0.5f); |
66 | 58 |
67 density = 0.0f; | 59 density = 0.0f; |
68 auto sd2 = new bzCircleDef(density, radius); | 60 auto sd2 = new bzCircleDef(density, radius); |
69 sd2.localPosition.set(0.5f, 0.5f); | 61 sd2.localPosition.set(0.5f, 0.5f); |
70 | 62 |
71 for (int i = 0; i < 5; ++i) | 63 float x = randomRange(-100f, 100f); |
72 { | 64 float y = randomRange(-100f, 100f); |
73 float x = randomRange(-100f, 100f); | 65 bzVec2 position = bzVec2(x , y); |
74 float y = randomRange(-100f, 100f); | 66 float angle = randomRange(-PI, PI); |
75 bzVec2 position = bzVec2(x , y); | 67 bd = new bzBodyDef(position, angle); |
76 float angle = randomRange(-PI, PI); | 68 bd.allowFreeze = false; |
77 bd = new bzBodyDef(position, angle); | 69 bd.allowSleep = false; |
78 bd.allowFreeze = false; | 70 rBody = world.createBody(bd); |
79 bd.allowSleep = false; | 71 rBody.createShape(sd1); |
80 rBody = world.createBody(bd); | 72 rBody.createShape(sd2); |
81 rBody.createShape(sd1); | 73 rBody.setMassFromShapes(); |
82 rBody.createShape(sd2); | 74 rBody.linearVelocity = bzVec2(x, y); |
83 rBody.setMassFromShapes(); | |
84 auto attractor = new bzAttractor(rBody, center, strength, minRadius, maxRadius); | |
85 world.addForce(attractor); | |
86 rBody.linearVelocity = bzVec2(x*0.1, y*0.1); | |
87 } | |
88 } | |
89 | |
90 { | |
91 auto sd1 = new bzPolyDef(); | |
92 sd1.setAsBox(0.25f, 0.5f); | |
93 sd1.density = 5.0f; | |
94 | |
95 auto sd2 = new bzPolyDef(); | |
96 sd2.setAsBox(0.25f, 0.5f, bzVec2(0.0f, -0.5f), 0.5f * PI); | |
97 sd2.density = 5.0f; | |
98 | |
99 for (int i = 0; i < 5; ++i) | |
100 { | |
101 float x = randomRange(-100f, 100f); | |
102 float y = randomRange(-100f, 100f); | |
103 bzVec2 position = bzVec2(x , y); | |
104 float angle = randomRange(-PI, PI); | |
105 bd = new bzBodyDef(position, angle); | |
106 bd.allowFreeze = false; | |
107 bd.allowSleep = false; | |
108 rBody = world.createBody(bd); | |
109 rBody.createShape(sd1); | |
110 rBody.createShape(sd2); | |
111 rBody.setMassFromShapes(); | |
112 auto attractor = new bzAttractor(rBody, center, strength, minRadius, maxRadius); | |
113 world.addForce(attractor); | |
114 rBody.linearVelocity = bzVec2(x*0.1, y*0.1); | |
115 } | |
116 } | |
117 | |
118 { | |
119 bzXForm xf1; | |
120 xf1.R.set(0.3524f * PI); | |
121 xf1.position = bzMul(xf1.R, bzVec2(1.0f, 0.0f)); | |
122 | |
123 auto sd1 = new bzPolyDef(); | |
124 sd1.vertices.length = 3; | |
125 sd1.vertices[0] = bzMul(xf1, bzVec2(-1.0f, 0.0f)); | |
126 sd1.vertices[1] = bzMul(xf1, bzVec2(1.0f, 0.0f)); | |
127 sd1.vertices[2] = bzMul(xf1, bzVec2(0.0f, 0.5f)); | |
128 sd1.density = 5.0f; | |
129 | |
130 bzXForm xf2; | |
131 xf2.R.set(-0.3524f * PI); | |
132 xf2.position = bzMul(xf2.R, bzVec2(-1.0f, 0.0f)); | |
133 | |
134 auto sd2 = new bzPolyDef(); | |
135 sd2.vertices.length = 3; | |
136 sd2.vertices[0] = bzMul(xf2, bzVec2(-1.0f, 0.0f)); | |
137 sd2.vertices[1] = bzMul(xf2, bzVec2(1.0f, 0.0f)); | |
138 sd2.vertices[2] = bzMul(xf2, bzVec2(0.0f, 0.5f)); | |
139 sd2.density = 5.0f; | |
140 | |
141 for (int i = 0; i < 5; ++i) | |
142 { | |
143 float x = randomRange(-100f, 100f); | |
144 float y = randomRange(-100f, 100f); | |
145 bzVec2 position = bzVec2(x , y); | |
146 float angle = 0.0f; | |
147 bd = new bzBodyDef(position, angle); | |
148 bd.allowFreeze = false; | |
149 bd.allowSleep = false; | |
150 rBody = world.createBody(bd); | |
151 rBody.createShape(sd1); | |
152 rBody.createShape(sd2); | |
153 rBody.setMassFromShapes(); | |
154 auto attractor = new bzAttractor(rBody, center, strength, minRadius, maxRadius); | |
155 world.addForce(attractor); | |
156 rBody.linearVelocity = bzVec2(x*0.1, y*0.1); | |
157 } | |
158 } | 75 } |
159 } | 76 } |
160 } | 77 } |