diff options
Diffstat (limited to 'src/game/base/game.cc')
-rw-r--r-- | src/game/base/game.cc | 87 |
1 files changed, 76 insertions, 11 deletions
diff --git a/src/game/base/game.cc b/src/game/base/game.cc index 7ec54b3..fa02857 100644 --- a/src/game/base/game.cc +++ b/src/game/base/game.cc @@ -16,6 +16,7 @@ #include "filesystem/inifile.h" #include "base/game.h" #include "base/collision.h" +#include "base/commodity.h" #include "base/navpoint.h" #include "base/jumppoint.h" #include "base/planet.h" @@ -336,6 +337,11 @@ Game::Game() : core::Module("Project::OSiRiON", true) Physics::init(); + if (!load_commodities()) { + abort(); + return; + } + if (!load_ships()) { abort(); return; @@ -814,6 +820,68 @@ bool Game::load_menus(core::Entity *entity, const std::string &menufilename) return true; } +// read commodities +bool Game::load_commodities() +{ + filesystem::IniFile commoditiesini; + commoditiesini.open("commodities"); + if (!commoditiesini.is_open()) { + con_error << "Could not open " << commoditiesini.name() << "!" << std::endl; + return false; + } + + con_print << "^BLoading commodities..." << std::endl; + + size_t count = 0; + + Commodity *commodity = 0; + std::string str; + + while (commoditiesini.getline()) { + if (commoditiesini.got_key()) { + + if (commoditiesini.section().compare("commodity") == 0) { + if (commoditiesini.got_key_string("label", str)) { + commodity->set_label(std::string("cargo/" + str)); + count++; + continue; + + } else if (commoditiesini.got_key_string("name", str)) { + con_debug << " " << str << std::endl; + commodity->set_name(str); + continue; + + } else if (commoditiesini.got_key_string("info", str)) { + commodity->add_text(str); + continue; + + } else if (commoditiesini.got_key_string("model", str)) { + commodity->set_modelname(str); + continue; + + } else { + commoditiesini.unkown_key(); + } + } + + } else if (commoditiesini.got_section()) { + + if (commoditiesini.got_section("commodity")) { + commodity = new Commodity(); + + } else if (commoditiesini.got_section()) { + commoditiesini.unknown_section(); + } + } + } + + // add commodity infos + con_debug << " " << commoditiesini.name() << " " << count << " commodities" << std::endl; + + commoditiesini.close(); + return true; +} + // read ship model specifications bool Game::load_ships() { @@ -827,6 +895,9 @@ bool Game::load_ships() return false; } + con_print << "^BLoading ships..." << std::endl; + + unsigned int type_id = 0; ShipModel *shipmodel = 0; std::string label; std::string infostr; @@ -872,7 +943,8 @@ bool Game::load_ships() } } else if (shipsini.got_section("ship")) { if (shipmodel && !ShipModel::find(shipmodel)) delete shipmodel; - shipmodel = new ShipModel(); + type_id++; + shipmodel = new ShipModel(type_id); if (!Default::shipmodel) Default::shipmodel = shipmodel; @@ -880,20 +952,15 @@ bool Game::load_ships() shipsini.unknown_section(); } } - shipsini.close(); if (shipmodel && !ShipModel::find(shipmodel)) delete shipmodel; // add shipmodel infos - for (ShipModel::iterator it = ShipModel::registry.begin(); it != ShipModel::registry.end(); it++) { - ShipModel *shipmodel = (*it).second; - core::Info *info = new core::Info("ship/" + shipmodel->label()); - shipmodel->generate_info(info); - core::Info::add(info); - } - + ShipModel::generate_info(); con_debug << " " << shipsini.name() << " " << ShipModel::registry.size() << " ship models" << std::endl; + shipsini.close(); + return true; } @@ -987,5 +1054,3 @@ void Game::player_disconnect(core::Player *player) } } // namespace game - - |