/* game/game.cc This file is part of the Osirion project and is distributed under the terms of the GNU General Public License version 2 */ // project headers #include "sector.h" #include "ship.h" #include "star.h" #include "common/console.h" #include "common/inifile.h" #include "osirion.h" // C++ headers #include namespace game { Ship ship; Star star; bool initialized = false; std::string name; // name of the game std::string label; // label of the game std::string author; // author of the game // sectors in space std::vector sectors; // TODO datadir should by set by ./configure and read from config.h // FIXME win32 directory names void init() { using common::File; using common::IniFile; using common::Vector3f; conmesg << "Project::OSiRiON " << OSIRION_VERSION << std::endl; condebug << "Debug messages enabled" << std::endl; // initialize game data locations // TODO create game::homedir if it doesn't exist File::datadir = "./data/"; File::homedir = "~/.osirion/"; File::basedir = "base/"; File::moddir = ""; // read game.ini IniFile f; f.open("ini/game.ini"); while (f) { f.getline(); if (f.got_key()) { if (f.section() == "game") { // game::name if (f.got_key_string("name", name)); else // game::label if (f.got_key_string("label", label)); else // game::author if (f.got_key_string("author", author)); else // unknown value conwarn << f.name() << " unknown key '" << f.key() << "' at line " << f.line() << std::endl; } } else if (f.got_section("game")) { } else if (f.got_section()) { conwarn << f.name() << " unknown section '" << f.section() << "' at line " << f.line() << std::endl; } } f.close(); conmesg << "game.ini loaded " << name << " [" << label << "] by " << author << std::endl; // read world.ini std::string tmp; Sector *sector =0; f.open("ini/world.ini"); while (f) { f.getline(); if (f.got_key()) { if (f.section() == "world") { // world::name if (f.got_key_string("name", tmp)); else // world:label if (f.got_key_string("label", tmp)); else // unknown value conwarn << f.name() << " unknown key '" << f.key() << "' at line " << f.line() << std::endl; } else if (f.section() == "sector") { // sector::name if (f.got_key_string("name", tmp)) { sector->name = tmp; } else // sector:label if (f.got_key_string("label", tmp)) { sector->label = tmp; } else // unknown value conwarn << f.name() << " unknown key '" << f.key() << "' at line " << f.line() << std::endl; } } else if (f.got_section("world")) { condebug << "[world] section" << std::endl; } else if (f.got_section("sector")) { sector = new Sector(); sectors.push_back(sector); } else if (f.got_section()) { conwarn << f.name() << " unknown section '" << f.section() << "' at line " << f.line() << std::endl; } } f.close(); conmesg << "Load sectors" << std::endl; for (int i =0; i < sectors.size(); i++) conmesg << sectors[i]->label << " " << sectors[i]->name << std::endl; star.location = Vector3f(256.0f, 0.0f, 256.0f); ship.location = Vector3f(0,0,0); // all done, ready to run initialized = true; } void shutdown() { initialized = false; // delete every sector object in the sectors vector for (int i =0; i< sectors.size(); i++) { delete sectors[i]; sectors[i] = 0; } // clear the sectors vector sectors.clear(); } void update(float elapsed) { ship.update(elapsed); } }; // namespace game