#include <Moof/Log.hh>
#include <Moof/Math.hh>
#include <Moof/OpenGL.hh>
+#include <Moof/Video.hh>
#include "GameLayer.hh"
GameLayer::GameLayer() :
- music("NightFusionIntro"),
+ music("BeatTheCube"),
punchSound("Thump")
{
music.setLooping(true);
music.enqueue("NightFusionLoop");
music.stream();
- heroine = Character::alloc("RobotTrooper");
- heroine->getAnimation().startSequence("Run");
+ heroine = Heroine::alloc();
+ heroine->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);
- Mf::Scalar b[2] = {1.0, 0.0};
- fadeIn.init(b, 1.0);
+ scene = 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();
+ hud = Hud::alloc();
}
void GameLayer::pushed(Mf::Engine& engine)
{
- hud = Hud::alloc();
- engine.pushLayer(hud);
+ engine.push(hud);
}
void GameLayer::update(Mf::Scalar t, Mf::Scalar dt)
{
- //dt *= 0.7;
-
- fadeIn.update(dt);
camera.update(t, dt);
heroine->update(t, dt);
- // reinsert heroine
- heroine->treeNode = octree->reinsert(heroine, heroine->treeNode);
- octree->print(heroine->treeNode);
-
+ scene->checkForCollision(*heroine);
+
//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);
-
- interp.update(dt);
+ //Mf::Vector3 heroinePosition = Mf::promote(heroine->current.position);
+ //Mf::Sound::setListenerPosition(heroinePosition);
+
+ interp.update(t, dt);
hud->setBar1Progress(interp.getState(dt));
hud->setBar2Progress(1.0 - interp.getState(dt));
}
void GameLayer::draw(Mf::Scalar alpha) const
{
- glMatrixMode(GL_MODELVIEW);
- glLoadMatrix(camera.getModelviewMatrix().data());
+ camera.uploadToGL();
// DRAW THE SCENE
Mf::Texture::resetBind();
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);
+ scene->drawIfVisible(alpha, camera.getFrustum());
- glMatrixMode(GL_PROJECTION);
- glPopMatrix();
- glMatrixMode(GL_MODELVIEW);
- glPopMatrix();
+ heroine->draw(alpha);
}
bool GameLayer::handleEvent(const Mf::Event& event)
case SDL_KEYDOWN:
if (event.key.keysym.sym == SDLK_SPACE)
{
- heroine->getAnimation().startSequence("Punch");
+ heroine->animation.startSequence("Flattened");
Mf::logInfo("thump!");
punchSound.play();
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 heroine->handleEvent(event);
case SDL_MOUSEMOTION:
case SDL_MOUSEBUTTONDOWN:
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;
}
}
+void GameLayer::setProjection()
+{
+ Mf::Video& video = Mf::Engine::getInstance().getVideo();
+ setProjection(video.getWidth(), video.getHeight());
+}
+
+void GameLayer::setProjection(Mf::Scalar width, Mf::Scalar height)
+{
+ camera.setProjection(cml::rad(60.0), width / height, 32.0, 2500.0);
+}
+
+
/** vim: set ts=4 sw=4 tw=80: *************************************************/