X-Git-Url: https://git.dogcows.com/gitweb?p=chaz%2Fyoink;a=blobdiff_plain;f=src%2FMain.cc;fp=src%2FMainLayer.cc;h=2cd0f0c08aaf87f62fe3a2ba99c17684a0309a60;hp=ad2dbbc5f22d9a607f69327783032eee338c4236;hb=987971a961454d97082c6448fdc0bbeb540281bb;hpb=be9ebc1104574e5e81e19c5caba0c23b54df826d diff --git a/src/MainLayer.cc b/src/Main.cc similarity index 75% rename from src/MainLayer.cc rename to src/Main.cc index ad2dbbc..2cd0f0c 100644 --- a/src/MainLayer.cc +++ b/src/Main.cc @@ -41,7 +41,7 @@ #include "ErrorHandler.hh" #include "GameLayer.hh" -#include "MainLayer.hh" +#include "Main.hh" #include "TitleLayer.hh" #if HAVE_CONFIG_H @@ -50,14 +50,14 @@ #include "version.h" -MainLayer::MainLayer() +Main::Main() { - mDispatchHandler = Mf::engine.addHandler("video.newcontext", - boost::bind(&MainLayer::contextRecreated, this)); + mDispatchHandler = Mf::core.addHandler("video.newcontext", + boost::bind(&Main::contextRecreated)); setupGL(); } -void MainLayer::pushedOntoEngine() +void Main::addedToCore() { //Mf::Scalar coeff[] = {0.0, 1.0}; //Mf::Lerp interp(coeff, 0.25); @@ -65,23 +65,23 @@ void MainLayer::pushedOntoEngine() //Mf::LayerP gameLayer = GameLayer::alloc(); //Mf::Transition::Ptr transition = //Mf::Transition::alloc(gameLayer, Mf::LayerP(), interp); - //engine->push(transition); - //engine->push(GameLayer::alloc()); - Mf::engine.push(TitleLayer::alloc()); + //core.push(transition); + //core.push(GameLayer::alloc()); + Mf::core.push(TitleLayer::alloc()); } -void MainLayer::update(Mf::Scalar t, Mf::Scalar dt) +void Main::update(Mf::Scalar t, Mf::Scalar dt) { - if (Mf::engine.getSize() == 1) + if (Mf::core.getSize() == 1) { // this is the only layer left on the stack - //Mf::engine.push(TitleLayer::alloc()); - Mf::engine.clear(); + //Mf::core.push(TitleLayer::alloc()); + Mf::core.clear(); } } -void MainLayer::draw(Mf::Scalar alpha) const +void Main::draw(Mf::Scalar alpha) const { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); @@ -92,24 +92,23 @@ void MainLayer::draw(Mf::Scalar alpha) const glLoadIdentity(); } -bool MainLayer::handleEvent(const Mf::Event& event) +bool Main::handleEvent(const Mf::Event& event) { switch (event.type) { case SDL_KEYUP: if (event.key.keysym.sym == SDLK_ESCAPE) { - Mf::engine.clear(); + Mf::core.clear(); } else if (event.key.keysym.sym == SDLK_f) { - Mf::engine.getVideo()->toggleFull(); + Mf::video->toggleFull(); } else if (event.key.keysym.sym == SDLK_l) { - Mf::VideoP video = Mf::engine.getVideo(); - video->toggleCursorGrab(); - video->toggleCursorVisible(); + Mf::video->toggleCursorGrab(); + Mf::video->toggleCursorVisible(); } break; @@ -118,7 +117,7 @@ bool MainLayer::handleEvent(const Mf::Event& event) break; case SDL_QUIT: - Mf::engine.clear(); + Mf::core.clear(); break; } @@ -126,7 +125,52 @@ bool MainLayer::handleEvent(const Mf::Event& event) } -void MainLayer::setupGL() +std::string Main::getSearchPath() +{ + // Add search paths; they should be searched in this order: + // 1. YOINK_DATADIR (environment) + // 2. YOINK_DATADIR (configure) + + std::string path; + + char* dataDir = getenv("YOINK_DATADIR"); + if (dataDir) + { + path += dataDir; + path += ":"; + } + path += YOINK_DATADIR; + + return path; +} + +std::string Main::getConfigPath() +{ + // Build the list of config files to search for, in this order: + // 1. YOINK_DATADIR/yoinkrc + // 2. /etc/yoinkrc (not for Windows) + // 3. $HOME/.yoinkrc + // 4. YOINKRC (environment) + + std::string path = Mf::Resource::getPath("yoinkrc"); + +#if !defined(_WIN32) && !defined(__WIN32__) + path += ":/etc/yoinkrc"; +#endif + path += ":$HOME/.yoinkrc"; + + char* configFile = getenv("YOINKRC"); + if (configFile) + { + path += ":"; + path += configFile; + } + + return path; +} + + +void Main::setupGL() { glEnable(GL_TEXTURE_2D); glEnable(GL_DEPTH_TEST); @@ -144,14 +188,14 @@ void MainLayer::setupGL() //glMatrixMode(GL_PROJECTION); //glLoadIdentity(); - //Mf::Scalar ratio = Mf::engine.getVideo()->getWidth() / - //Mf::engine.getVideo()->getHeight(); + //Mf::Scalar ratio = Mf::core.getVideo()->getWidth() / + //Mf::core.getVideo()->getHeight(); //gluPerspective(60.0, ratio, 1.0, 250.0); //glMatrixMode(GL_MODELVIEW); } -void MainLayer::contextRecreated() +void Main::contextRecreated() { // 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 @@ -160,7 +204,7 @@ void MainLayer::contextRecreated() -void printUsage() +void Main::printUsage() { std::cout << "Usage: "PACKAGE" [-h|--help] [-i|--info] [OPTION=VALUE]..." << std::endl @@ -175,13 +219,13 @@ void printUsage() << " 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 + << " framerate=num" << std::endl + << " the target number of frames per second" << std::endl << std::endl << "See documentation for more options." << std::endl; } -void printInfo(int argc, char* argv[]) +void Main::printInfo(int argc, char* argv[]) { std::string assets; std::string datadir; @@ -241,12 +285,20 @@ void printInfo(int argc, char* argv[]) << "YOINK_DATADIR: " << datadir << std::endl; } + +void hello() +{ + 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; +} + void goodbye() { std::cout << std::endl << "Goodbye..." << std::endl << std::endl; } - int main(int argc, char* argv[]) { if (argc > 1) @@ -254,91 +306,33 @@ int main(int argc, char* argv[]) std::string arg(argv[1]); if (arg == "-h" || arg == "--help") { - printUsage(); + Main::printUsage(); return 0; } else if (arg == "-i" || arg == "--info") { - printInfo(argc, argv); + Main::printInfo(argc, argv); 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; - + hello(); atexit(goodbye); + Mf::Resource::addSearchPaths(Main::getSearchPath()); - // make sure the engine started up okay - const Mf::Error& error = Mf::engine.getError(); - if (error.isError()) - { - Mf::ModalDialog dialog; - dialog.title = PACKAGE_STRING; - dialog.text1 = "Uh oh!"; - dialog.text2 = getErrorString(error); - dialog.type = Mf::ModalDialog::CRITICAL; - dialog.run(); - - // openal errors are not fatal - if (error.code() != Mf::Error::OPENAL_INIT) return 1; - } - - - // Add search paths; they should be searched in this order: - // 1. YOINK_DATADIR (environment) - // 2. YOINK_DATADIR (configure) - - char* dataDir = getenv("YOINK_DATADIR"); - if (dataDir) - { - Mf::Resource::addSearchPath(dataDir); - } - - Mf::Resource::addSearchPath(YOINK_DATADIR); - - - // Build the list of config files to search for, in this order: - // 1. YOINK_DATADIR/yoinkrc - // 2. /etc/yoinkrc (not for Windows) - // 3. $HOME/.yoinkrc - // 4. YOINKRC (environment) - - std::string configFiles = Mf::Resource::getPath("yoinkrc"); -#if !defined(_WIN32) && !defined(__WIN32__) - configFiles += ":/etc/yoinkrc"; -#endif - configFiles += ":$HOME/.yoinkrc"; - - char* configFile = getenv("YOINKRC"); - if (configFile) - { - configFiles += ":"; - configFiles += configFile; - } - - Mf::Settings& settings = Mf::Settings::getInstance(); - settings.loadFromFile(configFiles); - settings.parseArgs(argc, argv); + Mf::settings.loadFromFiles(Main::getConfigPath()); + Mf::settings.parseArgs(argc, argv); Mf::Log::Level logLevel; - if (settings.get("loglevel", logLevel)) Mf::Log::setLevel(logLevel); - - Mf::engine.initWithSettings(settings); - - std::string iconFile = Mf::Resource::getPath(PACKAGE".png"); - + if (Mf::settings.get("loglevel", logLevel)) Mf::Log::setLevel(logLevel); try { - Mf::engine.setVideo(Mf::Video::alloc(PACKAGE_STRING, iconFile)); - Mf::engine.push(MainLayer::alloc()); - - Mf::engine.run(); + Mf::Video video(PACKAGE_STRING, Mf::Resource::getPath(PACKAGE".png")); + MainP app = Main::alloc(); + Mf::core.push(app); + Mf::core.run(); } catch (const Mf::Error& error) {