]>
Dogcows Code - chaz/yoink/blob - src/YoinkApp.cc
2 /*******************************************************************************
4 Copyright (c) 2009, Charles McGarvey
7 Redistribution and use in source and binary forms, with or without
8 modification, are permitted provided that the following conditions are met:
10 * Redistributions of source code must retain the above copyright notice,
11 this list of conditions and the following disclaimer.
12 * Redistributions in binary form must reproduce the above copyright notice,
13 this list of conditions and the following disclaimer in the documentation
14 and/or other materials provided with the distribution.
16 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
20 FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21 DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
22 SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
23 CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
24 OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
25 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 *******************************************************************************/
32 #include <cstdlib> // getenv
34 #include <boost/bind.hpp>
38 #include "settings.hh"
42 #include "YoinkApp.hh"
49 static std::string
configFiles()
53 char* configFile
= getenv("YOINKRC");
57 // if a config file from the environment variable is specified, we want
58 // to load it first so it has precedence
63 files
+= YOINK_CONFIGFILES
;
69 YoinkApp::YoinkApp(int argc
, char* argv
[]) :
70 dc::engine(PACKAGE_STRING
, argc
, argv
, configFiles())
72 std::cout
<< PACKAGE_STRING
<< std::endl
73 << "Compiled " << __TIME__
" " __DATE__
<< std::endl
74 << "Send requests, patches, and bug reports to <"
75 PACKAGE_BUGREPORT
<< ">." << std::endl
<< std::endl
;
77 char* dataDir
= getenv("YOINK_DATADIR");
81 dc::resource::addSearchPath(dataDir
);
84 dc::resource::addSearchPath(YOINK_DATADIR
);
86 dc::dispatcher::instance().addHandler("video.context_recreated",
87 boost::bind(&YoinkApp::contextRecreated
, this, _1
), this);
92 someChar
= new Character("RobotTrooper");
93 someChar
->getAnimation().startSequence("Run");
95 font
= new TilemapFont
;
97 dc::vector2 coeffs
[4];
98 coeffs
[0] = dc::vector2(0.0, 0.0);
99 coeffs
[1] = dc::vector2(0.5, 0.0);
100 coeffs
[2] = dc::vector2(0.5, 0.0);
101 coeffs
[3] = dc::vector2(1.0, 0.0);
102 interp
.init(coeffs
, 1.0, dc::interpolator::oscillate
);
104 dc::scalar coeff
[2] = {1.0, 0.0};
105 fadeIn
.init(coeff
, 0.5f
);
107 testScene
= new dc::scene("Test");
110 YoinkApp::~YoinkApp()
115 dc::dispatcher::instance().removeHandler(this);
117 std::cout
<< "Goodbye..." << std::endl
;
121 void YoinkApp::setupGL()
123 glEnable(GL_TEXTURE_2D
);
124 //glEnable(GL_CULL_FACE);
125 glEnable(GL_DEPTH_TEST
);
127 glShadeModel(GL_SMOOTH
);
129 //glEnable(GL_BLEND);
130 //glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
131 glEnable(GL_ALPHA_TEST
);
132 glAlphaFunc(GL_GREATER
, 0.0);
134 glClearColor(0.0, 0.0, 1.0, 1.0);
136 //glLineWidth(10.0f);
139 void YoinkApp::contextRecreated(const dc::notification
& note
)
141 // Whenever the context and a new one created, it probably won't contain our
142 // state so we need to set that up again.
147 void YoinkApp::update(dc::scalar t
, dc::scalar dt
)
153 someChar
->getAnimation().update(t
, dt
);
161 void YoinkApp::draw(dc::scalar alpha
)
164 //meh.random(0.0, 1.0);
165 //static dc::vector4 c1(meh);
167 glClear(GL_COLOR_BUFFER_BIT
| GL_DEPTH_BUFFER_BIT
);
169 //dc::scalar drawstate = cml::lerp(prevstate, state, alpha);
170 //dc::scalar sinstate = std::sin(drawstate);
171 //dc::scalar cosstate = std::cos(drawstate);
174 glMatrixMode(GL_PROJECTION
);
176 gluPerspective(60.0, 1.33333, 1.0, 2000.0);
178 glMatrixMode(GL_MODELVIEW
);
181 glBindTexture(GL_TEXTURE_2D
, 0);
182 //glRotatef(drawstate*15.0f, 0.0, 1.0, 0.0);
183 glTranslatef(x
, y
, z
);
186 testScene
->draw(alpha
);
190 someChar->getTilemap().bind();
191 glColor3f(1.0, 1.0, 1.0);
193 unsigned heroFrame = someChar->getAnimation().getFrame();
196 someChar->getTilemap().getTileCoords(heroFrame, coords);
199 glTexCoord2f(coords[0], coords[1]);
200 glVertex3f(-1.0, 0.0, 0.0);
201 glTexCoord2f(coords[2], coords[3]);
202 glVertex3f(0.0, 0.0, 0.0);
203 glTexCoord2f(coords[4], coords[5]);
204 glVertex3f(0.0, 1.0, 0.0);
205 glTexCoord2f(coords[6], coords[7]);
206 glVertex3f(-1.0, 1.0, 0.0);
210 someChar->getTilemap().getTileCoords(heroFrame, coords,
211 dc::tilemap::reverse);
214 glTexCoord2f(coords[0], coords[1]);
215 glVertex3f(0.0, 0.0, 0.0);
216 glTexCoord2f(coords[2], coords[3]);
217 glVertex3f(1.0, 0.0, 0.0);
218 glTexCoord2f(coords[4], coords[5]);
219 glVertex3f(1.0, 1.0, 0.0);
220 glTexCoord2f(coords[6], coords[7]);
221 glVertex3f(0.0, 1.0, 0.0);
224 glColor4f(1.0,0.0,0.0,0.5);
226 glBindTexture(GL_TEXTURE_2D, 0);
227 glColor4fv(c1.data());
229 glRectd(-cosstate, -sinstate, sinstate, cosstate);
230 glRectf(0.0f, 0.0f, sinstate, cosstate);
234 font->getTileCoords('c', coords);
237 glTexCoord2f(coords[0], coords[1]);
238 glVertex3f(-1.0, 0.0, 0.0);
239 glTexCoord2f(coords[2], coords[3]);
240 glVertex3f(0.0, 0.0, 0.0);
241 glTexCoord2f(coords[4], coords[5]);
242 glVertex3f(0.0, 1.0, 0.0);
243 glTexCoord2f(coords[6], coords[7]);
244 glVertex3f(-1.0, 1.0, 0.0);
247 font->getTileCoords('h', coords);
250 glTexCoord2f(coords[0], coords[1]);
251 glVertex3f(0.0, 0.0, 0.0);
252 glTexCoord2f(coords[2], coords[3]);
253 glVertex3f(1.0, 0.0, 0.0);
254 glTexCoord2f(coords[4], coords[5]);
255 glVertex3f(1.0, 1.0, 0.0);
256 glTexCoord2f(coords[6], coords[7]);
257 glVertex3f(0.0, 1.0, 0.0);
260 font->getTileCoords('a', coords);
263 glTexCoord2f(coords[0], coords[1]);
264 glVertex3f(-1.0, -1.0, 0.0);
265 glTexCoord2f(coords[2], coords[3]);
266 glVertex3f(0.0, -1.0, 0.0);
267 glTexCoord2f(coords[4], coords[5]);
268 glVertex3f(0.0, 0.0, 0.0);
269 glTexCoord2f(coords[6], coords[7]);
270 glVertex3f(-1.0, 0.0, 0.0);
273 font->getTileCoords('z', coords);
276 glTexCoord2f(coords[0], coords[1]);
277 glVertex3f(0.0, -1.0, 0.0);
278 glTexCoord2f(coords[2], coords[3]);
279 glVertex3f(1.0, -1.0, 0.0);
280 glTexCoord2f(coords[4], coords[5]);
281 glVertex3f(1.0, 0.0, 0.0);
282 glTexCoord2f(coords[6], coords[7]);
283 glVertex3f(0.0, 0.0, 0.0);
287 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
288 glDisable(GL_DEPTH_TEST);
290 glBindTexture(GL_TEXTURE_2D, 0);
291 glColor4f(0.0f, 0.0f, 0.0f, 1.0f);
294 glVertex2f(0.0f, 0.0f);
295 glVertex2fv(interp.getState(alpha).data());
298 glColor4f(0.0f, 0.0f, 0.0f, fadeIn.getState(alpha));
299 glRectf(-1.0f, -1.0f, 1.0f, 1.0f);
302 glEnable(GL_DEPTH_TEST);*/
305 void YoinkApp::handleEvent(const dc::event
& e
)
310 if (e
.key
.keysym
.sym
== SDLK_ESCAPE
)
314 else if (e
.key
.keysym
.sym
== SDLK_f
)
316 getVideo().toggleFull();
318 else if (e
.key
.keysym
.sym
== SDLK_a
)
320 someChar
->getAnimation().startSequence("Punch");
322 else if (e
.key
.keysym
.sym
== SDLK_RIGHT
)
326 else if (e
.key
.keysym
.sym
== SDLK_LEFT
)
330 else if (e
.key
.keysym
.sym
== SDLK_UP
)
334 else if (e
.key
.keysym
.sym
== SDLK_DOWN
)
338 else if (e
.key
.keysym
.sym
== SDLK_PAGEUP
)
342 else if (e
.key
.keysym
.sym
== SDLK_PAGEDOWN
)
352 case SDL_VIDEORESIZE
:
353 glViewport(0, 0, e
.resize
.w
, e
.resize
.h
);
360 int main(int argc
, char* argv
[])
362 YoinkApp
app(argc
, argv
);
366 /** vim: set ts=4 sw=4 tw=80: *************************************************/
This page took 0.048859 seconds and 5 git commands to generate.