annotate ships/asteroids.d @ 22:4fce5596d1f6

ai work
author zzzzrrr <mason.green@gmail.com>
date Thu, 26 Mar 2009 16:56:30 -0400
parents
children 441eb7672404
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);
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
78 rBody = world.createBody(bd);
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
79 rBody.createShape(sd1);
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
80 rBody.createShape(sd2);
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
81 rBody.setMassFromShapes();
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
82 auto attractor = new bzAttractor(rBody, center, strength, minRadius, maxRadius);
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
83 world.addForce(attractor);
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
84 rBody.linearVelocity = bzVec2(x*20, y*20);
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
85 }
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
86 }
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 auto sd1 = new bzPolyDef();
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
90 sd1.setAsBox(0.25f, 0.5f);
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
91 sd1.density = 5.0f;
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
92
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
93 auto sd2 = new bzPolyDef();
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
94 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
95 sd2.density = 5.0f;
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
96
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
97 for (int i = 0; i < 5; ++i)
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
98 {
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
99 float x = randomRange(-100f, 100f);
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
100 float y = randomRange(-100f, 100f);
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
101 bzVec2 position = bzVec2(x , y);
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
102 float angle = randomRange(-PI, PI);
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
103 bd = new bzBodyDef(position, angle);
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
104 rBody = world.createBody(bd);
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
105 rBody.createShape(sd1);
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
106 rBody.createShape(sd2);
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
107 rBody.setMassFromShapes();
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
108 auto attractor = new bzAttractor(rBody, center, strength, minRadius, maxRadius);
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
109 world.addForce(attractor);
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
110 rBody.linearVelocity = bzVec2(x*20, y*20);
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
111 }
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
112 }
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
113
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
114 {
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
115 bzXForm xf1;
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
116 xf1.R.set(0.3524f * PI);
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
117 xf1.position = bzMul(xf1.R, bzVec2(1.0f, 0.0f));
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
118
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
119 auto sd1 = new bzPolyDef();
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
120 sd1.vertices.length = 3;
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
121 sd1.vertices[0] = bzMul(xf1, bzVec2(-1.0f, 0.0f));
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
122 sd1.vertices[1] = bzMul(xf1, bzVec2(1.0f, 0.0f));
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
123 sd1.vertices[2] = bzMul(xf1, bzVec2(0.0f, 0.5f));
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
124 sd1.density = 5.0f;
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
125
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
126 bzXForm xf2;
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
127 xf2.R.set(-0.3524f * PI);
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
128 xf2.position = bzMul(xf2.R, bzVec2(-1.0f, 0.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 auto sd2 = new bzPolyDef();
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
131 sd2.vertices.length = 3;
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
132 sd2.vertices[0] = bzMul(xf2, bzVec2(-1.0f, 0.0f));
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
133 sd2.vertices[1] = bzMul(xf2, bzVec2(1.0f, 0.0f));
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
134 sd2.vertices[2] = bzMul(xf2, bzVec2(0.0f, 0.5f));
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
135 sd2.density = 5.0f;
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
136
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
137 for (int i = 0; i < 5; ++i)
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
138 {
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
139 float x = randomRange(-100f, 100f);
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
140 float y = randomRange(-100f, 100f);
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
141 bzVec2 position = bzVec2(x , y);
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
142 float angle = 0.0f;
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
143 bd = new bzBodyDef(position, angle);
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
144 rBody = world.createBody(bd);
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
145 rBody.createShape(sd1);
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
146 rBody.createShape(sd2);
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
147 rBody.setMassFromShapes();
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
148 auto attractor = new bzAttractor(rBody, center, strength, minRadius, maxRadius);
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
149 world.addForce(attractor);
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
150 rBody.linearVelocity = bzVec2(x, y);
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
151 }
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
152 }
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
153 }
4fce5596d1f6 ai work
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
154 }