X-Git-Url: https://git.dogcows.com/gitweb?p=chaz%2Fyoink;a=blobdiff_plain;f=src%2FYoinkApp.cc;h=023b3a30ce51837365e60d22136cc8a2e04cdce3;hp=655aa3497928e5c22b6510f8725efa95d86a5368;hb=29e3d45f7bbbf31eadf793c41ff2b3d9c47b7539;hpb=87bc17e55b0c1dc73ecc66df856d3f08fd7a7724 diff --git a/src/YoinkApp.cc b/src/YoinkApp.cc index 655aa34..023b3a3 100644 --- a/src/YoinkApp.cc +++ b/src/YoinkApp.cc @@ -26,18 +26,17 @@ *******************************************************************************/ +#include // getenv #include #include -#include // getenv - #include -#include "math.hh" -#include "opengl.hh" -#include "settings.hh" -#include "timer.hh" -#include "video.hh" +#include +#include +#include +#include +#include #include "YoinkApp.hh" @@ -51,6 +50,7 @@ static std::string configFiles() std::string files; char* configFile = getenv("YOINKRC"); + char* dataDir = getenv("YOINK_DATADIR"); if (configFile) { @@ -60,30 +60,48 @@ static std::string configFiles() files += ":"; } + // add the colon-delimited paths from configure files += YOINK_CONFIGFILES; + if (dataDir) + { + // if another data directory is set in the environment, look for a + // config file there + files += ":"; + files += dataDir; + files += "/yoinkrc"; + } + + // look in the configured data directory last of all + files += ":"; + files += (dataDir ? dataDir : YOINK_DATADIR); + files += "/yoinkrc"; + return files; } - -YoinkApp::YoinkApp(int argc, char* argv[]) : - dc::engine(PACKAGE_STRING, argc, argv, configFiles()) +static std::string iconFile() { - std::cout << PACKAGE_STRING << std::endl - << "Compiled " << __TIME__ " " __DATE__ << std::endl - << "Send requests, patches, and bug reports to <" - PACKAGE_BUGREPORT << ">." << std::endl << std::endl; - char* dataDir = getenv("YOINK_DATADIR"); + // first set up the search paths so we can find the icon and other resources if (dataDir) { - dc::resource::addSearchPath(dataDir); + // look first in the data directory specified by the environment + Mf::Resource::addSearchPath(dataDir); } - dc::resource::addSearchPath(YOINK_DATADIR); + // then look in the configured data directory + Mf::Resource::addSearchPath(YOINK_DATADIR); - dc::dispatcher::instance().addHandler("video.context_recreated", + return Mf::Resource::getPathToResource("yoink.png"); +} + + +YoinkApp::YoinkApp(int argc, char* argv[]) : + Mf::Engine(argc, argv, configFiles(), PACKAGE_STRING, iconFile()) +{ + Mf::Dispatcher::instance().addHandler("video.context_recreated", boost::bind(&YoinkApp::contextRecreated, this, _1), this); setupGL(); @@ -94,17 +112,19 @@ YoinkApp::YoinkApp(int argc, char* argv[]) : font = new TilemapFont; - dc::vector2 coeffs[4]; - coeffs[0] = dc::vector2(0.0, 0.0); - coeffs[1] = dc::vector2(0.5, 0.0); - coeffs[2] = dc::vector2(0.5, 0.0); - coeffs[3] = dc::vector2(1.0, 0.0); - interp.init(coeffs, 1.0, dc::interpolator::oscillate); + Mf::Vector2 coeffs[4]; + coeffs[0] = Mf::Vector2(0.0, 0.0); + coeffs[1] = Mf::Vector2(0.5, 0.0); + coeffs[2] = Mf::Vector2(0.5, 0.0); + coeffs[3] = Mf::Vector2(1.0, 0.0); + interp.init(coeffs, 1.0, Mf::Interpolator::OSCILLATE); - dc::scalar coeff[2] = {1.0, 0.0}; + Mf::Scalar coeff[2] = {1.0, 0.0}; fadeIn.init(coeff, 0.5f); - testScene = new dc::scene("Test"); + testScene = new Mf::Scene("Test"); + + x = y = z = 0.0; } YoinkApp::~YoinkApp() @@ -112,31 +132,39 @@ YoinkApp::~YoinkApp() delete someChar; delete font; - dc::dispatcher::instance().removeHandler(this); - - std::cout << "Goodbye..." << std::endl; + Mf::Dispatcher::instance().removeHandler(this); } void YoinkApp::setupGL() { glEnable(GL_TEXTURE_2D); + //glEnable(GL_CULL_FACE); glEnable(GL_DEPTH_TEST); glShadeModel(GL_SMOOTH); + //glEnable(GL_POLYGON_SMOOTH); + + //int texSize; + //glGetIntegerv(GL_MAX_TEXTURE_SIZE, &texSize); + //std::cout << "texture size: " << texSize << std::endl; //glEnable(GL_BLEND); //glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable(GL_ALPHA_TEST); glAlphaFunc(GL_GREATER, 0.0); - glClearColor(0.0, 0.0, 1.0, 1.0); + glClearColor(1.0, 0.0, 0.0, 1.0); + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + gluPerspective(60.0, 1.33333, 1.0, 2500.0); + //glLineWidth(10.0f); } -void YoinkApp::contextRecreated(const dc::notification& note) +void YoinkApp::contextRecreated(const Mf::Notification& note) { // Whenever the context and a new one created, it probably won't contain our // state so we need to set that up again. @@ -144,12 +172,14 @@ void YoinkApp::contextRecreated(const dc::notification& note) } -void YoinkApp::update(dc::scalar t, dc::scalar dt) +void YoinkApp::update(Mf::Scalar t, Mf::Scalar dt) { //dt *= 0.2; fadeIn.update(dt); + camera.update(t, dt); + someChar->getAnimation().update(t, dt); interp.update(dt); @@ -158,41 +188,41 @@ void YoinkApp::update(dc::scalar t, dc::scalar dt) } -void YoinkApp::draw(dc::scalar alpha) +void YoinkApp::draw(Mf::Scalar alpha) { - //dc::vector4 meh; + //Mf::Vector4 meh; //meh.random(0.0, 1.0); - //static dc::vector4 c1(meh); + //static Mf::Vector4 c1(meh); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - //dc::scalar drawstate = cml::lerp(prevstate, state, alpha); - //dc::scalar sinstate = std::sin(drawstate); - //dc::scalar cosstate = std::cos(drawstate); + //Mf::Scalar drawstate = cml::lerp(prevstate, state, alpha); + //Mf::Scalar sinstate = std::sin(drawstate); + //Mf::Scalar cosstate = std::cos(drawstate); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPerspective(60.0, 1.33333, 1.0, 2000.0); - + glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); + //glLoadIdentity(); glBindTexture(GL_TEXTURE_2D, 0); //glRotatef(drawstate*15.0f, 0.0, 1.0, 0.0); - glTranslatef(x, y, z); + //glTranslatef(x, y, z); + glLoadMatrix(camera.getTransformation().data()); // DRAW THE SCENE testScene->draw(alpha); /* + glLoadIdentity(); + someChar->getTilemap().bind(); glColor3f(1.0, 1.0, 1.0); - unsigned heroFrame = someChar->getAnimation().getFrame(); + Mf::Tilemap::Index heroFrame = someChar->getAnimation().getFrame(); - float coords[8]; + Mf::Scalar coords[8]; someChar->getTilemap().getTileCoords(heroFrame, coords); glBegin(GL_QUADS); @@ -208,7 +238,7 @@ void YoinkApp::draw(dc::scalar alpha) someChar->getTilemap().getTileCoords(heroFrame, coords, - dc::tilemap::reverse); + Mf::Tilemap::REVERSE); glBegin(GL_QUADS); glTexCoord2f(coords[0], coords[1]); @@ -224,7 +254,7 @@ void YoinkApp::draw(dc::scalar alpha) glColor4f(1.0,0.0,0.0,0.5); glBindTexture(GL_TEXTURE_2D, 0); - glColor4fv(c1.data()); + glColor4v(c1.data()); glRectd(-cosstate, -sinstate, sinstate, cosstate); glRectf(0.0f, 0.0f, sinstate, cosstate); @@ -274,13 +304,13 @@ void YoinkApp::draw(dc::scalar alpha) glBegin(GL_QUADS); glTexCoord2f(coords[0], coords[1]); - glVertex3f(0.0, -1.0, 0.0); + glVertex3(0.0, -1.0, 0.0); glTexCoord2f(coords[2], coords[3]); - glVertex3f(1.0, -1.0, 0.0); + glVertex3(1.0, -1.0, 0.0); glTexCoord2f(coords[4], coords[5]); - glVertex3f(1.0, 0.0, 0.0); + glVertex3(1.0, 0.0, 0.0); glTexCoord2f(coords[6], coords[7]); - glVertex3f(0.0, 0.0, 0.0); + glVertex3(0.0, 0.0, 0.0); glEnd(); glEnable(GL_BLEND); @@ -292,7 +322,7 @@ void YoinkApp::draw(dc::scalar alpha) glBegin(GL_LINES); glVertex2f(0.0f, 0.0f); - glVertex2fv(interp.getState(alpha).data()); + glVertex2v(interp.getState(alpha).data()); glEnd(); glColor4f(0.0f, 0.0f, 0.0f, fadeIn.getState(alpha)); @@ -302,47 +332,60 @@ void YoinkApp::draw(dc::scalar alpha) glEnable(GL_DEPTH_TEST);*/ } -void YoinkApp::handleEvent(const dc::event& e) +void YoinkApp::handleEvent(const Mf::Event& event) { - switch (e.type) + switch (event.type) { case SDL_KEYDOWN: - if (e.key.keysym.sym == SDLK_ESCAPE) + if (event.key.keysym.sym == SDLK_ESCAPE) { stop(); } - else if (e.key.keysym.sym == SDLK_f) + else if (event.key.keysym.sym == SDLK_f) { getVideo().toggleFull(); } - else if (e.key.keysym.sym == SDLK_a) + else if (event.key.keysym.sym == SDLK_a) { someChar->getAnimation().startSequence("Punch"); } - else if (e.key.keysym.sym == SDLK_RIGHT) + else if (event.key.keysym.sym == SDLK_r) { - x -= 50.0; + testScene->refresh(); } - else if (e.key.keysym.sym == SDLK_LEFT) + else if (event.key.keysym.sym == SDLK_l) { - x += 50.0; - } - else if (e.key.keysym.sym == SDLK_UP) - { - y -= 50.0; - } - else if (e.key.keysym.sym == SDLK_DOWN) - { - y += 50.0; - } - else if (e.key.keysym.sym == SDLK_PAGEUP) - { - z += 50.0; - } - else if (e.key.keysym.sym == SDLK_PAGEDOWN) - { - z -= 50.0; + getVideo().toggleCursorGrab(); + getVideo().toggleCursorVisible(); } + //else if (event.key.keysym.sym == SDLK_RIGHT) + //{ + //x -= 50.0; + //} + //else if (event.key.keysym.sym == SDLK_LEFT) + //{ + //x += 50.0; + //} + //else if (event.key.keysym.sym == SDLK_UP) + //{ + //y -= 50.0; + //} + //else if (event.key.keysym.sym == SDLK_DOWN) + //{ + //y += 50.0; + //} + //else if (event.key.keysym.sym == SDLK_PAGEUP) + //{ + //z += 50.0; + //} + //else if (event.key.keysym.sym == SDLK_PAGEDOWN) + //{ + //z -= 50.0; + //} + + case SDL_MOUSEMOTION: + case SDL_MOUSEBUTTONDOWN: + camera.adjustFromInput(event); break; case SDL_QUIT: @@ -350,17 +393,48 @@ void YoinkApp::handleEvent(const dc::event& e) break; case SDL_VIDEORESIZE: - glViewport(0, 0, e.resize.w, e.resize.h); + glViewport(0, 0, event.resize.w, event.resize.h); + + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + + + gluPerspective(60.0, double(event.resize.w / event.resize.h), 1.0, 2500.0); + + glMatrixMode(GL_MODELVIEW); break; } } +#include int main(int argc, char* argv[]) { - YoinkApp app(argc, argv); - return app.run(); + std::cout << PACKAGE_STRING << std::endl + << "Compiled " << __TIME__ " " __DATE__ << std::endl + << "Send requests, patches, and bug reports to <" + PACKAGE_BUGREPORT << ">." << std::endl << std::endl; + + int status = 0; + + //Mf::Tree myTree; + //Mf::Tree::Ptr prev = myTree.previousSibling(); + //myTree = *prev; + + try + { + YoinkApp app(argc, argv); + status = app.run(); + } + catch (Mf::Engine::Exception e) + { + std::cerr << "Unhandled exception: " << e.what() << std::endl; + status = 1; + } + + std::cout << "Goodbye..." << std::endl; + return status; } /** vim: set ts=4 sw=4 tw=80: *************************************************/