]>
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 *******************************************************************************/
29 #include <cstdlib> // getenv
33 #include <boost/bind.hpp>
35 #include <Moof/Math.hh>
36 #include <Moof/OpenGL.hh>
37 #include <Moof/Settings.hh>
38 #include <Moof/Timer.hh>
39 #include <Moof/Video.hh>
41 #include "YoinkApp.hh"
48 static std::string
configFiles()
52 char* configFile
= getenv("YOINKRC");
56 // if a config file from the environment variable is specified, we want
57 // to load it first so it has precedence
62 files
+= YOINK_CONFIGFILES
;
68 YoinkApp::YoinkApp(int argc
, char* argv
[]) :
69 Mf::Engine(PACKAGE_STRING
, argc
, argv
, configFiles())
71 std::cout
<< PACKAGE_STRING
<< std::endl
72 << "Compiled " << __TIME__
" " __DATE__
<< std::endl
73 << "Send requests, patches, and bug reports to <"
74 PACKAGE_BUGREPORT
<< ">." << std::endl
<< std::endl
;
76 char* dataDir
= getenv("YOINK_DATADIR");
80 Mf::Resource::addSearchPath(dataDir
);
83 Mf::Resource::addSearchPath(YOINK_DATADIR
);
85 Mf::Dispatcher::instance().addHandler("video.context_recreated",
86 boost::bind(&YoinkApp::contextRecreated
, this, _1
), this);
91 someChar
= new Character("RobotTrooper");
92 someChar
->getAnimation().startSequence("Run");
94 font
= new TilemapFont
;
96 Mf::Vector2 coeffs
[4];
97 coeffs
[0] = Mf::Vector2(0.0, 0.0);
98 coeffs
[1] = Mf::Vector2(0.5, 0.0);
99 coeffs
[2] = Mf::Vector2(0.5, 0.0);
100 coeffs
[3] = Mf::Vector2(1.0, 0.0);
101 interp
.init(coeffs
, 1.0, Mf::Interpolator::OSCILLATE
);
103 Mf::Scalar coeff
[2] = {1.0, 0.0};
104 fadeIn
.init(coeff
, 0.5f
);
106 testScene
= new Mf::Scene("Test");
109 YoinkApp::~YoinkApp()
114 Mf::Dispatcher::instance().removeHandler(this);
116 std::cout
<< "Goodbye..." << std::endl
;
120 void YoinkApp::setupGL()
122 glEnable(GL_TEXTURE_2D
);
123 //glEnable(GL_CULL_FACE);
124 glEnable(GL_DEPTH_TEST
);
126 glShadeModel(GL_SMOOTH
);
128 //glEnable(GL_BLEND);
129 //glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
130 glEnable(GL_ALPHA_TEST
);
131 glAlphaFunc(GL_GREATER
, 0.0);
133 glClearColor(0.0, 0.0, 1.0, 1.0);
135 //glLineWidth(10.0f);
138 void YoinkApp::contextRecreated(const Mf::Notification
& note
)
140 // Whenever the context and a new one created, it probably won't contain our
141 // state so we need to set that up again.
146 void YoinkApp::update(Mf::Scalar t
, Mf::Scalar dt
)
152 someChar
->getAnimation().update(t
, dt
);
160 void YoinkApp::draw(Mf::Scalar alpha
)
163 //meh.random(0.0, 1.0);
164 //static Mf::vector4 c1(meh);
166 glClear(GL_COLOR_BUFFER_BIT
| GL_DEPTH_BUFFER_BIT
);
168 //Mf::Scalar drawstate = cml::lerp(prevstate, state, alpha);
169 //Mf::Scalar sinstate = std::sin(drawstate);
170 //Mf::Scalar cosstate = std::cos(drawstate);
173 glMatrixMode(GL_PROJECTION
);
175 gluPerspective(60.0, 1.33333, 1.0, 2000.0);
177 glMatrixMode(GL_MODELVIEW
);
180 glBindTexture(GL_TEXTURE_2D
, 0);
181 //glRotatef(drawstate*15.0f, 0.0, 1.0, 0.0);
182 glTranslatef(x
, y
, z
);
185 testScene
->draw(alpha
);
189 someChar->getTilemap().bind();
190 glColor3f(1.0, 1.0, 1.0);
192 unsigned heroFrame = someChar->getAnimation().getFrame();
195 someChar->getTilemap().getTileCoords(heroFrame, coords);
198 glTexCoord2f(coords[0], coords[1]);
199 glVertex3f(-1.0, 0.0, 0.0);
200 glTexCoord2f(coords[2], coords[3]);
201 glVertex3f(0.0, 0.0, 0.0);
202 glTexCoord2f(coords[4], coords[5]);
203 glVertex3f(0.0, 1.0, 0.0);
204 glTexCoord2f(coords[6], coords[7]);
205 glVertex3f(-1.0, 1.0, 0.0);
209 someChar->getTilemap().getTileCoords(heroFrame, coords,
210 Mf::tilemap::reverse);
213 glTexCoord2f(coords[0], coords[1]);
214 glVertex3f(0.0, 0.0, 0.0);
215 glTexCoord2f(coords[2], coords[3]);
216 glVertex3f(1.0, 0.0, 0.0);
217 glTexCoord2f(coords[4], coords[5]);
218 glVertex3f(1.0, 1.0, 0.0);
219 glTexCoord2f(coords[6], coords[7]);
220 glVertex3f(0.0, 1.0, 0.0);
223 glColor4f(1.0,0.0,0.0,0.5);
225 glBindTexture(GL_TEXTURE_2D, 0);
226 glColor4fv(c1.data());
228 glRectd(-cosstate, -sinstate, sinstate, cosstate);
229 glRectf(0.0f, 0.0f, sinstate, cosstate);
233 font->getTileCoords('c', coords);
236 glTexCoord2f(coords[0], coords[1]);
237 glVertex3f(-1.0, 0.0, 0.0);
238 glTexCoord2f(coords[2], coords[3]);
239 glVertex3f(0.0, 0.0, 0.0);
240 glTexCoord2f(coords[4], coords[5]);
241 glVertex3f(0.0, 1.0, 0.0);
242 glTexCoord2f(coords[6], coords[7]);
243 glVertex3f(-1.0, 1.0, 0.0);
246 font->getTileCoords('h', coords);
249 glTexCoord2f(coords[0], coords[1]);
250 glVertex3f(0.0, 0.0, 0.0);
251 glTexCoord2f(coords[2], coords[3]);
252 glVertex3f(1.0, 0.0, 0.0);
253 glTexCoord2f(coords[4], coords[5]);
254 glVertex3f(1.0, 1.0, 0.0);
255 glTexCoord2f(coords[6], coords[7]);
256 glVertex3f(0.0, 1.0, 0.0);
259 font->getTileCoords('a', coords);
262 glTexCoord2f(coords[0], coords[1]);
263 glVertex3f(-1.0, -1.0, 0.0);
264 glTexCoord2f(coords[2], coords[3]);
265 glVertex3f(0.0, -1.0, 0.0);
266 glTexCoord2f(coords[4], coords[5]);
267 glVertex3f(0.0, 0.0, 0.0);
268 glTexCoord2f(coords[6], coords[7]);
269 glVertex3f(-1.0, 0.0, 0.0);
272 font->getTileCoords('z', coords);
275 glTexCoord2f(coords[0], coords[1]);
276 glVertex3f(0.0, -1.0, 0.0);
277 glTexCoord2f(coords[2], coords[3]);
278 glVertex3f(1.0, -1.0, 0.0);
279 glTexCoord2f(coords[4], coords[5]);
280 glVertex3f(1.0, 0.0, 0.0);
281 glTexCoord2f(coords[6], coords[7]);
282 glVertex3f(0.0, 0.0, 0.0);
286 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
287 glDisable(GL_DEPTH_TEST);
289 glBindTexture(GL_TEXTURE_2D, 0);
290 glColor4f(0.0f, 0.0f, 0.0f, 1.0f);
293 glVertex2f(0.0f, 0.0f);
294 glVertex2fv(interp.getState(alpha).data());
297 glColor4f(0.0f, 0.0f, 0.0f, fadeIn.getState(alpha));
298 glRectf(-1.0f, -1.0f, 1.0f, 1.0f);
301 glEnable(GL_DEPTH_TEST);*/
304 void YoinkApp::handleEvent(const Mf::Event
& event
)
309 if (event
.key
.keysym
.sym
== SDLK_ESCAPE
)
313 else if (event
.key
.keysym
.sym
== SDLK_f
)
315 getVideo().toggleFull();
317 else if (event
.key
.keysym
.sym
== SDLK_a
)
319 someChar
->getAnimation().startSequence("Punch");
321 else if (event
.key
.keysym
.sym
== SDLK_RIGHT
)
325 else if (event
.key
.keysym
.sym
== SDLK_LEFT
)
329 else if (event
.key
.keysym
.sym
== SDLK_UP
)
333 else if (event
.key
.keysym
.sym
== SDLK_DOWN
)
337 else if (event
.key
.keysym
.sym
== SDLK_PAGEUP
)
341 else if (event
.key
.keysym
.sym
== SDLK_PAGEDOWN
)
351 case SDL_VIDEORESIZE
:
352 glViewport(0, 0, event
.resize
.w
, event
.resize
.h
);
359 int main(int argc
, char* argv
[])
361 YoinkApp
app(argc
, argv
);
365 /** vim: set ts=4 sw=4 tw=80: *************************************************/
This page took 0.052574 seconds and 4 git commands to generate.