annotate render.d @ 5:6f455ef24063

fixed world wrap
author zzzzrrr <mason.green@gmail.com>
date Sat, 21 Mar 2009 15:51:41 -0400
parents a40d066ebbd1
children eb6059f7035a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
1 /*
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
2 * Copyright (c) 2009, Mason Green (zzzzrrr)
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
3 * Based on Box2D by Erin Catto, http://www.box2d.org
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
4 *
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
5 * All rights reserved.
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
6 *
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
7 * Redistribution and use in source and binary forms, with or without modification,
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
8 * are permitted provided that the following conditions are met:
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
9 *
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
10 * * Redistributions of source code must retain the above copyright notice,
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
11 * this list of conditions and the following disclaimer.
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
12 * * Redistributions in binary form must reproduce the above copyright notice,
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
13 * this list of conditions and the following disclaimer in the documentation
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
14 * and/or other materials provided with the distribution.
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
15 * * Neither the name of the polygonal nor the names of its contributors may be
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
16 * used to endorse or promote products derived from this software without specific
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
17 * prior written permission.
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
18 *
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
20 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
21 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
22 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
23 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
24 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
25 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
26 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
27 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
28 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
29 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
30 */
2
a40d066ebbd1 implemented zoom
Zzzzrrr <mason.green@gmail.com>
parents: 0
diff changeset
31 module openmelee.render;
0
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
32
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
33 import xf.dog.Dog;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
34 import xf.omg.core.LinearAlgebra;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
35 import xf.hybrid.Event;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
36 import xf.hybrid.Font;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
37
2
a40d066ebbd1 implemented zoom
Zzzzrrr <mason.green@gmail.com>
parents: 0
diff changeset
38 import openmelee.melee;
0
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
39
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
40 /// Color for drawing. Each value has the range [0,1].
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
41 struct Color {
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
42 static Color opCall(float r, float g, float b)
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
43 {
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
44 Color u;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
45 u.r = r;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
46 u.g = g;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
47 u.b = b;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
48 return u;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
49 }
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
50
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
51 float r = 0;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
52 float g = 0;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
53 float b = 0;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
54 }
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
55
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
56 class Render : Melee
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
57 {
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
58
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
59 this(Settings *settings) {
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
60
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
61 super(settings);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
62 }
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
63
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
64 void drawCircle(GL gl, vec2 center, float radius, bool water = false, float theta = float.nan)
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
65 {
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
66 int segs = cast(int)(radius) + 20;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
67 if (segs > MAX_CIRCLE_RES) segs = MAX_CIRCLE_RES;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
68 double coef = 2.0 * PI / segs;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
69
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
70 auto realTheta = (theta <>= 0 ? theta : 0);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
71 if (water) {
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
72 gl.immediate(GL_TRIANGLE_FAN,
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
73 {
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
74 gl.Vertex2fv(center.ptr);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
75 for (int n = 0; n <= segs; n++) {
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
76 double rads = n * coef;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
77 gl.Vertex2f(radius * cos(rads + realTheta) + center.x, radius * sin(rads + realTheta) + center.y);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
78 }
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
79 });
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
80 }
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
81
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
82 gl.immediate(GL_LINE_STRIP,
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
83 {
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
84 for (int n = 0; n <= segs; n++) {
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
85 double rads = n * coef;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
86 gl.Vertex2f(radius * cos(rads + realTheta) + center.x, radius * sin(rads + realTheta) + center.y);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
87 }
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
88 if (theta <>= 0)
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
89 gl.Vertex2fv(center.ptr);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
90 });
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
91 }
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
92
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
93 void drawSolidCircle(GL gl, vec2 center, float radius, vec2 axis, Color color)
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
94 {
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
95 const k_segments = 16.0f;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
96 const k_increment = 2.0f * PI / k_segments;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
97 float theta = 0.0f;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
98 gl.Enable(GL_BLEND);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
99 gl.BlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
100 gl.Color4f(0.5f * color.r, 0.5f * color.g, 0.5f * color.b, 0.5f);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
101 gl.Begin(GL_TRIANGLE_FAN);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
102 for (int i = 0; i < k_segments; ++i) {
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
103 vec2 v = center + radius * vec2(cos(theta), sin(theta));
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
104 gl.Vertex2f(v.x, v.y);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
105 theta += k_increment;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
106 }
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
107 gl.End();
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
108 gl.Disable(GL_BLEND);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
109
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
110 theta = 0.0f;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
111 gl.Color4f(color.r, color.g, color.b, 1.0f);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
112 gl.Begin(GL_LINE_LOOP);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
113 for (int i = 0; i < k_segments; ++i) {
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
114 vec2 v = center + radius * vec2(cos(theta), sin(theta));
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
115 gl.Vertex2f(v.x, v.y);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
116 theta += k_increment;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
117 }
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
118 gl.End();
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
119
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
120 vec2 p = center + radius * axis;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
121 gl.Begin(GL_LINES);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
122 gl.Vertex2f(center.x, center.y);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
123 gl.Vertex2f(p.x, p.y);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
124 gl.End();
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
125 }
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
126
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
127 void drawPolygon(GL gl, vec2[] glVerts, Color color)
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
128 {
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
129 gl.Color3f(color.r, color.g, color.b);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
130 gl.immediate(GL_LINE_LOOP,
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
131 {
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
132 foreach (v; glVerts)
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
133 gl.Vertex2fv(v.ptr);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
134 });
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
135 }
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
136
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
137 void drawSolidPolygon(GL gl, vec2[] vertices, Color color)
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
138 {
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
139 gl.Enable(GL_BLEND);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
140 gl.BlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
141 gl.Color4f(0.5f * color.r, 0.5f * color.g, 0.5f * color.b, 0.5f);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
142 gl.Begin(GL_TRIANGLE_FAN);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
143 for (int i = 0; i < vertices.length; ++i) {
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
144 gl.Vertex2f(vertices[i].x, vertices[i].y);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
145 }
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
146 gl.End();
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
147 gl.Disable(GL_BLEND);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
148
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
149 gl.Color4f(color.r, color.g, color.b, 1.0f);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
150 gl.Begin(GL_LINE_LOOP);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
151 for (int i = 0; i < vertices.length; ++i) {
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
152 gl.Vertex2f(vertices[i].x, vertices[i].y);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
153 }
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
154 gl.End();
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
155 }
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
156
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
157
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
158 void drawPoint(GL gl, vec2 p, float size, Color color)
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
159 {
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
160 gl.Color3f(color.r, color.g, color.b);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
161 gl.PointSize(size);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
162 gl.Begin(GL_POINTS);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
163 gl.Vertex2f(p.x, p.y);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
164 gl.End();
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
165 gl.PointSize(1.0f);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
166 }
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
167
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
168 void drawSegment(GL gl, vec2 begin, vec2 end, Color color)
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
169 {
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
170 gl.Color3f(color.r, color.g, color.b);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
171 gl.immediate(GL_LINES,
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
172 {
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
173 gl.Vertex2fv(begin.ptr);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
174 gl.Vertex2fv(end.ptr);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
175 });
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
176 }
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
177
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
178 // TODO: handle inequal radii correctly
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
179 void connectCircles(GL gl, vec2 center1, float radius1, vec2 center2, float radius2)
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
180 {
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
181 auto d = center2 - center1;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
182 if (!d.length)
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
183 return;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
184 d *= (d.length - radius1) / d.length;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
185 center1 += d;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
186 center2 -= d;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
187 gl.immediate(GL_LINES,
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
188 {
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
189 gl.Vertex2fv(center1.ptr);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
190 gl.Vertex2fv(center2.ptr);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
191 });
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
192 }
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
193
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
194 void drawXForm(GL gl, bzXForm xf)
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
195 {
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
196 bzVec2 p1 = xf.position, p2;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
197 const k_axisScale = 0.4f;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
198
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
199 gl.Begin(GL_LINES);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
200 {
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
201 gl.Color3f(1.0f, 0.0f, 0.0f);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
202 gl.Vertex2f(p1.x, p1.y);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
203 p2 = p1 + k_axisScale * xf.R.col1;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
204 gl.Vertex2f(p2.x, p2.y);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
205
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
206 gl.Color3f(0.0f, 1.0f, 0.0f);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
207 gl.Vertex2f(p1.x, p1.y);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
208 p2 = p1 + k_axisScale * xf.R.col2;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
209 gl.Vertex2f(p2.x, p2.y);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
210 }
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
211 gl.End();
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
212 }
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
213
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
214 void drawSpring(GL gl, vec2 a, vec2 b, uint zigs)
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
215 {
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
216 zigs++;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
217
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
218 // Portion of length dedicated to connectors
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
219 const float connPart = 0.2;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
220
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
221 vec2 inc = (b - a) / (zigs);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
222 // One step from a to b
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
223 vec2 zigLen = inc * (1 - connPart);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
224 // Length of a connector
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
225 vec2 connLen = inc * (connPart / 2) * zigs;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
226 // Width of a zig
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
227 vec2 zigWidth = (b - a).rotatedHalfPi.normalized;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
228 gl.immediate(GL_LINE_STRIP,
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
229 {
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
230 gl.Vertex2fv(a.ptr);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
231
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
232 a += connLen;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
233 gl.Vertex2fv(a.ptr);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
234
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
235 bool dir = true;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
236 a += zigWidth / 2 + zigLen / 2;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
237 for (int i = 0; i < zigs; i++) {
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
238 gl.Vertex2fv(a.ptr);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
239 a += zigLen;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
240 if (dir) {
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
241 a -= zigWidth;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
242 }else {
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
243 a += zigWidth;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
244 }
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
245 dir = !dir;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
246 }
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
247
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
248 gl.Vertex2fv((b - connLen).ptr);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
249 gl.Vertex2fv(b.ptr);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
250 });
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
251 }
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
252
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
253 void drawShape(GL gl, bzShape shape, bzXForm xf, Color color, bool core)
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
254 {
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
255 Color coreColor = Color(0.9f, 0.6f, 0.6f);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
256
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
257 switch (shape.type) {
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
258 case bzShapeType.CIRCLE:
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
259 auto circle = cast(bzCircle)shape;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
260
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
261 vec2 center = vec2.from(bzMul(xf, circle.localPosition));
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
262 float radius = circle.radius;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
263 vec2 axis = vec2.from(xf.R.col1);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
264
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
265 gl.drawSolidCircle(center, radius, axis, color);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
266
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
267 if (core) {
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
268 gl.Color3f(coreColor.r, coreColor.g, coreColor.b);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
269 gl.drawCircle(center, radius - k_toiSlop);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
270 }
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
271 break;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
272 case bzShapeType.POLYGON:
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
273 {
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
274 bzPolygon poly = cast(bzPolygon)shape;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
275 bzVec2[] vertices = poly.worldVertices;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
276 vec2[] verts;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
277 verts.length = vertices.length;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
278 foreach (int i, v; vertices) {
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
279 verts[i] = vec2.from(v);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
280 }
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
281
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
282 gl.drawSolidPolygon(verts, color);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
283
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
284 if (core) {
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
285 bzVec2[] localCoreVertices = poly.coreVertices;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
286 verts.length = localCoreVertices.length;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
287 for (int i = 0; i < localCoreVertices.length; ++i) {
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
288 verts[i] = vec2.from(bzMul(xf, localCoreVertices[i]));
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
289 }
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
290 gl.drawPolygon(verts, coreColor);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
291 }
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
292 }
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
293 break;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
294
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
295 case bzShapeType.EDGE:
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
296 {
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
297 bzEdge edge = cast(bzEdge)shape;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
298
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
299 vec2 p1 = vec2.from(bzMul(xf, edge.vertex1));
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
300 vec2 p2 = vec2.from(bzMul(xf, edge.vertex2));
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
301 gl.drawSegment(p1, p2, color);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
302
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
303 if (core) {
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
304 p1 = vec2.from(bzMul(xf, edge.coreVertex1));
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
305 p2 = vec2.from(bzMul(xf, edge.coreVertex2));
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
306 gl.drawSegment(p1, p2, coreColor);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
307 }
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
308 }
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
309 break;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
310 }
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
311 }
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
312
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
313 void draw(vec2i screenSize, GL gl)
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
314 {
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
315 this.screenSize = screenSize;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
316
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
317 gl.LoadIdentity();
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
318 gl.MatrixMode(GL_PROJECTION);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
319 gl.LoadIdentity();
2
a40d066ebbd1 implemented zoom
Zzzzrrr <mason.green@gmail.com>
parents: 0
diff changeset
320
a40d066ebbd1 implemented zoom
Zzzzrrr <mason.green@gmail.com>
parents: 0
diff changeset
321 float left = -screenSize.x / zoom;
a40d066ebbd1 implemented zoom
Zzzzrrr <mason.green@gmail.com>
parents: 0
diff changeset
322 float right = screenSize.x / zoom;
a40d066ebbd1 implemented zoom
Zzzzrrr <mason.green@gmail.com>
parents: 0
diff changeset
323 float bottom = -screenSize.y / zoom;
a40d066ebbd1 implemented zoom
Zzzzrrr <mason.green@gmail.com>
parents: 0
diff changeset
324 float top = screenSize.y / zoom;
a40d066ebbd1 implemented zoom
Zzzzrrr <mason.green@gmail.com>
parents: 0
diff changeset
325
a40d066ebbd1 implemented zoom
Zzzzrrr <mason.green@gmail.com>
parents: 0
diff changeset
326 gl.gluOrtho2D(left, right, bottom, top);
0
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
327 gl.Translatef(-viewCenter.x, -viewCenter.y, 0);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
328 gl.MatrixMode(GL_MODELVIEW);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
329 gl.Disable(GL_DEPTH_TEST);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
330 gl.LoadIdentity();
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
331 gl.Clear(GL_COLOR_BUFFER_BIT);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
332
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
333 // Draw dynamic bodies
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
334 if (settings.drawShapes) {
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
335 for (bzBody b = world.bodyList; b; b = b.next) {
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
336 for (bzShape shape = b.shapeList; shape; shape = shape.next) {
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
337
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
338 bzShape s = shape;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
339 bzXForm xf = b.xf;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
340
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
341 if (b.isStatic) {
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
342 gl.drawShape(s, xf, Color(0.5f, 0.9f, 0.5f), settings.drawCoreShapes);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
343 }else if (b.isSleeping) {
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
344 gl.drawShape(s, xf, Color(0.5f, 0.5f, 0.9f), settings.drawCoreShapes);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
345 }else if (b.userData) {
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
346 auto ss = cast(Select)b.userData;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
347 if (ss) {
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
348 gl.drawShape(s, xf, Color(0, .5, 1), settings.drawCoreShapes);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
349 }
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
350 }else {
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
351 gl.drawShape(s, xf, Color(0.9f, 0.9f, 0.9f), settings.drawCoreShapes);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
352 }
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
353
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
354 gl.LoadIdentity();
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
355 gl.Flush();
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
356 }
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
357 }
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
358
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
359 // Draw water
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
360 bzFluidParticle[] particles = world.particles;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
361 gl.Color3f(0, 0, 1);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
362 foreach (p; particles) {
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
363 gl.drawCircle(vec2.from(p.position), WATER_RADIUS, true);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
364 }
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
365 }
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
366
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
367 // Draw joints
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
368 if (settings.drawJoints) {
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
369 Color color = Color(0, 0, 1);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
370 gl.Color3f(0, 0, 1);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
371
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
372 gl.LineWidth(1);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
373 for (bzJoint joint = world.jointList; joint; joint = joint.next) {
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
374 auto distance = cast(bzDistanceJoint)joint;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
375 auto pulley = cast(bzPulleyJoint)joint;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
376 auto revolute = cast(bzRevoluteJoint)joint;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
377 auto prismatic = cast(bzPrismaticJoint)joint;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
378 auto line = cast(bzLineJoint)joint;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
379 if (distance) {
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
380 color = Color(.5, .5, 0);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
381 // Endpoints
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
382 vec2 a = vec2.from(distance.anchor1);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
383 vec2 b = vec2.from(distance.anchor2);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
384 // Circles
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
385 gl.drawCircle(a, HINGE_RADIUS);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
386 gl.drawCircle(b, HINGE_RADIUS);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
387 // Connecting line
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
388 gl.connectCircles(a, HINGE_RADIUS, b, HINGE_RADIUS);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
389 }else if (pulley) {
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
390 auto a = vec2.from(pulley.anchor1);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
391 auto b = vec2.from(pulley.groundAnchor1);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
392 auto c = vec2.from(pulley.groundAnchor2);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
393 auto d = vec2.from(pulley.anchor2);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
394 gl.drawCircle(a, HINGE_RADIUS);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
395 gl.drawCircle(b, HINGE_RADIUS);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
396 gl.connectCircles(a, HINGE_RADIUS, b, HINGE_RADIUS);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
397 gl.drawSegment(b, c, color);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
398 gl.drawCircle(c, HINGE_RADIUS);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
399 gl.drawCircle(d, HINGE_RADIUS);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
400 gl.connectCircles(c, HINGE_RADIUS, d, HINGE_RADIUS);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
401 }else if (revolute) {
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
402 auto a = vec2.from(revolute.rBody1.position);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
403 auto b = vec2.from(revolute.anchor1);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
404 auto c = vec2.from(revolute.rBody2.position);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
405 gl.drawCircle(a, HINGE_RADIUS);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
406 gl.drawCircle(b, HINGE_RADIUS);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
407 gl.connectCircles(a, HINGE_RADIUS, b, HINGE_RADIUS);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
408 gl.drawCircle(c, HINGE_RADIUS);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
409 gl.connectCircles(b, HINGE_RADIUS, c, HINGE_RADIUS);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
410 }else if (prismatic) {
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
411 auto a = vec2.from(prismatic.rBody1.position);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
412 auto b = vec2.from(prismatic.anchor1);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
413 auto c = vec2.from(prismatic.rBody2.position);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
414 gl.drawCircle(a, HINGE_RADIUS);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
415 gl.drawCircle(b, HINGE_RADIUS);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
416 gl.connectCircles(a, HINGE_RADIUS, b, HINGE_RADIUS);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
417 gl.drawCircle(c, HINGE_RADIUS);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
418 gl.connectCircles(b, HINGE_RADIUS, c, HINGE_RADIUS);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
419 }else if (line) {
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
420 auto a = vec2.from(line.rBody1.position);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
421 auto b = vec2.from(line.anchor1);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
422 auto c = vec2.from(line.rBody2.position);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
423 gl.drawCircle(a, HINGE_RADIUS);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
424 gl.drawCircle(b, HINGE_RADIUS);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
425 gl.connectCircles(a, HINGE_RADIUS, b, HINGE_RADIUS);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
426 gl.drawCircle(c, HINGE_RADIUS);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
427 gl.connectCircles(b, HINGE_RADIUS, c, HINGE_RADIUS);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
428 }
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
429 }
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
430
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
431 if (settings.drawControllers) {
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
432 bzForceGenerator[] forces = world.forces;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
433 foreach (f; forces) {
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
434 auto spring1 = cast(bzSpring1) f;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
435 auto spring2 = cast(bzSpring2) f;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
436 auto buoyancy = cast(bzBuoyancy) f;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
437
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
438 if (spring1) {
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
439 auto bungee1 = cast(bzBungee1)spring1;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
440 if (bungee1) {
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
441 gl.Color3f(.5, .5, 0);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
442 // Endpoints
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
443 vec2 a = vec2.from(bungee1.rBody.position);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
444 vec2 b = vec2.from(bungee1.anchor);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
445 // Circles
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
446 gl.drawCircle(a, HINGE_RADIUS);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
447 gl.drawCircle(b, HINGE_RADIUS);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
448 // Connecting line
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
449 gl.connectCircles(a, HINGE_RADIUS, b, HINGE_RADIUS);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
450 }else {
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
451 uint zigs = 10;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
452 auto anchor1 = vec2.from(spring1.anchor);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
453 auto anchor2 = vec2.from(spring1.rBody.position);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
454 gl.drawSpring(anchor1, anchor2, zigs);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
455 }
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
456 }
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
457
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
458 if (spring2) {
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
459 auto bungee2 = cast(bzBungee2)spring2;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
460 if (bungee2) {
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
461 gl.Color3f(.5, .5, 0);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
462 // Endpoints
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
463 vec2 a = vec2.from(bungee2.rBody.position);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
464 vec2 b = vec2.from(bungee2.otherBody.position);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
465 // Circles
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
466 gl.drawCircle(a, HINGE_RADIUS);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
467 gl.drawCircle(b, HINGE_RADIUS);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
468 // Connecting line
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
469 gl.connectCircles(a, HINGE_RADIUS, b, HINGE_RADIUS);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
470 }else {
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
471 uint zigs = 10;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
472 auto anchor1 = vec2.from(spring2.otherBody.position);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
473 auto anchor2 = vec2.from(spring2.rBody.position);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
474 gl.drawSpring(anchor1, anchor2, zigs);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
475 }
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
476 }
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
477
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
478 if(buoyancy) {
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
479 float plane = buoyancy.planeOffset;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
480 vec2 p1 = vec2(-50, plane);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
481 vec2 p2 = vec2(50, plane);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
482 gl.drawSegment(p1, p2, color);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
483 }
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
484 }
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
485 }
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
486 }
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
487
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
488 if(settings.drawPairs) {
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
489
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
490 bzBroadPhase bp = world.broadPhase;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
491 bzVec2 invQ;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
492 invQ.set(1.0f / bp.m_quantizationFactor.x, 1.0f / bp.m_quantizationFactor.y);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
493 Color color = Color(0.9f, 0.9f, 0.3f);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
494
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
495 const k_tableCapacity = bzPairManager.TABLE_CAPACITY;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
496
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
497 for (int i = 0; i < k_tableCapacity; ++i)
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
498 {
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
499 ushort index = bp.m_pairManager.m_hashTable[i];
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
500 while (index < bp.m_pairManager.m_pairs.length)
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
501 {
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
502 if(index == bzPairManager.NULL_PROXY) {
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
503 break;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
504 }
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
505 bzPair pair = bp.m_pairManager.m_pairs[index];
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
506 bzProxy p1 = bp.m_proxyPool[pair.proxyId1];
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
507 bzProxy p2 = bp.m_proxyPool[pair.proxyId2];
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
508
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
509 bzAABB b1, b2;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
510 b1.lowerBound.x = bp.m_worldAABB.lowerBound.x + invQ.x * bp.m_bounds[0][p1.lowerBounds[0]].value;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
511 b1.lowerBound.y = bp.m_worldAABB.lowerBound.y + invQ.y * bp.m_bounds[1][p1.lowerBounds[1]].value;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
512 b1.upperBound.x = bp.m_worldAABB.lowerBound.x + invQ.x * bp.m_bounds[0][p1.upperBounds[0]].value;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
513 b1.upperBound.y = bp.m_worldAABB.lowerBound.y + invQ.y * bp.m_bounds[1][p1.upperBounds[1]].value;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
514 b2.lowerBound.x = bp.m_worldAABB.lowerBound.x + invQ.x * bp.m_bounds[0][p2.lowerBounds[0]].value;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
515 b2.lowerBound.y = bp.m_worldAABB.lowerBound.y + invQ.y * bp.m_bounds[1][p2.lowerBounds[1]].value;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
516 b2.upperBound.x = bp.m_worldAABB.lowerBound.x + invQ.x * bp.m_bounds[0][p2.upperBounds[0]].value;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
517 b2.upperBound.y = bp.m_worldAABB.lowerBound.y + invQ.y * bp.m_bounds[1][p2.upperBounds[1]].value;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
518
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
519 bzVec2 x1 = 0.5f * (b1.lowerBound + b1.upperBound);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
520 bzVec2 x2 = 0.5f * (b2.lowerBound + b2.upperBound);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
521
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
522 gl.drawSegment(vec2.from(x1),vec2.from(x2), color);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
523
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
524 index = pair.next;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
525 }
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
526 }
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
527 }
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
528
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
529 // Draw axis aligned bounding boxes (bzAABB)
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
530 if (settings.drawAABBs) {
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
531 bzBroadPhase bp = world.broadPhase;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
532 bzVec2 worldLower = bp.m_worldAABB.lowerBound;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
533 bzVec2 worldUpper = bp.m_worldAABB.upperBound;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
534 Color color;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
535 bzVec2 invQ;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
536 invQ.set(1.0f / bp.m_quantizationFactor.x, 1.0f / bp.m_quantizationFactor.y);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
537 color = Color(1.0f, 1.0f, 1.0f);
5
6f455ef24063 fixed world wrap
zzzzrrr <mason.green@gmail.com>
parents: 2
diff changeset
538
0
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
539 for (int i = 0; i < k_maxProxies; ++i) {
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
540 bzProxy p = bp.m_proxyPool[i];
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
541 if (!p.isValid) {
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
542 continue;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
543 }
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
544
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
545 bzAABB b;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
546 b.lowerBound.x = worldLower.x + invQ.x * bp.m_bounds[0][p.lowerBounds[0]].value;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
547 b.lowerBound.y = worldLower.y + invQ.y * bp.m_bounds[1][p.lowerBounds[1]].value;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
548 b.upperBound.x = worldLower.x + invQ.x * bp.m_bounds[0][p.upperBounds[0]].value;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
549 b.upperBound.y = worldLower.y + invQ.y * bp.m_bounds[1][p.upperBounds[1]].value;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
550
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
551 vec2 vs[4];
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
552 vs[0] = vec2(b.lowerBound.x, b.lowerBound.y);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
553 vs[1] = vec2(b.upperBound.x, b.lowerBound.y);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
554 vs[2] = vec2(b.upperBound.x, b.upperBound.y);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
555 vs[3] = vec2(b.lowerBound.x, b.upperBound.y);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
556
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
557 drawPolygon(gl, vs, color);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
558 }
5
6f455ef24063 fixed world wrap
zzzzrrr <mason.green@gmail.com>
parents: 2
diff changeset
559
0
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
560 vec2 vs[4];
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
561 vs[0] = vec2(worldLower.x, worldLower.y);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
562 vs[1] = vec2(worldUpper.x, worldLower.y);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
563 vs[2] = vec2(worldUpper.x, worldUpper.y);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
564 vs[3] = vec2(worldLower.x, worldUpper.y);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
565
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
566 color = Color(0.3f, 0.9f, 0.9f);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
567 drawPolygon(gl, vs, color);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
568 }
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
569
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
570 // Draw contact points
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
571 if (settings.drawContactPoints) {
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
572 const k_axisScale = 0.3f;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
573 const k_forceScale = 0.01f;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
574
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
575
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
576 for (int i = 0; i < pointCount; ++i) {
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
577 ContactPoint point = points[i];
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
578 Color color;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
579
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
580 if (point.state == ContactState.e_contactAdded) {
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
581 // Add
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
582 color = Color(0.3f, 0.95f, 0.3f);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
583 vec2 p = vec2.from(point.position);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
584 gl.drawPoint(p, 10.0f, color);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
585 }else if (point.state == ContactState.e_contactPersisted) {
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
586 // Persist
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
587 color = Color(0.3f, 0.3f, 0.95f);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
588 vec2 p = vec2.from(point.position);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
589 gl.drawPoint(p, 5.0f, color);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
590 }else {
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
591 // Remove
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
592 color = Color(0.95f, 0.3f, 0.3f);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
593 vec2 p = vec2.from(point.position);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
594 gl.drawPoint(p, 10.0f, color);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
595 }
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
596
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
597 if (settings.drawContactNormals == 1) {
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
598 vec2 p1 = vec2.from(point.position);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
599 vec2 p2 = p1 + k_axisScale * vec2.from(point.normal);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
600 color = Color(0.4f, 0.9f, 0.4f);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
601 gl.drawSegment(p1, p2, color);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
602 }else if (settings.drawContactForces) { /*
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
603 vec2 p1 = vec2.from(point.position);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
604 vec2 p2 = p1 + k_forceScale * vec2.from(point.normalForce * point.normal);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
605 color = Color(0.9f, 0.9f, 0.3f);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
606 gl.drawSegment(p1, p2, color);*/
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
607 }
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
608
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
609 if (settings.drawFrictionForces) { /*
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
610 vec2 tangent = vec2.from(bzCross(point.normal, 1.0f));
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
611 vec2 p1 = point.position;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
612 vec2 p2 = p1 + k_forceScale * vec2.from(point.tangentForce) * tangent;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
613 color = Color(0.9f, 0.9f, 0.3f);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
614 gl.drawSegment(p1, p2, color); */
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
615 }
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
616 }
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
617 }
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
618
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
619 if (settings.drawOBBs) {
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
620 Color color = Color(0.5f, 0.3f, 0.5f);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
621
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
622 for (bzBody b = world.bodyList; b; b = b.next) {
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
623 bzXForm xf = b.xf;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
624 for (bzShape s = b.shapeList; s; s = s.next) {
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
625 if (s.type != bzShapeType.POLYGON) {
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
626 continue;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
627 }
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
628
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
629 bzPolygon poly = cast(bzPolygon)s;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
630 bzOBB obb = poly.obb;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
631 bzVec2 h = obb.extents;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
632 bzVec2 vs[4];
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
633 vs[0].set(-h.x, -h.y);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
634 vs[1].set(h.x, -h.y);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
635 vs[2].set(h.x, h.y);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
636 vs[3].set(-h.x, h.y);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
637
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
638 vec2[4] v;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
639 for (int i = 0; i < 4; ++i) {
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
640 vs[i] = obb.center + bzMul(obb.R, vs[i]);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
641 v[i] = vec2.from(bzMul(xf, vs[i]));
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
642 }
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
643
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
644 drawPolygon(gl, v, color);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
645 }
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
646 }
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
647 }
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
648
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
649 if (settings.drawCOMs) {
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
650 for (bzBody b = world.bodyList; b; b = b.next) {
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
651 bzXForm xf = b.xf;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
652 xf.position = b.worldCenter;
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
653 drawXForm(gl, xf);
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
654 }
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
655 }
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
656 }
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
657
c10bc63824e7 Initial commit!
zzzzrrr <mason.green@gmail.com>
parents:
diff changeset
658 }