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>2009-11-13 22:25:09 +0000
committerStijn Buys <ingar@osirion.org>2009-11-13 22:25:09 +0000
commita993d31910b63a1f897e470842934e6ffefad32c (patch)
treefef52482d762acbbd35e97f382b60ff24ce5071f /src/game/base/shipmodel.cc
parent5ddb64795cc959916eeedbec8dc3f65c06f49698 (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.cc168
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);
}
}