annotate trunk/tests/ChipmunkDemos/gameApp.d @ 26:a77be3e27f39

fix macos version
author Stephan Dilly <stephan@extrawurst.org>
date Mon, 13 Dec 2010 15:32:42 +0100
parents f2287962b4b7
children b45f0b140d85
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
21
f2287962b4b7 - use portable timing method
Extrawurst
parents: 16
diff changeset
1
f2287962b4b7 - use portable timing method
Extrawurst
parents: 16
diff changeset
2 // written in the D programming language
f2287962b4b7 - use portable timing method
Extrawurst
parents: 16
diff changeset
3
16
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
4 /++
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
5 + Authors: Stephan Dilly, www.extrawurst.org
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
6 +/
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
7
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
8 module gameApp;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
9
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
10 import framework;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
11
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
12 import drawSpace;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
13
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
14 import chipmunkd.chipmunk;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
15
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
16 import samples.LogoSmash;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
17 import samples.Simple;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
18 import samples.PyramidStack;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
19 import samples.ChipmunkDemo;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
20 import samples.Plink;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
21 import samples.Tumble;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
22 import samples.PyramidTopple;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
23 import samples.Planet;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
24 import samples.Query;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
25 import samples.OneWay;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
26 import samples.Sensors;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
27 import samples.Bounce;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
28 import samples.Springies;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
29 import samples.Joints;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
30 import samples.MagnetsElectric;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
31 import samples.Player;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
32 import samples.Tank;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
33 import samples.Pump;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
34 import samples.TheoJansen;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
35 import samples.UnsafeOps;
26
a77be3e27f39 fix macos version
Stephan Dilly <stephan@extrawurst.org>
parents: 21
diff changeset
36 import samples.Nukeit;
16
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
37
21
f2287962b4b7 - use portable timing method
Extrawurst
parents: 16
diff changeset
38 // using derelict bindings for sdl/opengl
16
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
39 import derelict.opengl.gl;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
40 import derelict.opengl.glu;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
41 import derelict.sdl.sdl;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
42
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
43 import std.stdio;
21
f2287962b4b7 - use portable timing method
Extrawurst
parents: 16
diff changeset
44 import core.thread;
16
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
45
26
a77be3e27f39 fix macos version
Stephan Dilly <stephan@extrawurst.org>
parents: 21
diff changeset
46 version = TIME_TRIAL;
16
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
47
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
48 cpVect mousePos;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
49 cpVect arrowDirection;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
50
21
f2287962b4b7 - use portable timing method
Extrawurst
parents: 16
diff changeset
51 bool key_up = false;
f2287962b4b7 - use portable timing method
Extrawurst
parents: 16
diff changeset
52 bool key_down = false;
f2287962b4b7 - use portable timing method
Extrawurst
parents: 16
diff changeset
53 bool key_left = false;
f2287962b4b7 - use portable timing method
Extrawurst
parents: 16
diff changeset
54 bool key_right = false;
f2287962b4b7 - use portable timing method
Extrawurst
parents: 16
diff changeset
55 bool key_space = false;
f2287962b4b7 - use portable timing method
Extrawurst
parents: 16
diff changeset
56
16
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
57 ///
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
58 final class GameApp {
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
59
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
60 private:
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
61
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
62 chipmunkDemo*[] demos;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
63 chipmunkDemo* currentDemo;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
64 cpSpace* space;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
65 int ticks;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
66 cpBody* mouseBody;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
67 cpConstraint* mouseJoint;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
68 cpVect mousePos_last;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
69
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
70 bool m_running = true;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
71
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
72 drawSpaceOptions options = {
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
73 0, // drawHash
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
74 0, // drawBB
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
75 1, // drawShapes
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
76 4.0f, // collisionPointSize
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
77 0.0f, // bodyPointSize
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
78 1.5f, // lineThickness
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
79 };
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
80
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
81 enum width = 1024;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
82 enum height = 780;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
83
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
84 version(TIME_TRIAL)
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
85 {
21
f2287962b4b7 - use portable timing method
Extrawurst
parents: 16
diff changeset
86 ulong time_trial(int index, int count)
16
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
87 {
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
88 currentDemo = demos[index];
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
89 space = currentDemo.initFunc();
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
90
21
f2287962b4b7 - use portable timing method
Extrawurst
parents: 16
diff changeset
91 auto start = .tickCount();
16
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
92
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
93 foreach(i; 0..count)
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
94 currentDemo.updateFunc(i);
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
95
21
f2287962b4b7 - use portable timing method
Extrawurst
parents: 16
diff changeset
96 auto end = .tickCount();
16
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
97 auto duration = (end - start);
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
98
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
99 currentDemo.destroyFunc();
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
100 currentDemo = null;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
101
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
102 writefln("Time(%s) = %s", cast(char)(index + 'a'), duration);
21
f2287962b4b7 - use portable timing method
Extrawurst
parents: 16
diff changeset
103
f2287962b4b7 - use portable timing method
Extrawurst
parents: 16
diff changeset
104 return duration;
16
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
105 }
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
106 }
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
107
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
108 ///
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
109 public void boot() {
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
110
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
111 demos = [
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
112 &LogoSmash,
26
a77be3e27f39 fix macos version
Stephan Dilly <stephan@extrawurst.org>
parents: 21
diff changeset
113 //&Simple,
16
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
114 &PyramidStack,
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
115 &Plink,
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
116 &Tumble,
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
117 &PyramidTopple,
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
118 &Bounce,
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
119 &Planet,
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
120 &Springies,
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
121 &Pump,
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
122 &TheoJansen,
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
123 &MagnetsElectric,
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
124 &UnsafeOps,
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
125 &Query,
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
126 &OneWay,
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
127 &Player,
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
128 &Sensors,
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
129 &Joints,
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
130 &Tank,
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
131 ];
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
132
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
133 cpInitChipmunk();
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
134
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
135 cp_collision_slop = 0.2f;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
136
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
137 version(TIME_TRIAL)
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
138 {
26
a77be3e27f39 fix macos version
Stephan Dilly <stephan@extrawurst.org>
parents: 21
diff changeset
139 Thread.sleep(2_000_000);
21
f2287962b4b7 - use portable timing method
Extrawurst
parents: 16
diff changeset
140 ulong duration;
16
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
141 foreach(i; 0..demos.length)
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
142 {
21
f2287962b4b7 - use portable timing method
Extrawurst
parents: 16
diff changeset
143 if(i == 'l'-'a') continue;
f2287962b4b7 - use portable timing method
Extrawurst
parents: 16
diff changeset
144 duration+=time_trial(i, 1000);
16
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
145 }
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
146
21
f2287962b4b7 - use portable timing method
Extrawurst
parents: 16
diff changeset
147 writefln("Time accum = %s", duration);
f2287962b4b7 - use portable timing method
Extrawurst
parents: 16
diff changeset
148
16
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
149 m_running = false;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
150
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
151 return;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
152 }//TIME_TRIAL
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
153
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
154 //setup framework
21
f2287962b4b7 - use portable timing method
Extrawurst
parents: 16
diff changeset
155 framework.startup("chipmunk'd by Stephan Dilly",width,height,false);
16
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
156
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
157 reshape(width,height);
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
158
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
159 glEnableClientState(GL_VERTEX_ARRAY);
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
160
21
f2287962b4b7 - use portable timing method
Extrawurst
parents: 16
diff changeset
161 runDemo(&LogoSmash);
16
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
162
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
163 mouseBody = cpBodyNew(INFINITY, INFINITY);
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
164 }
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
165
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
166 ///
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
167 void runDemo(chipmunkDemo *demo)
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
168 {
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
169 if(currentDemo)
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
170 currentDemo.destroyFunc();
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
171
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
172 currentDemo = demo;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
173 ticks = 0;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
174 mouseJoint = null;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
175
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
176 //maxArbiters = 0;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
177 //maxPoints = 0;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
178 //maxConstraints = 0;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
179 space = currentDemo.initFunc();
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
180 }
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
181
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
182 ///
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
183 void reshape(int width, int height)
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
184 {
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
185 glViewport(0, 0, width, height);
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
186
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
187 double rx = width / 2.0;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
188 double ry = height / 2.0;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
189
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
190 glMatrixMode(GL_PROJECTION);
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
191 glLoadIdentity();
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
192 glOrtho(-rx, rx, -ry, ry, -1.0, 1.0);
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
193 glTranslated(0.5, 0.5, 0.0);
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
194 }
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
195
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
196 ///
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
197 public bool update() {
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
198
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
199 if(!m_running) return m_running;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
200
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
201 if(!framework.processEvents(&keyEvent,&mouseMove,&mouseButtonEvent))
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
202 return false;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
203
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
204 cpVect newPoint = cpvlerp(mousePos_last, mousePos, 0.25f);
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
205 mouseBody.p = newPoint;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
206 mouseBody.v = cpvmult(cpvsub(newPoint, mousePos_last), 60.0f);
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
207 mousePos_last = newPoint;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
208
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
209 currentDemo.updateFunc(ticks++);
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
210
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
211 // render
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
212
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
213 glClearColor(1,1,1,1);
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
214
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
215 glClear(GL_COLOR_BUFFER_BIT);
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
216
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
217 DrawSpace(space,currentDemo.drawOptions ? currentDemo.drawOptions : &options);
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
218
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
219 SDL_GL_SwapBuffers();
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
220
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
221 return m_running;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
222 }
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
223
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
224 ///
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
225 public void shutdown() {
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
226
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
227 version(TIME_TRIAL){}else
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
228 {
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
229 currentDemo.destroyFunc();
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
230
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
231 framework.shutdown();
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
232 }
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
233 }
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
234
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
235 cpVect mouseToSpace(int x, int y)
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
236 {
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
237 GLdouble model[16];
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
238 glGetDoublev(GL_MODELVIEW_MATRIX, model.ptr);
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
239
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
240 GLdouble proj[16];
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
241 glGetDoublev(GL_PROJECTION_MATRIX, proj.ptr);
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
242
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
243 GLint view[4];
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
244 glGetIntegerv(GL_VIEWPORT, view.ptr);
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
245
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
246 GLdouble mx, my, mz;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
247 gluUnProject(x, height - y, 0.0f, model.ptr, proj.ptr, view.ptr, &mx, &my, &mz);
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
248
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
249 return cpv(mx, my);
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
250 }
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
251
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
252 ///
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
253 private void mouseMove(int x,int y)
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
254 {
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
255 mousePos = mouseToSpace(x,y);
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
256 }
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
257
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
258 ///
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
259 private void mouseButtonEvent(int x,int y,bool _down)
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
260 {
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
261 if(_down){
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
262 cpVect point = mouseToSpace(x,y);
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
263
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
264 cpShape *shape = cpSpacePointQueryFirst(space, point, GRABABLE_MASK_BIT, CP_NO_GROUP);
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
265 if(shape){
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
266 cpBody *_body = shape._body;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
267 mouseJoint = cpPivotJointNew2(mouseBody, _body, cpvzero, cpBodyWorld2Local(_body, point));
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
268 mouseJoint.maxForce = 50000.0f;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
269 mouseJoint.biasCoef = 0.15f;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
270 cpSpaceAddConstraint(space, mouseJoint);
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
271 }
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
272 } else if(mouseJoint){
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
273 cpSpaceRemoveConstraint(space, mouseJoint);
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
274 cpConstraintFree(mouseJoint);
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
275 mouseJoint = null;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
276 }
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
277 }
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
278
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
279 ///
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
280 private void set_arrowDirection()
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
281 {
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
282 int x = 0, y = 0;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
283
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
284 if(key_up) y += 1;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
285 if(key_down) y -= 1;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
286 if(key_right) x += 1;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
287 if(key_left) x -= 1;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
288
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
289 arrowDirection = cpv(x, y);
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
290 }
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
291
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
292 ///
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
293 private void keyEvent(int _key,bool _down)
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
294 {
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
295 int key = _key;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
296
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
297 if(_down)
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
298 {
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
299 int index = key - 'a';
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
300
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
301 if(0 <= index && index < demos.length){
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
302 runDemo(demos[index]);
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
303 } else if(key == '\r'){
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
304 runDemo(currentDemo);
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
305 } else if(key == 47){
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
306 options.drawHash = !options.drawHash;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
307 } else if(key == 92){
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
308 options.drawBBs = !options.drawBBs;
21
f2287962b4b7 - use portable timing method
Extrawurst
parents: 16
diff changeset
309 } else if(key == 27){
f2287962b4b7 - use portable timing method
Extrawurst
parents: 16
diff changeset
310 m_running = false;
16
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
311 } else if(key == 93){
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
312 glEnable(GL_LINE_SMOOTH);
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
313 glEnable(GL_POINT_SMOOTH);
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
314 glEnable(GL_BLEND);
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
315 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
316 glHint(GL_LINE_SMOOTH_HINT, GL_DONT_CARE);
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
317 glHint(GL_POINT_SMOOTH_HINT, GL_DONT_CARE);
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
318 }
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
319 else
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
320 {
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
321 if(key == SDLK_UP) key_up = true;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
322 else if(key == SDLK_DOWN) key_down = true;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
323 else if(key == SDLK_LEFT) key_left = true;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
324 else if(key == SDLK_RIGHT) key_right = true;
21
f2287962b4b7 - use portable timing method
Extrawurst
parents: 16
diff changeset
325 else if(key == SDLK_SPACE) key_space = true;
16
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
326
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
327 set_arrowDirection();
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
328 }
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
329 }
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
330 else
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
331 {
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
332 if(key == SDLK_UP) key_up = false;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
333 else if(key == SDLK_DOWN) key_down = false;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
334 else if(key == SDLK_LEFT) key_left = false;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
335 else if(key == SDLK_RIGHT) key_right = false;
21
f2287962b4b7 - use portable timing method
Extrawurst
parents: 16
diff changeset
336 else if(key == SDLK_SPACE) key_space = false;
16
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
337
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
338 set_arrowDirection();
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
339 }
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
340 }
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
341 }
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
342