diff options
author | Stijn Buys <ingar@osirion.org> | 2010-09-18 18:50:55 +0000 |
---|---|---|
committer | Stijn Buys <ingar@osirion.org> | 2010-09-18 18:50:55 +0000 |
commit | 9c91a9767b570fdc3c3e19e1f452f9a8257f9999 (patch) | |
tree | 9ac10114a3378134ea19dac3d7f7639532c3bf5a /src/game/base/shipmodel.cc | |
parent | fc4809e41bc5694231046eb2fd4c324c4daba13f (diff) |
trade updates
Diffstat (limited to 'src/game/base/shipmodel.cc')
-rw-r--r-- | src/game/base/shipmodel.cc | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/src/game/base/shipmodel.cc b/src/game/base/shipmodel.cc index 1dc8ba1..8710aad 100644 --- a/src/game/base/shipmodel.cc +++ b/src/game/base/shipmodel.cc @@ -16,6 +16,102 @@ namespace game core::InfoType *ShipModel::shipmodel_infotype = 0; +bool ShipModel::init() +{ + // initialize shipmodel InfoType + ShipModel::shipmodel_infotype = new core::InfoType("ship"); + + using math::Vector3f; + using math::Color; + + filesystem::IniFile shipsini; + shipsini.open("ships"); + if (!shipsini.is_open()) { + con_error << "Could not open " << shipsini.name() << "!" << std::endl; + return false; + } + + con_print << "^BLoading ships..." << std::endl; + + size_t count = 0; + ShipModel *shipmodel = 0; + std::string str; + long l; + float f; + bool b; + + while (shipsini.getline()) { + if (shipsini.got_key()) { + if (shipsini.section().compare("ship") == 0) { + if (shipsini.got_key_label("label", str)) { + shipmodel->set_label(str); + count++; + continue; + } else if (shipsini.got_key_string("name", str)) { + shipmodel->set_name(str); + continue; + } else if (shipsini.got_key_string("info", str)) { + shipmodel->add_text(str); + continue; + } else if (shipsini.got_key_string("model", str)) { + shipmodel->set_modelname(str); + continue; + } else if (shipsini.got_key_long("price", l)) { + shipmodel->set_price(l); + continue; + } else if (shipsini.got_key_float("cargo", f)) { + shipmodel->set_maxcargo(f); + continue; + } else if (shipsini.got_key_bool("jumpdrive", b)) { + shipmodel->set_jumpdrive(b); + continue; + } else if (shipsini.got_key_bool("dock", b)) { + shipmodel->set_dock(b); + continue; + } else if (shipsini.got_key_float("acceleration", f)) { + shipmodel->set_acceleration(f); + continue; + } else if (shipsini.got_key_float("maxspeed", f)) { + shipmodel->set_maxspeed(f); + continue; + } else if (shipsini.got_key_float("turnspeed", f)) { + math::clamp(f, 0.0f, 90.0f); + shipmodel->set_turnspeed(f); + continue; + } else { + shipsini.unkown_key(); + } + } + } else if (shipsini.got_section("ship")) { + // generate info for the last loaded ship model + if (shipmodel) { + shipmodel->generate_info(); + } + + // add a new shipmodel + shipmodel = new ShipModel(); + + if (!Default::shipmodel) { + Default::shipmodel = shipmodel; + } + + } else if (shipsini.got_section()) { + shipsini.unknown_section(); + } + } + + // generate info for the last loaded ship model + if (shipmodel) { + shipmodel->generate_info(); + } + + con_debug << " " << shipsini.name() << " " << count << " ship types" << std::endl; + + shipsini.close(); + + return true; +} + ShipModel::ShipModel() : core::Info(shipmodel_infotype) { //default specifications |