X-Git-Url: https://git.dogcows.com/gitweb?p=chaz%2Fyoink;a=blobdiff_plain;f=src%2FYoinkApp.cc;h=8690143d16b7356439849753bff0468ec8575a83;hp=9ea4b373d90ec15e2a53cb5eba8c03e8155cb359;hb=ca0f7bdfba63140dca0bd20586d31980f3938eb2;hpb=8ad81a8282ce6e9e488a453e6bcd05fbc09715dc diff --git a/src/YoinkApp.cc b/src/YoinkApp.cc index 9ea4b37..8690143 100644 --- a/src/YoinkApp.cc +++ b/src/YoinkApp.cc @@ -27,25 +27,21 @@ *******************************************************************************/ #include // getenv +#include #include #include -#include - #include #include #include #include #include +#include #include #include #include "YoinkApp.hh" -#include -#include -#include - #if HAVE_CONFIG_H #include "config.h" #endif @@ -55,34 +51,24 @@ static std::string configFiles() { std::string files; - char* configFile = getenv("YOINKRC"); + // look in the configured data directory last of all char* dataDir = getenv("YOINK_DATADIR"); - - if (configFile) - { - // if a config file from the environment variable is specified, we want - // to load it first so it has precedence - files += configFile; - files += ":"; - } + files += (dataDir ? dataDir : YOINK_DATADIR); + files += "/yoinkrc"; // add the colon-delimited paths from configure + files += ":"; files += YOINK_CONFIGFILES; - if (dataDir) + char* configFile = getenv("YOINKRC"); + if (configFile) { - // if another data directory is set in the environment, look for a - // config file there + // if a config file from the environment variable is specified, we want + // to load it first so it has precedence files += ":"; - files += dataDir; - files += "/yoinkrc"; + files += configFile; } - // look in the configured data directory last of all - files += ":"; - files += (dataDir ? dataDir : YOINK_DATADIR); - files += "/yoinkrc"; - return files; } @@ -106,43 +92,32 @@ static std::string iconFile() YoinkApp::YoinkApp(int argc, char* argv[]) : Mf::Engine(argc, argv, configFiles(), PACKAGE_STRING, iconFile()), - music("NightFusion"), + music("NightFusionIntro"), punchSound("RobotPunch") { Mf::dispatcher::addHandler("video.context_recreated", boost::bind(&YoinkApp::contextRecreated, this, _1), this); setupGL(); - Mf::Scalar fade[2] = {0.0, 1.0}; - musicFade.init(fade, 0.0); - music.play(); - - state = 0.0; + music.setLooping(true); + music.enqueue("NightFusionLoop"); + music.stream(); heroine = Character::alloc("RobotTrooper"); heroine->getAnimation().startSequence("Run"); - font = new TilemapFont; - - 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 a[6] = {0.0, 1.5, -0.5, 3.0, -2.0, 1.0}; + interp.init(a, 2.0, Mf::Interpolator::OSCILLATE); - Mf::Scalar coeff[2] = {1.0, 0.0}; - fadeIn.init(coeff, 0.1); + Mf::Scalar b[2] = {1.0, 0.0}; + fadeIn.init(b, 1.0); - testScene = Mf::Scene::alloc("Test"); - heroine->treeNode = testScene->getOctree()->insert(heroine); + octree = Mf::loadScene("Classic"); + heroine->treeNode = octree->insert(heroine); } YoinkApp::~YoinkApp() { - //delete heroine; - delete font; - Mf::dispatcher::removeHandler(this); } @@ -181,73 +156,59 @@ void YoinkApp::setupGL() 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. + // Whenever the context is destroyed and a new one created, it probably + // won't contain our state so we need to set that up again. setupGL(); } void YoinkApp::update(Mf::Scalar t, Mf::Scalar dt) { - //dt *= 0.2; + //dt *= 0.7; - musicFade.update(dt); - music.update(t, dt); - music.setGain(musicFade.getValue()); - fadeIn.update(dt); - camera.update(t, dt); - heroine->update(t, dt); - heroine->treeNode = testScene->getOctree()->reinsert(heroine, heroine->treeNode); - testScene->getOctree()->print(heroine->treeNode); + + // 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)); + 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()); + Mf::Vector3 heroinePosition; + Mf::promoteVector(heroinePosition, heroine->current.position); + Mf::Sound::setListenerPosition(heroinePosition); - prevstate = state; - state += dt; + interp.update(dt); + hud.setBar1Progress(interp.getState(dt)); + hud.setBar2Progress(1.0 - interp.getState(dt)); } void YoinkApp::draw(Mf::Scalar alpha) { - //Mf::Vector4 meh; - //meh.random(0.0, 1.0); - //static Mf::Vector4 c1(meh); - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - //Mf::Scalar drawstate = cml::lerp(prevstate, state, alpha); - //Mf::Scalar sinstate = std::sin(drawstate); - //Mf::Scalar cosstate = std::cos(drawstate); - - glMatrixMode(GL_MODELVIEW); - //glLoadIdentity(); - - //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); + glEnableClientState(GL_VERTEX_ARRAY); + glEnableClientState(GL_TEXTURE_COORD_ARRAY); + octree->drawIfVisible(alpha, camera.getFrustum()); //heroine->draw(alpha); heroine->getAabb().draw(); - hud.draw(); - + // DRAW FADE glEnable(GL_BLEND); glMatrixMode(GL_PROJECTION); glPushMatrix(); @@ -272,123 +233,6 @@ void YoinkApp::draw(Mf::Scalar alpha) glPopMatrix(); glMatrixMode(GL_MODELVIEW); glPopMatrix(); - - /* - glLoadIdentity(); - - someChar->getTilemap().bind(); - glColor3f(1.0, 1.0, 1.0); - - Mf::Tilemap::Index heroFrame = someChar->getAnimation().getFrame(); - - Mf::Scalar coords[8]; - someChar->getTilemap().getTileCoords(heroFrame, coords); - - glBegin(GL_QUADS); - glTexCoord2f(coords[0], coords[1]); - glVertex3f(-1.0, 0.0, 0.0); - glTexCoord2f(coords[2], coords[3]); - glVertex3f(0.0, 0.0, 0.0); - glTexCoord2f(coords[4], coords[5]); - glVertex3f(0.0, 1.0, 0.0); - glTexCoord2f(coords[6], coords[7]); - glVertex3f(-1.0, 1.0, 0.0); - glEnd(); - - - someChar->getTilemap().getTileCoords(heroFrame, coords, - Mf::Tilemap::REVERSE); - - glBegin(GL_QUADS); - glTexCoord2f(coords[0], coords[1]); - glVertex3f(0.0, 0.0, 0.0); - glTexCoord2f(coords[2], coords[3]); - glVertex3f(1.0, 0.0, 0.0); - glTexCoord2f(coords[4], coords[5]); - glVertex3f(1.0, 1.0, 0.0); - glTexCoord2f(coords[6], coords[7]); - glVertex3f(0.0, 1.0, 0.0); - glEnd(); - - glColor4f(1.0,0.0,0.0,0.5); - - glBindTexture(GL_TEXTURE_2D, 0); - glColor4v(c1.data()); - - glRectd(-cosstate, -sinstate, sinstate, cosstate); - glRectf(0.0f, 0.0f, sinstate, cosstate); - - font->bind(); - - font->getTileCoords('c', coords); - - glBegin(GL_QUADS); - glTexCoord2f(coords[0], coords[1]); - glVertex3f(-1.0, 0.0, 0.0); - glTexCoord2f(coords[2], coords[3]); - glVertex3f(0.0, 0.0, 0.0); - glTexCoord2f(coords[4], coords[5]); - glVertex3f(0.0, 1.0, 0.0); - glTexCoord2f(coords[6], coords[7]); - glVertex3f(-1.0, 1.0, 0.0); - glEnd(); - - font->getTileCoords('h', coords); - - glBegin(GL_QUADS); - glTexCoord2f(coords[0], coords[1]); - glVertex3f(0.0, 0.0, 0.0); - glTexCoord2f(coords[2], coords[3]); - glVertex3f(1.0, 0.0, 0.0); - glTexCoord2f(coords[4], coords[5]); - glVertex3f(1.0, 1.0, 0.0); - glTexCoord2f(coords[6], coords[7]); - glVertex3f(0.0, 1.0, 0.0); - glEnd(); - - font->getTileCoords('a', coords); - - glBegin(GL_QUADS); - glTexCoord2f(coords[0], coords[1]); - glVertex3f(-1.0, -1.0, 0.0); - glTexCoord2f(coords[2], coords[3]); - glVertex3f(0.0, -1.0, 0.0); - glTexCoord2f(coords[4], coords[5]); - glVertex3f(0.0, 0.0, 0.0); - glTexCoord2f(coords[6], coords[7]); - glVertex3f(-1.0, 0.0, 0.0); - glEnd(); - - font->getTileCoords('z', coords); - - glBegin(GL_QUADS); - glTexCoord2f(coords[0], coords[1]); - glVertex3(0.0, -1.0, 0.0); - glTexCoord2f(coords[2], coords[3]); - glVertex3(1.0, -1.0, 0.0); - glTexCoord2f(coords[4], coords[5]); - glVertex3(1.0, 0.0, 0.0); - glTexCoord2f(coords[6], coords[7]); - glVertex3(0.0, 0.0, 0.0); - glEnd(); - - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glDisable(GL_DEPTH_TEST); - - glBindTexture(GL_TEXTURE_2D, 0); - glColor4f(0.0f, 0.0f, 0.0f, 1.0f); - - glBegin(GL_LINES); - glVertex2f(0.0f, 0.0f); - glVertex2v(interp.getState(alpha).data()); - glEnd(); - - glColor4f(0.0f, 0.0f, 0.0f, fadeIn.getState(alpha)); - glRectf(-1.0f, -1.0f, 1.0f, 1.0f); - - glDisable(GL_BLEND); - glEnable(GL_DEPTH_TEST);*/ } void YoinkApp::handleEvent(const Mf::Event& event) @@ -412,11 +256,6 @@ void YoinkApp::handleEvent(const Mf::Event& event) punchSound.play(); break; } - else if (event.key.keysym.sym == SDLK_r) - { - testScene->refresh(); - break; - } else if (event.key.keysym.sym == SDLK_t) { Mf::dispatcher::dispatch("video.context_recreated"); @@ -424,7 +263,7 @@ void YoinkApp::handleEvent(const Mf::Event& event) } else if (event.key.keysym.sym == SDLK_p) { - music.togglePlayPause(); + music.toggle(); break; } else if (event.key.keysym.sym == SDLK_l) @@ -449,23 +288,56 @@ 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.setProjection(cml::rad(60.0), + double(event.resize.w) / double(event.resize.h), 32.0, 2500.0); camera.uploadProjectionToGL(); break; } } +void printUsage() +{ + std::cout << "Usage: "PACKAGE" [-h|--help] [OPTION=VALUE]..." << std::endl + << "The alien-smashing action game." << std::endl + << std::endl + << "Options:" << std::endl + << " -h, --help" << std::endl + << " show this help and exit" << std::endl + << " detail=1|2|3" << std::endl + << " the level of detail of game scenes" << std::endl + << " fullscreen=true|false" << std::endl + << " if true, uses the entire display" << std::endl + << " maxfps=num" << std::endl + << " the maximum number of frames per second" << std::endl + << std::endl + << "See documentation for more options." << std::endl; +} int main(int argc, char* argv[]) { + if (argc > 1 && + (strcmp(argv[1], "-h") == 0 || strcmp(argv[1], "--help") == 0)) + { + printUsage(); + return 0; + } + std::cout << std::endl << PACKAGE_STRING << std::endl << "Compiled " << __TIME__ " " __DATE__ << std::endl << "Send patches and bug reports to <" PACKAGE_BUGREPORT << ">." << std::endl << std::endl; -#if ! NDEBUG +#if YOINK_LOGLEVEL >= 4 Mf::setLogLevel(Mf::LOG_DEBUG); +#elif YOINK_LOGLEVEL >= 3 + Mf::setLogLevel(Mf::LOG_INFO); +#elif YOINK_LOGLEVEL >= 2 + Mf::setLogLevel(Mf::LOG_SCRIPT); +#elif YOINK_LOGLEVEL >= 1 + Mf::setLogLevel(Mf::LOG_ERROR); +#elif YOINK_LOGLEVEL + Mf::setLogLevel(Mf::LOG_NONE); #endif int status = 0; @@ -479,7 +351,8 @@ int main(int argc, char* argv[]) { Mf::logError("unhandled exception: <<%s>>", e.what()); Mf::logInfo("it's time to crash now :-("); - status = 1; + //status = 1; + throw e; } std::cout << std::endl << "Goodbye..." << std::endl << std::endl;