X-Git-Url: https://git.dogcows.com/gitweb?p=chaz%2Fyoink;a=blobdiff_plain;f=src%2FYoinkApp.cc;fp=src%2FYoinkApp.cc;h=a1c2dbbf8133f273e2aca98efdf2dc3f8db133ef;hp=493e6157cad7bdc2347f820cb26a1c1d406bbc39;hb=bfa6212d09d8735d8fd5e2638188e4a99f21ada4;hpb=eebb993ca929c3f4c235cad9e01dc4797fcd2945 diff --git a/src/YoinkApp.cc b/src/YoinkApp.cc index 493e615..a1c2dbb 100644 --- a/src/YoinkApp.cc +++ b/src/YoinkApp.cc @@ -40,6 +40,10 @@ #include "YoinkApp.hh" +#include +#include +#include + #if HAVE_CONFIG_H #include "config.h" #endif @@ -94,42 +98,45 @@ static std::string iconFile() // then look in the configured data directory Mf::Resource::addSearchPath(YOINK_DATADIR); - return Mf::Resource::getPathToResource("yoink.png"); + return Mf::Resource::getPath("yoink.png"); } YoinkApp::YoinkApp(int argc, char* argv[]) : - Mf::Engine(argc, argv, configFiles(), PACKAGE_STRING, iconFile()) + Mf::Engine(argc, argv, configFiles(), PACKAGE_STRING, iconFile()), + music("NightFusion"), + punchSound("RobotPunch") { Mf::Dispatcher::instance().addHandler("video.context_recreated", boost::bind(&YoinkApp::contextRecreated, this, _1), this); setupGL(); + music.play(); + state = 0.0; - someChar = new Character("RobotTrooper"); - someChar->getAnimation().startSequence("Run"); + heroine = CharacterPtr(new Character("RobotTrooper")); + heroine->getAnimation().startSequence("Run"); font = new TilemapFont; - 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); + Mf::Scalar coeffs[4]; + coeffs[0] = 0.0; + coeffs[1] = 1.5; + coeffs[2] = -0.5; + coeffs[3] = 1.0; interp.init(coeffs, 1.0, Mf::Interpolator::OSCILLATE); Mf::Scalar coeff[2] = {1.0, 0.0}; - fadeIn.init(coeff, 0.5f); + fadeIn.init(coeff, 0.1); testScene = new Mf::Scene("Test"); - - x = y = z = 0.0; + heroine->treeNode = testScene->getOctree()->insert(heroine); } YoinkApp::~YoinkApp() { - delete someChar; + //delete heroine; delete font; delete testScene; @@ -185,8 +192,15 @@ void YoinkApp::update(Mf::Scalar t, Mf::Scalar dt) camera.update(t, dt); - someChar->getAnimation().update(t, dt); + heroine->update(t, dt); + heroine->treeNode = testScene->getOctree()->reinsert(heroine, heroine->treeNode); + + //camera.lookAt(heroine->getSphere().point); + camera.setPosition(Mf::Vector3(-heroine->current.position[0], -heroine->current.position[1], -256)); + interp.update(dt); + hud.setBar1Progress(interp.getValue()); + hud.setBar2Progress(1.0 - interp.getValue()); prevstate = state; state += dt; @@ -206,19 +220,50 @@ void YoinkApp::draw(Mf::Scalar alpha) //Mf::Scalar cosstate = std::cos(drawstate); - glMatrixMode(GL_MODELVIEW); //glLoadIdentity(); - glBindTexture(GL_TEXTURE_2D, 0); //glRotatef(drawstate*15.0f, 0.0, 1.0, 0.0); //glTranslatef(x, y, z); glLoadMatrix(camera.getModelviewMatrix().data()); // DRAW THE SCENE + Mf::Texture::resetBind(); testScene->draw(alpha, camera); + + //heroine->draw(alpha); + + + hud.draw(); + + + glEnable(GL_BLEND); + glMatrixMode(GL_PROJECTION); + glPushMatrix(); + glLoadIdentity(); + glMatrixMode(GL_MODELVIEW); + glPushMatrix(); + glLoadIdentity(); + glColor4f(0.0f, 0.0f, 0.0f, fadeIn.getState(alpha)); + Mf::Texture::resetBind(); + + //glRectf(-1.0f, -1.0f, 1.0f, 1.0f); + glBegin(GL_QUADS); + glVertex3f(-1.0, -1.0, -0.1); + glVertex3f(1.0, -1.0, -0.1); + glVertex3f(1.0, 1.0, -0.1); + glVertex3f(-1.0, 1.0, -0.1); + glEnd(); + + glDisable(GL_BLEND); + + glMatrixMode(GL_PROJECTION); + glPopMatrix(); + glMatrixMode(GL_MODELVIEW); + glPopMatrix(); + /* glLoadIdentity(); @@ -350,9 +395,10 @@ void YoinkApp::handleEvent(const Mf::Event& event) { getVideo().toggleFull(); } - else if (event.key.keysym.sym == SDLK_a) + else if (event.key.keysym.sym == SDLK_SPACE) { - someChar->getAnimation().startSequence("Punch"); + heroine->getAnimation().startSequence("Punch"); + punchSound.play(); } else if (event.key.keysym.sym == SDLK_r) { @@ -363,30 +409,9 @@ void YoinkApp::handleEvent(const Mf::Event& event) 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_KEYUP: + heroine->handleEvent(event); case SDL_MOUSEMOTION: case SDL_MOUSEBUTTONDOWN: @@ -399,6 +424,7 @@ void YoinkApp::handleEvent(const Mf::Event& event) case SDL_VIDEORESIZE: glViewport(0, 0, event.resize.w, event.resize.h); + hud.resize(event.resize.w, event.resize.h); camera.setProjection(cml::rad(60.0), double(event.resize.w / event.resize.h), 32.0, 2500.0); camera.uploadProjectionToGL(); break; @@ -411,7 +437,7 @@ int main(int argc, char* argv[]) { std::cout << PACKAGE_STRING << std::endl << "Compiled " << __TIME__ " " __DATE__ << std::endl - << "Send requests, patches, and bug reports to <" + << "Send patches and bug reports to <" PACKAGE_BUGREPORT << ">." << std::endl << std::endl; int status = 0;