Action* Object::createAction(const std::string& identifier, bool is_default) { std::map<std::string, Action*>* actions; if (!m_basicProperty) { m_basicProperty = new BasicObjectProperty(); } if (!m_basicProperty->m_actions) { m_basicProperty->m_actions = new std::map<std::string, Action*>; } actions = m_basicProperty->m_actions; std::map<std::string, Action*>::const_iterator it = actions->begin(); for(; it != actions->end(); ++it) { if(identifier == it->second->getId()) { throw NameClash(identifier); } } Action* a = getAction(identifier, false); if (!a) { a = new Action(identifier); (*actions)[identifier] = a; if (is_default || (!m_basicProperty->m_defaultAction)) { m_basicProperty->m_defaultAction = a; } } return a; }
Map* Model::createMap(const std::string& identifier) { std::list<Map*>::const_iterator it = m_maps.begin(); for(; it != m_maps.end(); ++it) { if(identifier == (*it)->getId()) { throw NameClash(identifier); } } Map* map = new Map(identifier, m_renderbackend, m_renderers, &m_timeprovider); m_maps.push_back(map); return map; }
Layer* Map::createLayer(const std::string& identifier, CellGrid* grid) { std::list<Layer*>::const_iterator it = m_layers.begin(); for(; it != m_layers.end(); ++it) { if(identifier == (*it)->getId()) throw NameClash(identifier); } Layer* layer = new Layer(identifier, this, grid); m_layers.push_back(layer); m_changed = true; std::vector<MapChangeListener*>::iterator i = m_changelisteners.begin(); while (i != m_changelisteners.end()) { (*i)->onLayerCreate(this, layer); ++i; } return layer; }
Object* Model::createObject(const std::string& identifier, const std::string& name_space, Object* parent) { // Find or create namespace namespace_t* nspace = selectNamespace(name_space); if(!nspace) { m_namespaces.push_back(namespace_t(name_space,objectmap_t())); nspace = selectNamespace(name_space); } // Check for nameclashes objectmap_t::const_iterator it = nspace->second.find(identifier); if( it != nspace->second.end() ) { throw NameClash(identifier); } // Finally insert & create Object* object = new Object(identifier, name_space, parent); nspace->second[identifier] = object; return object; }
Camera* Map::addCamera(const std::string &id, Layer *layer, const Rect& viewport) { if (layer == NULL) { throw NotSupported("Must have valid layer for camera"); } if (getCamera(id)) { std::string errorStr = "Camera: " + id + " already exists"; throw NameClash(errorStr); } // create new camera and add to list of cameras Camera* camera = new Camera(id, layer, viewport, m_renderbackend); m_cameras.push_back(camera); std::vector<RendererBase*>::iterator iter = m_renderers.begin(); for ( ; iter != m_renderers.end(); ++iter) { camera->addRenderer((*iter)->clone()); } return camera; }
Action* Object::createAction(const std::string& identifier, bool is_default) { if (!m_actions) { m_actions = new std::map<std::string, Action*>; } std::map<std::string, Action*>::const_iterator it = m_actions->begin(); for(; it != m_actions->end(); ++it) { if(identifier == it->second->getId()) { throw NameClash(identifier); } } Action* a = getAction(identifier); if (!a) { a = new Action(identifier); (*m_actions)[identifier] = a; if (is_default || (!m_defaultaction)) { m_defaultaction = a; } } return a; }