diff options
author | Stijn Buys <ingar@osirion.org> | 2009-11-13 22:25:09 +0000 |
---|---|---|
committer | Stijn Buys <ingar@osirion.org> | 2009-11-13 22:25:09 +0000 |
commit | a993d31910b63a1f897e470842934e6ffefad32c (patch) | |
tree | fef52482d762acbbd35e97f382b60ff24ce5071f /src/game/base/shipmodel.cc | |
parent | 5ddb64795cc959916eeedbec8dc3f65c06f49698 (diff) |
added core::InfoType, refactored game::ShipModel as core::Info subclass, introduced core::Label
Diffstat (limited to 'src/game/base/shipmodel.cc')
-rw-r--r-- | src/game/base/shipmodel.cc | 168 |
1 files changed, 41 insertions, 127 deletions
diff --git a/src/game/base/shipmodel.cc b/src/game/base/shipmodel.cc index fe1c88c..9bd7573 100644 --- a/src/game/base/shipmodel.cc +++ b/src/game/base/shipmodel.cc @@ -8,169 +8,83 @@ #include "auxiliary/functions.h" #include "base/shipmodel.h" +#include "base/game.h" #include "sys/sys.h" namespace game { -// the ship model registry -ShipModel::Registry ShipModel::registry; +core::InfoType *ShipModel::shipmodel_infotype = 0; -ShipModel::ShipModel(const unsigned int type_id) +ShipModel::ShipModel() { + set_type(shipmodel_infotype); + //default specifications shipmodel_acceleration = 1.0f; // thruster acceleration in game untits/second^2 shipmodel_maxspeed = 3.0f; // maximum thruster speed in game units/second shipmodel_turnspeed = 45.0f; // 45 degrees per second - shipmodel_price = 0; // the ship is for free by default shipmodel_maxcargo = 0; - shipmodel_jumpdrive = false; - shipmodel_type_id = type_id; + shipmodel_jumpdrive = false; // no jumpdrive capability } ShipModel::~ShipModel() -{} - - -// clear the ship model registry -void ShipModel::clear() -{ - for (iterator smit = registry.begin(); smit != registry.end(); smit++) { - delete(*smit).second; - } - registry.clear(); -} - -void ShipModel::print() { - con_print << "label: ^B" << label() << " ^Nname: ^B" << name() << std::endl; - con_print << " price: ^B" << price() << std::endl; - con_print << " acceleration: ^B" << acceleration() << std::endl; - con_print << " turnspeed: ^B" << turnspeed() << std::endl; - con_print << " max speed: ^B" << maxspeed() << std::endl; - con_print << " cargo: ^B" << maxcargo() << std::endl; } void ShipModel::generate_info() { - for (iterator it = registry.begin(); it != registry.end(); it++) { - ShipModel *shipmodel = (*it).second; - core::Info *info = new core::Info("ship/" + shipmodel->label()); - - info->clear_text(); - info->set_name(shipmodel->name()); - info->set_modelname(shipmodel->modelname()); - - // info text form ships.ini - for (core::Info::Text::iterator tit = shipmodel->shipmodel_infotext.begin(); - tit != shipmodel->shipmodel_infotext.end(); tit++) { - - info->add_text((*tit)); - } - - info->add_text(""); - info->add_text("^BSpecifications:^N"); - std::stringstream str; - str << "price: ^B" << shipmodel->price() << " ^Ncredits"; - info->add_text(str.str()); - str.str(""); - - str << "cargo hold: ^B" << 0.1f * shipmodel->maxcargo() << " ^Nmetric tonnes"; - info->add_text(str.str()); + clear_text(); + + add_text(""); + add_text("^B" + name() + " specifications:^N"); + std::stringstream str; + str << "price: ^B" << price() << " ^Ncredits"; + add_text(str.str()); + str.str(""); + + str << "cargo hold: ^B" << 0.1f * maxcargo() << " ^Nmetric tonnes"; + add_text(str.str()); + str.str(""); + + str << "top speed: ^B" << 100.0f * maxspeed() << " ^Nmps"; + add_text(str.str()); + str.str(""); + + str << "response: ^B" << turnspeed() << " ^Ndps"; + add_text(str.str()); + str.str(""); + + str << "acceleration: ^B" << acceleration() << " ^Nstandard"; + add_text(str.str()); + str.str(""); + + if (jumpdrive()) { + str << "hyperspace jump drive capable"; + add_text(str.str()); str.str(""); - - str << "top speed: ^B" << 100.0f * shipmodel->maxspeed() << " ^Nmps"; - info->add_text(str.str()); - str.str(""); - - str << "response: ^B" << shipmodel->turnspeed() << " ^Ndps"; - info->add_text(str.str()); - str.str(""); - - str << "acceleration: ^B" << shipmodel->acceleration() << " ^Nstandard"; - info->add_text(str.str()); - str.str(""); - - if (shipmodel->shipmodel_jumpdrive) { - str << "hyperspace jump drive capable"; - info->add_text(str.str()); - str.str(""); - } } } void ShipModel::list() { - for (iterator smit = registry.begin(); smit != registry.end(); smit++) { - con_print << std::setw(24) << (*smit).second->label() - << " ^B" << (*smit).second->name() << "\n"; - } - con_print << registry.size() << " registered ship models\n"; + core::Info::list_class(shipmodel_infotype); } -ShipModel *ShipModel::find(ShipModel *shipmodel) +ShipModel *ShipModel::find(const unsigned int id) { - for (iterator smit = registry.begin(); smit != registry.end(); smit++) { - if ((*smit).second == shipmodel) - return shipmodel; - } - - return 0; + return (ShipModel *) core::Info::find(shipmodel_infotype, id); } -ShipModel *ShipModel::find(const std::string label) +ShipModel *ShipModel::find(const std::string & label) { - if (!label.size()) - return 0; - - std::map<std::string, ShipModel *>::iterator it = registry.find(label); - if (it == registry.end()) - return 0; - else - return (*it).second; + return (ShipModel *) core::Info::find(shipmodel_infotype, label); } -ShipModel *ShipModel::search(const std::string searchname) +ShipModel *ShipModel::search(const std::string searchstr) { - if (!searchname.size()) - return 0; - - std::string strsearchkey(aux::lowercase(searchname)); - if (strsearchkey.size() < 3) { - return 0; - } - - std::string label; - std::string name; - - for (iterator smit = registry.begin(); smit != registry.end(); smit++) { - ShipModel *shipmodel = (*smit).second; - - label.assign(shipmodel->label()); - if (label.size() && (label.find(strsearchkey) != std::string::npos)) { - return shipmodel; - } - - name.assign(aux::lowercase(shipmodel->name())); - if (name.size() && (name.find(strsearchkey) != std::string::npos)) { - return shipmodel; - } - } - - return 0; -} - -// add a ship model -void ShipModel::add(ShipModel *shipmodel) -{ - ShipModel *m = find(shipmodel->label()); - if (m) { - con_warn << "Duplicate ship model " << shipmodel->label() << "!\n"; - delete m; - } - - registry[shipmodel->label()] = shipmodel; + return (ShipModel *) core::Info::search(shipmodel_infotype, searchstr); } } |