From 190cede795ac4c7fcd6865a6c2083b5ce53a154a Mon Sep 17 00:00:00 2001 From: Stijn Buys Date: Sun, 1 Jun 2008 13:03:45 +0000 Subject: entity and shipmodel labels, fixes sort order of shipmodels --- src/game/shipmodel.cc | 36 +++++++++++++++++++++++++----------- 1 file changed, 25 insertions(+), 11 deletions(-) (limited to 'src/game/shipmodel.cc') 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::registry; +std::map 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::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; } } -- cgit v1.2.3