]>
Dogcows Code - chaz/yoink/blob - src/YoinkApp.cc
232c097425b4f3a70803951644e3bdf634d1e203
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
;
67 static std::string
iconFile()
69 char* dataDir
= getenv("YOINK_DATADIR");
71 // first set up the search paths so we can find the icon and other resources
74 Mf::Resource::addSearchPath(dataDir
);
76 Mf::Resource::addSearchPath(YOINK_DATADIR
);
78 return Mf::Resource::getPathToResource("yoink.png");
82 YoinkApp::YoinkApp(int argc
, char* argv
[]) :
83 Mf::Engine(argc
, argv
, configFiles(), PACKAGE_STRING
, iconFile())
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");
111 YoinkApp::~YoinkApp()
116 Mf::Dispatcher::instance().removeHandler(this);
120 void YoinkApp::setupGL()
122 glEnable(GL_TEXTURE_2D
);
124 //glEnable(GL_CULL_FACE);
125 glEnable(GL_DEPTH_TEST
);
127 glShadeModel(GL_SMOOTH
);
128 glEnable(GL_POLYGON_SMOOTH
);
131 //glGetIntegerv(GL_MAX_TEXTURE_SIZE, &texSize);
132 //std::cout << "texture size: " << texSize << std::endl;
134 //glEnable(GL_BLEND);
135 //glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
136 glEnable(GL_ALPHA_TEST
);
137 glAlphaFunc(GL_GREATER
, 0.0);
139 glClearColor(1.0, 0.0, 0.0, 1.0);
141 //glLineWidth(10.0f);
144 void YoinkApp::contextRecreated(const Mf::Notification
& note
)
146 // Whenever the context and a new one created, it probably won't contain our
147 // state so we need to set that up again.
152 void YoinkApp::update(Mf::Scalar t
, Mf::Scalar dt
)
158 someChar
->getAnimation().update(t
, dt
);
166 void YoinkApp::draw(Mf::Scalar alpha
)
169 //meh.random(0.0, 1.0);
170 //static Mf::Vector4 c1(meh);
172 glClear(GL_COLOR_BUFFER_BIT
| GL_DEPTH_BUFFER_BIT
);
174 //Mf::Scalar drawstate = cml::lerp(prevstate, state, alpha);
175 //Mf::Scalar sinstate = std::sin(drawstate);
176 //Mf::Scalar cosstate = std::cos(drawstate);
180 glMatrixMode(GL_PROJECTION
);
182 gluPerspective(60.0, 1.33333, 1.0, 2000.0);
184 glMatrixMode(GL_MODELVIEW
);
187 glBindTexture(GL_TEXTURE_2D
, 0);
188 //glRotatef(drawstate*15.0f, 0.0, 1.0, 0.0);
189 glTranslatef(x
, y
, z
);
192 testScene
->draw(alpha
);
198 someChar->getTilemap().bind();
199 glColor3f(1.0, 1.0, 1.0);
201 Mf::Tilemap::Index heroFrame = someChar->getAnimation().getFrame();
203 Mf::Scalar coords[8];
204 someChar->getTilemap().getTileCoords(heroFrame, coords);
207 glTexCoord2f(coords[0], coords[1]);
208 glVertex3f(-1.0, 0.0, 0.0);
209 glTexCoord2f(coords[2], coords[3]);
210 glVertex3f(0.0, 0.0, 0.0);
211 glTexCoord2f(coords[4], coords[5]);
212 glVertex3f(0.0, 1.0, 0.0);
213 glTexCoord2f(coords[6], coords[7]);
214 glVertex3f(-1.0, 1.0, 0.0);
218 someChar->getTilemap().getTileCoords(heroFrame, coords,
219 Mf::Tilemap::REVERSE);
222 glTexCoord2f(coords[0], coords[1]);
223 glVertex3f(0.0, 0.0, 0.0);
224 glTexCoord2f(coords[2], coords[3]);
225 glVertex3f(1.0, 0.0, 0.0);
226 glTexCoord2f(coords[4], coords[5]);
227 glVertex3f(1.0, 1.0, 0.0);
228 glTexCoord2f(coords[6], coords[7]);
229 glVertex3f(0.0, 1.0, 0.0);
232 glColor4f(1.0,0.0,0.0,0.5);
234 glBindTexture(GL_TEXTURE_2D, 0);
235 glColor4v(c1.data());
237 glRectd(-cosstate, -sinstate, sinstate, cosstate);
238 glRectf(0.0f, 0.0f, sinstate, cosstate);
242 font->getTileCoords('c', coords);
245 glTexCoord2f(coords[0], coords[1]);
246 glVertex3f(-1.0, 0.0, 0.0);
247 glTexCoord2f(coords[2], coords[3]);
248 glVertex3f(0.0, 0.0, 0.0);
249 glTexCoord2f(coords[4], coords[5]);
250 glVertex3f(0.0, 1.0, 0.0);
251 glTexCoord2f(coords[6], coords[7]);
252 glVertex3f(-1.0, 1.0, 0.0);
255 font->getTileCoords('h', coords);
258 glTexCoord2f(coords[0], coords[1]);
259 glVertex3f(0.0, 0.0, 0.0);
260 glTexCoord2f(coords[2], coords[3]);
261 glVertex3f(1.0, 0.0, 0.0);
262 glTexCoord2f(coords[4], coords[5]);
263 glVertex3f(1.0, 1.0, 0.0);
264 glTexCoord2f(coords[6], coords[7]);
265 glVertex3f(0.0, 1.0, 0.0);
268 font->getTileCoords('a', coords);
271 glTexCoord2f(coords[0], coords[1]);
272 glVertex3f(-1.0, -1.0, 0.0);
273 glTexCoord2f(coords[2], coords[3]);
274 glVertex3f(0.0, -1.0, 0.0);
275 glTexCoord2f(coords[4], coords[5]);
276 glVertex3f(0.0, 0.0, 0.0);
277 glTexCoord2f(coords[6], coords[7]);
278 glVertex3f(-1.0, 0.0, 0.0);
281 font->getTileCoords('z', coords);
284 glTexCoord2f(coords[0], coords[1]);
285 glVertex3(0.0, -1.0, 0.0);
286 glTexCoord2f(coords[2], coords[3]);
287 glVertex3(1.0, -1.0, 0.0);
288 glTexCoord2f(coords[4], coords[5]);
289 glVertex3(1.0, 0.0, 0.0);
290 glTexCoord2f(coords[6], coords[7]);
291 glVertex3(0.0, 0.0, 0.0);
295 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
296 glDisable(GL_DEPTH_TEST);
298 glBindTexture(GL_TEXTURE_2D, 0);
299 glColor4f(0.0f, 0.0f, 0.0f, 1.0f);
302 glVertex2f(0.0f, 0.0f);
303 glVertex2v(interp.getState(alpha).data());
306 glColor4f(0.0f, 0.0f, 0.0f, fadeIn.getState(alpha));
307 glRectf(-1.0f, -1.0f, 1.0f, 1.0f);
310 glEnable(GL_DEPTH_TEST);*/
313 void YoinkApp::handleEvent(const Mf::Event
& event
)
318 if (event
.key
.keysym
.sym
== SDLK_ESCAPE
)
322 else if (event
.key
.keysym
.sym
== SDLK_f
)
324 getVideo().toggleFull();
326 else if (event
.key
.keysym
.sym
== SDLK_a
)
328 someChar
->getAnimation().startSequence("Punch");
330 else if (event
.key
.keysym
.sym
== SDLK_RIGHT
)
334 else if (event
.key
.keysym
.sym
== SDLK_LEFT
)
338 else if (event
.key
.keysym
.sym
== SDLK_UP
)
342 else if (event
.key
.keysym
.sym
== SDLK_DOWN
)
346 else if (event
.key
.keysym
.sym
== SDLK_PAGEUP
)
350 else if (event
.key
.keysym
.sym
== SDLK_PAGEDOWN
)
360 case SDL_VIDEORESIZE
:
361 glViewport(0, 0, event
.resize
.w
, event
.resize
.h
);
368 int main(int argc
, char* argv
[])
370 std::cout
<< PACKAGE_STRING
<< std::endl
371 << "Compiled " << __TIME__
" " __DATE__
<< std::endl
372 << "Send requests, patches, and bug reports to <"
373 PACKAGE_BUGREPORT
<< ">." << std::endl
<< std::endl
;
379 YoinkApp
app(argc
, argv
);
382 catch (Mf::Engine::Exception e
)
384 std::cerr
<< "Unhandled exception: " << e
.what() << std::endl
;
388 std::cout
<< "Goodbye..." << std::endl
;
392 /** vim: set ts=4 sw=4 tw=80: *************************************************/
This page took 0.054 seconds and 4 git commands to generate.