From a993d31910b63a1f897e470842934e6ffefad32c Mon Sep 17 00:00:00 2001 From: Stijn Buys Date: Fri, 13 Nov 2009 22:25:09 +0000 Subject: added core::InfoType, refactored game::ShipModel as core::Info subclass, introduced core::Label --- src/game/base/game.cc | 100 ++++++++++++++++++++++++++++---------------------- 1 file changed, 57 insertions(+), 43 deletions(-) (limited to 'src/game/base/game.cc') diff --git a/src/game/base/game.cc b/src/game/base/game.cc index fa02857..c20e42a 100644 --- a/src/game/base/game.cc +++ b/src/game/base/game.cc @@ -823,68 +823,73 @@ bool Game::load_menus(core::Entity *entity, const std::string &menufilename) // 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; + // initialize commodities InfoType + Commodity::commodity_infotype = new core::InfoType("cargo"); + + filesystem::IniFile cargoini; + cargoini.open("cargo"); + if (!cargoini.is_open()) { + con_error << "Could not open " << cargoini.name() << "!" << std::endl; return false; } - con_print << "^BLoading commodities..." << std::endl; + con_print << "^BLoading cargo..." << std::endl; size_t count = 0; Commodity *commodity = 0; std::string str; - while (commoditiesini.getline()) { - if (commoditiesini.got_key()) { + while (cargoini.getline()) { + if (cargoini.got_key()) { - if (commoditiesini.section().compare("commodity") == 0) { - if (commoditiesini.got_key_string("label", str)) { - commodity->set_label(std::string("cargo/" + str)); + if (cargoini.section().compare("cargo") == 0) { + if (cargoini.got_key_string("label", str)) { + commodity->set_label(std::string(str)); count++; continue; - } else if (commoditiesini.got_key_string("name", str)) { - con_debug << " " << str << std::endl; + } else if (cargoini.got_key_string("name", str)) { commodity->set_name(str); continue; - } else if (commoditiesini.got_key_string("info", str)) { + } else if (cargoini.got_key_string("info", str)) { commodity->add_text(str); continue; - } else if (commoditiesini.got_key_string("model", str)) { + } else if (cargoini.got_key_string("model", str)) { commodity->set_modelname(str); continue; } else { - commoditiesini.unkown_key(); + cargoini.unkown_key(); } } - } else if (commoditiesini.got_section()) { + } else if (cargoini.got_section()) { - if (commoditiesini.got_section("commodity")) { + if (cargoini.got_section("cargo")) { commodity = new Commodity(); - } else if (commoditiesini.got_section()) { - commoditiesini.unknown_section(); + } else if (cargoini.got_section()) { + cargoini.unknown_section(); } } } - // add commodity infos - con_debug << " " << commoditiesini.name() << " " << count << " commodities" << std::endl; + // add cargo infos + con_debug << " " << cargoini.name() << " " << count << " cargo types" << std::endl; - commoditiesini.close(); + cargoini.close(); return true; } // read ship model specifications bool Game::load_ships() { + // initialize shipmodel InfoType + ShipModel::shipmodel_infotype = new core::InfoType("ship"); + using math::Vector3f; using math::Color; @@ -896,28 +901,29 @@ bool Game::load_ships() } con_print << "^BLoading ships..." << std::endl; - - unsigned int type_id = 0; + + size_t count = 0; ShipModel *shipmodel = 0; - std::string label; - std::string infostr; + 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_string("label", label)) { - aux::to_label(label); - shipmodel->shipmodel_label.assign(label); - ShipModel::add(shipmodel); + if (shipsini.got_key_string("label", str)) { + shipmodel->set_label(str); + count++; continue; - } else if (shipsini.got_key_string("name", shipmodel->shipmodel_name)) { + } else if (shipsini.got_key_string("name", str)) { + shipmodel->set_name(str); continue; - } else if (shipsini.got_key_string("info", infostr)) { - shipmodel->shipmodel_infotext.push_back(infostr); + } else if (shipsini.got_key_string("info", str)) { + shipmodel->add_text(str); continue; - } else if (shipsini.got_key_string("model", shipmodel->shipmodel_modelname)) { + } 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); @@ -925,7 +931,8 @@ bool Game::load_ships() } else if (shipsini.got_key_float("cargo", f)) { shipmodel->set_maxcargo(f); continue; - } else if (shipsini.got_key_bool("jumpdrive", shipmodel->shipmodel_jumpdrive)) { + } else if (shipsini.got_key_bool("jumpdrive", b)) { + shipmodel->set_jumpdrive(b); continue; } else if (shipsini.got_key_float("acceleration", f)) { shipmodel->set_acceleration(f); @@ -942,22 +949,29 @@ bool Game::load_ships() } } } else if (shipsini.got_section("ship")) { - if (shipmodel && !ShipModel::find(shipmodel)) delete shipmodel; - type_id++; - shipmodel = new ShipModel(type_id); - if (!Default::shipmodel) + // 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(); } } - if (shipmodel && !ShipModel::find(shipmodel)) delete shipmodel; + // generate info for the last loaded ship model + if (shipmodel) { + shipmodel->generate_info(); + } - // add shipmodel infos - ShipModel::generate_info(); - con_debug << " " << shipsini.name() << " " << ShipModel::registry.size() << " ship models" << std::endl; + con_debug << " " << shipsini.name() << " " << count << " ship types" << std::endl; shipsini.close(); -- cgit v1.2.3