X-Git-Url: https://git.dogcows.com/gitweb?p=chaz%2Fyoink;a=blobdiff_plain;f=src%2FMain.cc;h=8b011638735b48061d32fdafcdbf8096095bbfaa;hp=adda533e40fcc595e8cf5784d3be4de6361a9bad;hb=574af38ed616d1adfa5e6ce35f67cda1f707f89d;hpb=1da520638918096276158ecdfaeebc14a3d70be7 diff --git a/src/Main.cc b/src/Main.cc index adda533..8b01163 100644 --- a/src/Main.cc +++ b/src/Main.cc @@ -1,59 +1,61 @@ -/*] Copyright (c) 2009-2010, Charles McGarvey [************************** +/*] Copyright (c) 2009-2011, Charles McGarvey [***************************** **] All rights reserved. * -* vi:ts=4 sw=4 tw=75 -* * Distributable under the terms and conditions of the 2-clause BSD license; * see the file COPYING for a complete text of the license. * -**************************************************************************/ +*****************************************************************************/ +#if HAVE_CONFIG_H #include "config.h" +#endif -#include // atexit +#include // atexit #include #include #include #include +#if PLATFORM_POSIX +#include +#else +inline int isatty(int dummy) { return 0; } +#endif + #include #include +#include #include #include #include #include #include +#include #include -#include "GameLayer.hh" #include "Main.hh" -#include "TitleLayer.hh" -#include "version.h" -Main::Main(moof::settings& settings, moof::video& video) : - moof::view(settings, video) +Main::Main(moof::settings& settings) : + moof::application(settings) { moof::dispatcher& dispatcher = moof::dispatcher::global(); - mNewContextDispatch = dispatcher.add_target("video.newcontext", - boost::bind(&Main::setupGL)); - setupGL(); + video_reloaded_ = dispatcher.add_target("video.newcontext", + boost::bind(&Main::setup_opengl)); + setup_opengl(); + +#if ENABLE_HOTLOADING + hotload_timer_.init(boost::bind(&moof::resource::reload_as_needed), + SCALAR(0.25), + moof::timer::repeat); +#endif } - void Main::update(moof::scalar t, moof::scalar dt) { - if (children().size() == 0) - { - //moof::log_warning("main view has no children"); - //stop(); - //return; - add_child(TitleLayer::alloc()); - } - - moof::view::update(t, dt); + yoink.update(t, dt); } void Main::draw(moof::scalar alpha) const @@ -66,41 +68,41 @@ void Main::draw(moof::scalar alpha) const glMatrixMode(GL_MODELVIEW); glLoadIdentity(); - moof::view::draw(alpha); + yoink.draw(alpha); } -bool Main::handle_event(const moof::event& event) +void Main::handle_event(const moof::event& event) { - if (moof::view::handle_event(event)) return true; + if (yoink.handle_event(event)) return; switch (event.type) { - case SDL_KEYUP: - if (event.key.keysym.sym == SDLK_f) - { - video().toggle_fullscreen(); - } - else if (event.key.keysym.sym == SDLK_l) - { - video().toggle_cursor_captured(); - video().toggle_cursor_visible(); - } - break; - - case SDL_VIDEORESIZE: - glViewport(0, 0, event.resize.w, event.resize.h); - break; - - case SDL_QUIT: + case SDL_KEYUP: + if (event.key.keysym.sym == SDLK_f) + { + moof::video::current()->toggle_fullscreen(); + } + else if (event.key.keysym.sym == SDLK_l) + { + moof::video::current()->toggle_cursor_captured(); + moof::video::current()->toggle_cursor_visible(); + } + else if (event.key.keysym.sym == SDLK_ESCAPE) + { stop(); - return true; - } + } + break; - return false; -} + case SDL_VIDEORESIZE: + glViewport(0, 0, event.resize.w, event.resize.h); + break; + case SDL_QUIT: + stop(); + } +} -std::string Main::getSearchPath() +std::string Main::search_paths() { // Add search paths; they should be searched in this order: // 1. YOINK_DATADIR (environment) @@ -114,11 +116,13 @@ std::string Main::getSearchPath() path += ":"; } path += YOINK_DATADIR; + path += ":"; + path += "data"; return path; } -std::string Main::getConfigPath() +std::string Main::config_paths() { // Build the list of config files to search for, in this order: // 1. YOINK_DATADIR/yoinkrc @@ -128,7 +132,7 @@ std::string Main::getConfigPath() std::string path = moof::resource::find_file("yoinkrc"); -#if !defined(_WIN32) +#if PLATFORM_POSIX path += ":/etc/yoinkrc"; #endif path += ":$HOME/.yoinkrc"; @@ -143,12 +147,13 @@ std::string Main::getConfigPath() return path; } - -void Main::setupGL() +void Main::setup_opengl() { glEnable(GL_TEXTURE_2D); glEnable(GL_DEPTH_TEST); + //glEnable(GL_CULL_FACE); + glEnable(GL_POINT_SMOOTH); glEnable(GL_LINE_SMOOTH); glEnable(GL_POLYGON_SMOOTH); glShadeModel(GL_SMOOTH); @@ -158,138 +163,86 @@ void Main::setupGL() glEnable(GL_ALPHA_TEST); glAlphaFunc(GL_GREATER, 0.0); - glClearColor(0.0, 0.0, 0.0, 1.0); + glClearColor(1.0, 0.0, 0.0, 1.0); - //glMatrixMode(GL_PROJECTION); - //glLoadIdentity(); - //moof::scalar ratio = moof::core.getVideo()->width() / - //moof::core.getVideo()->height(); - //gluPerspective(60.0, ratio, 1.0, 250.0); + //glEnable(GL_LIGHTING); + glEnable(GL_LIGHT0); - //glMatrixMode(GL_MODELVIEW); -} + glEnable(GL_COLOR_MATERIAL); + glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE); + float amb[] = {0.1f, 0.1f, 0.1f, 1.0f}; + float dif[] = {0.6f, 0.6f, 0.6f, 1.0f}; + //glLightModelfv(GL_LIGHT_MODEL_AMBIENT, light); + glLightfv(GL_LIGHT0, GL_AMBIENT, amb); + glLightfv(GL_LIGHT0, GL_DIFFUSE, dif); -void Main::printUsage() + float spec[] = {1.0f, 1.0f, 1.0f, 1.0f}; + glLightfv(GL_LIGHT0, GL_SPECULAR, spec); +} + +void Main::print_usage() { std::cout << "Usage: " - << PACKAGE" [-h|--help] [-i|--info] [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 - << " -i, --info" << std::endl - << " show version and build information" << 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 - << " framerate=num" << std::endl - << " number of frames to draw per second" << std::endl - << std::endl - << "See documentation for more options." << std::endl; + << PACKAGE" [-h|--help] [-i|--info] [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 + << " -i, --info" << std::endl + << " show version and build information" << 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 + << " framerate=num" << std::endl + << " number of frames to draw per second" << std::endl + << std::endl + << "See documentation for more options." << std::endl; } -void Main::printInfo(int argc, char* argv[]) +void Main::print_info(int argc, char* argv[]) { - stlplus::env_vector environment; - - std::string assets; - assets.assign(YOINK_DATADIR); - if (!stlplus::file_readable(assets)) assets += " (no access)"; - - std::string datadir = environment["YOINK_DATADIR"]; - if (!datadir.empty()) - { - if (!stlplus::folder_readable(datadir)) datadir += " (no access)"; - } - - std::string rc_file = environment["YOINKRC"]; - if (!rc_file.empty()) - { - if (!stlplus::file_readable(rc_file)) rc_file += " (no access)"; - } - - std::cout << " Executable: " << argv[0] << std::endl -#ifdef YOINK_GITHEAD - << " Commit: "YOINK_GITHEAD << std::endl -#endif - << " Version: "PACKAGE_VERSION << std::endl - << " Built: " << COMPILE_TIME << std::endl - << " Compiler: "COMPILER_STRING << std::endl - << " Assets: " << assets << std::endl - << "Build options: " -#ifndef HAVE_CLOCK_GETTIME - << "-" -#endif - << "clock_gettime " -#ifdef NDEBUG - << "-" -#endif - << "debug " -#ifndef USE_DOUBLE_PRECISION - << "-" +#if INCLUDE_CONFIG_FILE + extern char data_config_mk[]; + std::cout << data_config_mk; +#else + std::cout << std::endl << "Configuration not included." << std::endl; #endif - << "double-precision " -#ifndef USE_GTK - << "-" -#endif - << "gtk " -#ifndef USE_HOTLOADING - << "-" -#endif - << "hotloading " -#ifndef PROFILING_ENABLED - << "-" -#endif - << "profile " -#ifndef USE_QT4 - << "-" -#endif - << "qt4 " -#ifndef USE_THREADS - << "-" -#endif - << "threads" << std::endl - << " YOINKRC: " << rc_file << std::endl - << "YOINK_DATADIR: " << datadir << std::endl; } void hello() { + if (isatty(1) == 1) std::cout << "\033[94m"; 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; + << "Compiled " << __TIME__" "__DATE__ << std::endl + << "Send patches and bug reports to <"PACKAGE_BUGREPORT">." + << std::endl << moof::log::endl; } void goodbye() { - std::cout << std::endl << "Goodbye..." << std::endl << std::endl; + if (isatty(1) == 1) std::cout << "\033[94m"; + std::cout << std::endl << "Goodbye." << std::endl << moof::log::endl; } int main(int argc, char* argv[]) { - // FIXME: This is temporary. - moof::timer reloadTimer(boost::bind(&moof::resource::reload_as_needed), - SCALAR(2.0), - moof::timer::repeat); - if (argc > 1) { std::string arg(argv[1]); if (arg == "-h" || arg == "--help") { - Main::printUsage(); + Main::print_usage(); return 0; } else if (arg == "-i" || arg == "--info") { - Main::printInfo(argc, argv); + Main::print_info(argc, argv); return 0; } } @@ -297,9 +250,11 @@ int main(int argc, char* argv[]) hello(); atexit(goodbye); - moof::resource::add_search_paths(Main::getSearchPath()); + moof::backend backend; - moof::settings settings(argc, argv, Main::getConfigPath()); + moof::resource::set_search_paths(Main::search_paths()); + + moof::settings settings(argc, argv, Main::config_paths()); enum moof::log::level logLevel = moof::log::info; settings.get("loglevel", logLevel); @@ -307,26 +262,31 @@ int main(int argc, char* argv[]) try { - std::string iconPath(PACKAGE".png"); - iconPath = moof::resource::find_file(iconPath); - moof::image icon(iconPath); - icon.set_as_icon(); + moof::image_handle icon("yoink", "png"); + if (icon) icon->set_as_icon(); + else moof::log_error("no icon loaded"); + icon.unload(); class moof::video::attributes attributes(settings); moof::video video(PACKAGE_STRING, attributes); - Main mainView(settings, video); + video.show_fps(true); - mainView.run(); - return 0; + Main app(settings); + return app.run(); } catch (const std::exception& e) { moof::modal_dialog dialog(moof::modal_dialog::error, - PACKAGE_STRING, "Unhandled Exception", - e.what()); - + PACKAGE_STRING, "unhandled exception", + e.what()); + dialog.run(); + } + catch (const char* e) + { + moof::modal_dialog dialog(moof::modal_dialog::error, + PACKAGE_STRING, "unhandled exception", e); dialog.run(); - return 1; } + return 1; }