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/shipmodel.cc')
-rw-r--r--src/game/shipmodel.cc36
1 files changed, 25 insertions, 11 deletions
diff --git a/src/game/shipmodel.cc b/src/game/shipmodel.cc
index 8e97970..aa0c2c9 100644
--- a/src/game/shipmodel.cc
+++ b/src/game/shipmodel.cc
@@ -10,7 +10,7 @@
namespace game {
// the ship model registry
-std::list<ShipModel *> ShipModel::registry;
+std::map<std::string, ShipModel *> ShipModel::registry;
ShipModel::ShipModel()
{
@@ -19,7 +19,6 @@ ShipModel::ShipModel()
shipmodel_maxspeed = 3.0f;
shipmodel_turnspeed = 0.1f;
- add(this);
}
ShipModel::~ShipModel()
@@ -29,29 +28,44 @@ ShipModel::~ShipModel()
// clear the ship model registry
void ShipModel::clear()
{
- for (std::list< ShipModel *>::iterator smit=registry.begin(); smit != registry.end(); smit++) {
- delete (*smit);
+ for (iterator smit = registry.begin(); smit != registry.end(); smit++) {
+ delete (*smit).second;
}
registry.clear();
}
void ShipModel::list()
{
- for (std::list< ShipModel *>::iterator smit=registry.begin(); smit != registry.end(); smit++) {
+ for (iterator smit = registry.begin(); smit != registry.end(); smit++) {
con_print <<
- " " << (*smit)->modelname() <<
- " " << (*smit)->name() <<
- " accel " << (*smit)->acceleration() <<
- " max " << (*smit)->maxspeed() <<
- " turn " << (*smit)->turnspeed() << "\n";
+ " " << (*smit).second->label() <<
+ " " << (*smit).second->name() <<
+ " accel " << (*smit).second->acceleration() <<
+ " max " << (*smit).second->maxspeed() <<
+ " turn " << (*smit).second->turnspeed() << "\n";
}
con_print << registry.size() << " registered ship models\n";
}
+ShipModel *ShipModel::find(const std::string label)
+{
+ std::map<std::string, ShipModel *>::iterator it = registry.find(label);
+ if (it == registry.end())
+ return 0;
+ else
+ return (*it).second;
+}
+
// add a new ship model
void ShipModel::add(ShipModel *shipmodel)
{
- registry.push_back(shipmodel);
+ ShipModel *m = find(shipmodel->label());
+ if (m) {
+ con_warn << "Duplicate ship model " << shipmodel->label() << "!\n";
+ delete m;
+ }
+
+ registry[shipmodel->label()] = shipmodel;
}
}