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 }