示例#1
0
	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;
	}
示例#2
0
	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;
	}
示例#3
0
	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;
	}
示例#4
0
	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;
	}
示例#5
0
	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;
	}
示例#6
0
	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;
	}