Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/game/base/game.cc')
-rw-r--r--src/game/base/game.cc87
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
-
-