00001 // $Id: construo_main.cxx,v 1.22 2003/01/11 19:07:48 grumbel Exp $ 00002 // 00003 // Construo - A wire-frame construction game 00004 // Copyright (C) 2002 Ingo Ruhnke <grumbel@gmx.de> 00005 // 00006 // This program is free software; you can redistribute it and/or 00007 // modify it under the terms of the GNU General Public License 00008 // as published by the Free Software Foundation; either version 2 00009 // of the License, or (at your option) any later version. 00010 // 00011 // This program is distributed in the hope that it will be useful, 00012 // but WITHOUT ANY WARRANTY; without even the implied warranty of 00013 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00014 // GNU General Public License for more details. 00015 // 00016 // You should have received a copy of the GNU General Public License 00017 // along with this program; if not, write to the Free Software 00018 // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 00019 00020 #include <fstream> 00021 #include "construo.hxx" 00022 #include "particle.hxx" 00023 #include "config.h" 00024 #include "world.hxx" 00025 #include "construo_error.hxx" 00026 00027 #ifdef USE_X11_DISPLAY 00028 # include "x11_display.hxx" 00029 # include "unix_system.hxx" 00030 #else 00031 # ifdef USE_GLUT_DISPLAY 00032 # include "glut_display.hxx" 00033 # include "unix_system.hxx" 00034 # endif 00035 #endif 00036 00037 #include "controller.hxx" 00038 #include "command_line.hxx" 00039 #include "settings.hxx" 00040 #include "gui_manager.hxx" 00041 00042 #include "construo_main.hxx" 00043 00044 ConstruoMain* construo_main; 00045 Controller* controller; 00046 00047 ConstruoMain::ConstruoMain () 00048 { 00049 do_quit = false; 00050 } 00051 00052 ConstruoMain::~ConstruoMain () 00053 { 00054 } 00055 00056 char* 00057 ConstruoMain::get_title () 00058 { 00059 return "Construo"; 00060 } 00061 00062 void 00063 ConstruoMain::on_exit() 00064 { 00065 std::cout << "Calling on_exit()" << std::endl; 00066 00067 //if (!controller->has_been_run()) 00068 { 00069 controller->save_world("/user/laststate.construo"); 00070 } 00071 00072 std::cout << "\n\n Thank you for playing Construo!\n\n\n" 00073 << " New versions and more information can be found at:\n\n" 00074 << " * http://fs.fsf.org/construo/\n\n" 00075 << " Comments, critique, suggestions self build\n construction and patches can be send to:\n\n" 00076 << " * Ingo Ruhnke <grumbel@gmx.de>\n\n" << std::endl; 00077 } 00078 00079 int 00080 ConstruoMain::main (int argc, char* argv[]) // FIXME: pass an option class, instead command line arguments 00081 { 00082 CommandLine::parse(argc, argv); 00083 00084 try { 00085 #ifdef USE_X11_DISPLAY 00086 X11Display display (settings.screen_width, settings.screen_height, 00087 settings.fullscreen); 00088 #elif USE_GLUT_DISPLAY 00089 GlutDisplay display (settings.screen_width, settings.screen_height); 00090 #else 00091 # error "No display type defined" 00092 #endif 00093 UnixSystem system; 00094 00095 // Init the display, input systems 00096 graphic_context = &display; 00097 input_context = &display; 00098 system_context = &system; 00099 00100 std::cout << PACKAGE_STRING"\n" << std::endl; 00101 std::cout << "If you have throuble with programm startup, delete the file:\n\n" 00102 << " " << system_context->get_construo_rc_path() << "laststate.construo\n" << std::endl; 00103 00104 GUIManager* gui_manager = new GUIManager (); 00105 00106 if (!settings.startup_file.empty()) 00107 { 00108 controller = new Controller (settings.startup_file); 00109 } 00110 else 00111 { 00112 try 00113 { 00114 controller = new Controller ("/user/laststate.construo"); 00115 } 00116 catch (ConstruoError& err) 00117 { 00118 std::cout << "ConstruoMain: " << err.msg << std::endl; 00119 controller = new Controller (); 00120 } 00121 } 00122 00123 display.run(); 00124 00125 on_exit(); 00126 00127 delete gui_manager; 00128 00129 } catch (ConstruoError& err) { 00130 std::cout << "Error ocurred: " << err.msg << std::endl; 00131 return EXIT_FAILURE; 00132 } 00133 00134 return 0; 00135 } 00136 00138 // Real Main Function // 00140 int main (int argc, char** argv) 00141 { 00142 ConstruoMain app; 00143 construo_main = &app; 00144 return app.main (argc, argv); 00145 } 00146 00147 /* EOF */