/* base/cargo.cc This file is part of the Osirion project and is distributed under the terms and conditions of the GNU General Public License version 2 */ #include #include #include "sys/sys.h" #include "filesystem/inifile.h" #include "auxiliary/functions.h" #include "core/func.h" #include "base/game.h" #include "base/cargo.h" namespace game { core::InfoType *Cargo::cargo_infotype = 0; void func_list_cargo(const std::string &args) { Cargo::list(); } // loads cargo types from ini file bool Cargo::init() { // initialize cargo InfoType cargo_infotype = new core::InfoType("cargo"); filesystem::IniFile cargoini; cargoini.open("ini/cargo"); if (!cargoini.is_open()) { con_error << "Could not open " << cargoini.name() << "!" << std::endl; return false; } con_print << "^BLoading cargo..." << std::endl; size_t count = 0; Cargo *cargo = 0; std::string str; long l; float f; while (cargoini.getline()) { if (cargoini.got_key()) { if (cargoini.section().compare("cargo") == 0) { if (cargoini.got_key_label("label", str)) { cargo->set_label(str); continue; } else if (cargoini.got_key_string("name", str)) { cargo->set_name(str); continue; } else if (cargoini.got_key_string("info", str)) { cargo->add_text(str); continue; } else if (cargoini.got_key_string("model", str)) { cargo->set_modelname(str); continue; } else if (cargoini.got_key_long("price", l)) { cargo->set_price(l); continue; } else if (cargoini.got_key_float("volume", f)) { cargo->set_volume(f); continue; } else { cargoini.unknown_key(); } } } else if (cargoini.got_section()) { if (cargoini.got_section("cargo")) { cargo = new Cargo(); count++; } else if (cargoini.got_section()) { cargoini.unknown_section(); } } } // add cargo infos con_debug << " " << cargoini.name() << " " << count << " cargo types" << std::endl; cargoini.close(); core::Func *func = core::Func::add("list_cargo", func_list_cargo); func->set_info("list available cargo types"); return true; } void Cargo::done() { core::Func::remove("list_cargo"); } void Cargo::list() { core::Info::list(cargo_infotype); } /* ---- class Cargo -------------------------------------------- */ Cargo::Cargo() : core::Info(cargo_infotype) { set_volume(1); } Cargo::~Cargo() { } Cargo *Cargo::find(const std::string & label) { if (!label.size()) { return 0; } return (Cargo *) core::Info::find(cargo_infotype, label); } } // namespace game