X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2FGameLayer.cc;h=a80946f6f5ff68fd393ad165734871eaa7ba8cf7;hb=bffc879fc8ee8167bb123310d39fad4e2f426ffd;hp=dfdadaa5f2c19fbe809193f9eebcc971569adfd6;hpb=892da43bf5796e7c5f593a6d0f53bd797a36bd3e;p=chaz%2Fyoink diff --git a/src/GameLayer.cc b/src/GameLayer.cc index dfdadaa..a80946f 100644 --- a/src/GameLayer.cc +++ b/src/GameLayer.cc @@ -30,6 +30,7 @@ #include #include #include +#include #include "GameLayer.hh" @@ -39,67 +40,56 @@ GameLayer::GameLayer() : - music("NightFusionIntro"), - punchSound("Thump") + mMusic("BeatTheCube"), + mPunchSound("Thump") { - music.setLooping(true); - music.enqueue("NightFusionLoop"); - music.stream(); + mMusic.setLooping(true); + mMusic.enqueue("NightFusionLoop"); + mMusic.stream(); - heroine = Character::alloc("RobotTrooper"); - heroine->getAnimation().startSequence("Run"); + mHeroine = Heroine::alloc(); + mHeroine->animation.startSequence("FlyDiagonallyUp"); Mf::Scalar a[6] = {0.0, 1.5, -0.5, 3.0, -2.0, 1.0}; - interp.init(a, 2.0, Mf::Interpolator::OSCILLATE); + mInterp.init(a, 2.0, Mf::Interpolator::OSCILLATE); - Mf::Scalar b[2] = {1.0, 0.0}; - fadeIn.init(b, 1.0); + mScene = Scene::alloc("Classic"); - octree = Mf::loadScene("Classic"); - heroine->treeNode = octree->insert(heroine); + setProjection(); - camera.setProjection(cml::rad(60.0), 1.33333, 32.0, 2500.0); - camera.uploadProjectionToGL(); + mHud = Hud::alloc(); } void GameLayer::pushed(Mf::Engine& engine) { - hud = Hud::alloc(); - engine.pushLayer(hud); + engine.push(mHud); } void GameLayer::update(Mf::Scalar t, Mf::Scalar dt) { - //dt *= 0.7; + mCamera.update(t, dt); + mHeroine->update(t, dt); - fadeIn.update(dt); - camera.update(t, dt); - heroine->update(t, dt); + mScene->checkForCollision(*mHeroine); - // reinsert heroine - heroine->treeNode = octree->reinsert(heroine, heroine->treeNode); - octree->print(heroine->treeNode); - - //camera.lookAt(heroine->getSphere().point); - camera.setPosition(Mf::Vector3(-heroine->current.position[0], - -heroine->current.position[1], -256)); - - Mf::Vector3 heroinePosition; - Mf::promoteVector(heroinePosition, heroine->current.position); - Mf::Sound::setListenerPosition(heroinePosition); + mCamera.setPosition(Mf::Vector3(-mHeroine->getState().position[0], + -mHeroine->getState().position[1], -256)); + //mCamera.lookAt(Mf::promote(mHeroine->getState().position)); - interp.update(dt); - hud->setBar1Progress(interp.getState(dt)); - hud->setBar2Progress(1.0 - interp.getState(dt)); + //Mf::Vector3 heroinePosition = Mf::promote(mHeroine->getState().position); + //Mf::Sound::setListenerPosition(heroinePosition); + + mInterp.update(t, dt); + mHud->setBar1Progress(mInterp.getState(dt)); + mHud->setBar2Progress(1.0 - mInterp.getState(dt)); } void GameLayer::draw(Mf::Scalar alpha) const { - glMatrixMode(GL_MODELVIEW); - glLoadMatrix(camera.getModelviewMatrix().data()); + mCamera.uploadToGL(alpha); // DRAW THE SCENE Mf::Texture::resetBind(); @@ -107,36 +97,9 @@ void GameLayer::draw(Mf::Scalar alpha) const glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_TEXTURE_COORD_ARRAY); - octree->drawIfVisible(alpha, camera.getFrustum()); - - //heroine->draw(alpha); - heroine->getAabb().draw(); - - // DRAW FADE - 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); + mScene->drawIfVisible(alpha, mCamera.getFrustum()); - glMatrixMode(GL_PROJECTION); - glPopMatrix(); - glMatrixMode(GL_MODELVIEW); - glPopMatrix(); + mHeroine->draw(alpha); } bool GameLayer::handleEvent(const Mf::Event& event) @@ -146,36 +109,32 @@ bool GameLayer::handleEvent(const Mf::Event& event) case SDL_KEYDOWN: if (event.key.keysym.sym == SDLK_SPACE) { - heroine->getAnimation().startSequence("Punch"); + mHeroine->animation.startSequence("Flattened"); Mf::logInfo("thump!"); - punchSound.play(); + mPunchSound.play(); return true; } else if (event.key.keysym.sym == SDLK_p) { - music.toggle(); + mMusic.toggle(); return true; } else if (event.key.keysym.sym == SDLK_y) { - Mf::Engine::getInstance().popLayer(); + Mf::Engine::getInstance().pop(); return true; } case SDL_KEYUP: - heroine->handleEvent(event); - break; + return mHeroine->handleEvent(event); case SDL_MOUSEMOTION: case SDL_MOUSEBUTTONDOWN: - camera.handleEvent(event); + mCamera.handleEvent(event); return true; case SDL_VIDEORESIZE: - glViewport(0, 0, event.resize.w, event.resize.h); - camera.setProjection(cml::rad(60.0), - double(event.resize.w) / double(event.resize.h), 32.0, 2500.0); - camera.uploadProjectionToGL(); + setProjection(Mf::Scalar(event.resize.w), Mf::Scalar(event.resize.h)); break; } @@ -183,5 +142,17 @@ bool GameLayer::handleEvent(const Mf::Event& event) } +void GameLayer::setProjection() +{ + Mf::Video& video = Mf::Engine::getInstance().getVideo(); + setProjection(video.getWidth(), video.getHeight()); +} + +void GameLayer::setProjection(Mf::Scalar width, Mf::Scalar height) +{ + mCamera.setProjection(cml::rad(60.0), width / height, 32.0, 2500.0); +} + + /** vim: set ts=4 sw=4 tw=80: *************************************************/