// Get a named entity class, creating if necessary IEntityClassPtr EClassManager::findOrInsert(const std::string& name, bool has_brushes) { // Return an error if no name is given if (name.empty()) { return IEntityClassPtr(); } // Convert string to lowercase, for case-insensitive lookup std::string lName = boost::algorithm::to_lower_copy(name); // Find and return if exists Doom3EntityClassPtr eclass = findInternal(lName); if (eclass) { return eclass; } // Otherwise insert the new EntityClass //IEntityClassPtr eclass = eclass::Doom3EntityClass::create(lName, has_brushes); // greebo: Changed fallback behaviour when unknown entites are encountered to TRUE // so that brushes of unknown entites don't get lost (issue #240) eclass = Doom3EntityClass::create(lName, true); // Try to insert the class return insertUnique(eclass); }
void EClassManager::resolveInheritance() { // Resolve inheritance on the model classes for (Models::iterator i = _models.begin(); i != _models.end(); ++i) { resolveModelInheritance(i->first, i->second); } // Resolve inheritance for the entities. At this stage the classes // will have the name of their parent, but not an actual pointer to // it for (EntityClasses::iterator i = _entityClasses.begin(); i != _entityClasses.end(); ++i) { // Tell the class to resolve its own inheritance using the given // map as a source for parent lookup i->second->resolveInheritance(_entityClasses); // If the entity has a model path ("model" key), lookup the actual // model and apply its mesh and skin to this entity. if (i->second->getModelPath().size() > 0) { Models::iterator j = _models.find(i->second->getModelPath()); if (j != _models.end()) { i->second->setModelPath(j->second->mesh); i->second->setSkin(j->second->skin); } } } // greebo: Override the eclass colours of two special entityclasses Vector3 worlspawnColour = ColourSchemes().getColour("default_brush"); Vector3 lightColour = ColourSchemes().getColour("light_volumes"); Doom3EntityClassPtr light = findInternal("light"); if (light) { light->setColour(lightColour); } Doom3EntityClassPtr worldspawn = findInternal("worldspawn"); if (worldspawn) { worldspawn->setColour(worlspawnColour); } }
void HTTP2PriorityQueue::iterateBFS( const std::function<bool(HTTPCodec::StreamID, HTTPTransaction *, double)>& fn, const std::function<bool()>& stopFn, bool all) { Node::PendingList pendingNodes{{0, &root_, 1.0}}; Node::PendingList newPendingNodes; bool stop = false; updateEnqueuedWeight(); while (!stop && !stopFn() && !pendingNodes.empty()) { CHECK(newPendingNodes.empty()); while (!stop && !pendingNodes.empty()) { Node* node = findInternal(pendingNodes.front().id); if (node) { stop = node->visitBFS(pendingNodes.front().ratio, fn, all, newPendingNodes, false /* all children */); } pendingNodes.pop_front(); } std::swap(pendingNodes, newPendingNodes); } }