Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStijn Buys <ingar@osirion.org>2010-09-18 18:50:55 +0000
committerStijn Buys <ingar@osirion.org>2010-09-18 18:50:55 +0000
commit9c91a9767b570fdc3c3e19e1f452f9a8257f9999 (patch)
tree9ac10114a3378134ea19dac3d7f7639532c3bf5a /src/game/base/shipmodel.cc
parentfc4809e41bc5694231046eb2fd4c324c4daba13f (diff)
trade updates
Diffstat (limited to 'src/game/base/shipmodel.cc')
-rw-r--r--src/game/base/shipmodel.cc96
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