annotate ships/asteroids.d @ 24:441eb7672404

impleneted steer to avoid
author zzzzrrr <mason.green@gmail.com>
date Fri, 27 Mar 2009 16:05:24 -0400
parents 4fce5596d1f6
children 2bf818f8b005
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
22
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
1 /*
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
2 * Copyright (c) 2009 Blaze Contributors http://www.dsource.org/projects/blaze
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
3 * Maintained by Mason Green (zzzzrrr)
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
4 *
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
5 * This software is provided 'as-is', without any express or implied
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
6 * warranty. In no event will the authors be held liable for any damages
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
7 * arising from the use of this software.
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
8 *
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
9 * Permission is granted to anyone to use this software for any purpose,
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
10 * including commercial applications, and to alter it and redistribute it
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
11 * freely, subject to the following restrictions:
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
12 *
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
13 * 1. The origin of this software must not be misrepresented; you must not
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
14 * claim that you wrote the original software. If you use this software
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
15 * in a product, an acknowledgment in the product documentation would be
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
16 * appreciated but is not required.
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
17 *
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
18 * 2. Altered source versions must be plainly marked as such, and must not be
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
19 * misrepresented as being the original software.
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
20 *
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
21 * 3. This notice may not be removed or altered from any source
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
22 * distribution.
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
23 */
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
24 module openmelee.ships.asteroids;
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
25
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
26 import blaze.dynamics.bzBody : bzBody;
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
27 import blaze.bzWorld: bzWorld;
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
28 import blaze.dynamics.bzBodyDef;
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
29 import blaze.collision.shapes.bzCircle : bzCircleDef;
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
30 import blaze.collision.shapes.bzPolygon : bzPolyDef;
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
31 import blaze.collision.shapes.bzShape : bzShapeDef;
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
32 import blaze.common.bzMath: bzVec2, bzMul, bzXForm;
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
33 import blaze.dynamics.forces.bzAttractor: bzAttractor;
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
34
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
35
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
36 import openmelee.ai.utilities;
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
37
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
38 const PI = 3.141593;
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
39
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
40 class Asteroid
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
41 {
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
42
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
43 bzBodyDef bd;
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
44 bzBody rBody;
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
45 bzShapeDef sd;
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
46
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
47 bzWorld world;
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
48
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
49 this(bzWorld world) {
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
50 this.world = world;
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
51 init();
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
52 }
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
53
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
54 void init() {
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
55
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
56 float minRadius = 0.1;
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
57 float maxRadius = 10;
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
58 float strength = 0.5f;
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
59 bzVec2 center = bzVec2(0,0);
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
60
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
61 {
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
62 float radius = 0.5f;
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
63 float density = 5.0f;
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
64 auto sd1 = new bzCircleDef(density, radius);
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
65 sd1.localPosition.set(-0.5f, 0.5f);
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
66
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
67 density = 0.0f;
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
68 auto sd2 = new bzCircleDef(density, radius);
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
69 sd2.localPosition.set(0.5f, 0.5f);
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
70
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
71 for (int i = 0; i < 5; ++i)
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
72 {
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
73 float x = randomRange(-100f, 100f);
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
74 float y = randomRange(-100f, 100f);
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
75 bzVec2 position = bzVec2(x , y);
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
76 float angle = randomRange(-PI, PI);
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
77 bd = new bzBodyDef(position, angle);
24
441eb7672404 impleneted steer to avoid
zzzzrrr <mason.green@gmail.com>
parents: 22
diff changeset
78 bd.allowFreeze = false;
441eb7672404 impleneted steer to avoid
zzzzrrr <mason.green@gmail.com>
parents: 22
diff changeset
79 bd.allowSleep = false;
22
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
80 rBody = world.createBody(bd);
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
81 rBody.createShape(sd1);
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
82 rBody.createShape(sd2);
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
83 rBody.setMassFromShapes();
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
84 auto attractor = new bzAttractor(rBody, center, strength, minRadius, maxRadius);
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
85 world.addForce(attractor);
24
441eb7672404 impleneted steer to avoid
zzzzrrr <mason.green@gmail.com>
parents: 22
diff changeset
86 rBody.linearVelocity = bzVec2(x*0.1, y*0.1);
22
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
87 }
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
88 }
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
89
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
90 {
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
91 auto sd1 = new bzPolyDef();
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
92 sd1.setAsBox(0.25f, 0.5f);
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
93 sd1.density = 5.0f;
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
94
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
95 auto sd2 = new bzPolyDef();
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
96 sd2.setAsBox(0.25f, 0.5f, bzVec2(0.0f, -0.5f), 0.5f * PI);
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
97 sd2.density = 5.0f;
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
98
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
99 for (int i = 0; i < 5; ++i)
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
100 {
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
101 float x = randomRange(-100f, 100f);
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
102 float y = randomRange(-100f, 100f);
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
103 bzVec2 position = bzVec2(x , y);
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
104 float angle = randomRange(-PI, PI);
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
105 bd = new bzBodyDef(position, angle);
24
441eb7672404 impleneted steer to avoid
zzzzrrr <mason.green@gmail.com>
parents: 22
diff changeset
106 bd.allowFreeze = false;
441eb7672404 impleneted steer to avoid
zzzzrrr <mason.green@gmail.com>
parents: 22
diff changeset
107 bd.allowSleep = false;
22
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
108 rBody = world.createBody(bd);
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
109 rBody.createShape(sd1);
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
110 rBody.createShape(sd2);
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
111 rBody.setMassFromShapes();
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
112 auto attractor = new bzAttractor(rBody, center, strength, minRadius, maxRadius);
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
113 world.addForce(attractor);
24
441eb7672404 impleneted steer to avoid
zzzzrrr <mason.green@gmail.com>
parents: 22
diff changeset
114 rBody.linearVelocity = bzVec2(x*0.1, y*0.1);
22
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
115 }
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
116 }
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
117
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
118 {
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
119 bzXForm xf1;
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
120 xf1.R.set(0.3524f * PI);
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
121 xf1.position = bzMul(xf1.R, bzVec2(1.0f, 0.0f));
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
122
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
123 auto sd1 = new bzPolyDef();
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
124 sd1.vertices.length = 3;
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
125 sd1.vertices[0] = bzMul(xf1, bzVec2(-1.0f, 0.0f));
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
126 sd1.vertices[1] = bzMul(xf1, bzVec2(1.0f, 0.0f));
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
127 sd1.vertices[2] = bzMul(xf1, bzVec2(0.0f, 0.5f));
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
128 sd1.density = 5.0f;
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
129
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
130 bzXForm xf2;
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
131 xf2.R.set(-0.3524f * PI);
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
132 xf2.position = bzMul(xf2.R, bzVec2(-1.0f, 0.0f));
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
133
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
134 auto sd2 = new bzPolyDef();
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
135 sd2.vertices.length = 3;
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
136 sd2.vertices[0] = bzMul(xf2, bzVec2(-1.0f, 0.0f));
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
137 sd2.vertices[1] = bzMul(xf2, bzVec2(1.0f, 0.0f));
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
138 sd2.vertices[2] = bzMul(xf2, bzVec2(0.0f, 0.5f));
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
139 sd2.density = 5.0f;
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
140
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
141 for (int i = 0; i < 5; ++i)
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
142 {
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
143 float x = randomRange(-100f, 100f);
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
144 float y = randomRange(-100f, 100f);
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
145 bzVec2 position = bzVec2(x , y);
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
146 float angle = 0.0f;
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
147 bd = new bzBodyDef(position, angle);
24
441eb7672404 impleneted steer to avoid
zzzzrrr <mason.green@gmail.com>
parents: 22
diff changeset
148 bd.allowFreeze = false;
441eb7672404 impleneted steer to avoid
zzzzrrr <mason.green@gmail.com>
parents: 22
diff changeset
149 bd.allowSleep = false;
22
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
150 rBody = world.createBody(bd);
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
151 rBody.createShape(sd1);
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
152 rBody.createShape(sd2);
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
153 rBody.setMassFromShapes();
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
154 auto attractor = new bzAttractor(rBody, center, strength, minRadius, maxRadius);
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
155 world.addForce(attractor);
24
441eb7672404 impleneted steer to avoid
zzzzrrr <mason.green@gmail.com>
parents: 22
diff changeset
156 rBody.linearVelocity = bzVec2(x*0.1, y*0.1);
22
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
157 }
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
158 }
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
159 }
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
160 }