void EntityFactory::LoadItems(const char* filename) { TiXmlDocument doc; if (!doc.LoadFile(filename)) { DIE("can't open items definition %s\n%s", filename, doc.ErrorDesc()); } TiXmlHandle handle(&doc); TiXmlElement* elem = handle.FirstChildElement().FirstChildElement().Element(); const char* name; while (elem != NULL) { QueryPtr(elem, "name", name); Item::Type item_type = Item::StringToType(name); ItemPattern item; QueryStr(elem, "label", item.label); QueryInt(elem, "x", item.x); QueryInt(elem, "y", item.y); QueryInt(elem, "w", item.w); QueryInt(elem, "h", item.h); items_[Item::StringToType(name)] = item; elem = elem->NextSiblingElement(); } }
db::RecordsetPtr Query::Execute() { if (!m_restrictions.empty()) assert(m_root != 0); m_regexes.clear(); for (unsigned int i=0; i<m_restrictions.size(); ++i) { if (m_restrictions[i].rt == db::LIKE) { TRACE << i << " compiling '" << m_restrictions[i].sval << "'\n"; m_regexes[i] = boost::regex(m_restrictions[i].sval, boost::regex::icase); } } if (!m_collateby.empty()) { unsigned int field = *m_collateby.begin(); if ((m_db->m_fields[field].flags & FIELD_INDEXED) == 0) { TRACE << "Can't collate on unindexed field " << field << "\n"; return db::RecordsetPtr(); } if (m_collateby.size() > 1) { TRACE << "Can't do multiple collate-by yet\n"; return db::RecordsetPtr(); } return db::RecordsetPtr(new CollateRecordset(m_db, *m_collateby.begin(), db::steam::QueryPtr(this))); } if (!m_orderby.empty()) { return db::RecordsetPtr(new OrderedRecordset(m_db, *m_orderby.begin())); } if (m_restrictions.size() == 1 && m_restrictions.begin()->rt == db::EQ) { unsigned int field = m_restrictions.begin()->which; if (m_db->m_fields[field].flags & FIELD_INDEXED) { if (m_restrictions.begin()->is_string) return db::RecordsetPtr(new IndexedRecordset(m_db, field, m_restrictions.begin()->sval)); return db::RecordsetPtr(new IndexedRecordset(m_db, field, m_restrictions.begin()->ival)); } // else fall through } return db::RecordsetPtr(new SimpleRecordset(m_db, QueryPtr(this))); }
QueryPtr OGLESRenderFactory::MakeConditionalRender() { if (glloader_GLES_VERSION_3_0() || glloader_GLES_EXT_occlusion_query_boolean()) { return MakeSharedPtr<OGLESConditionalRender>(); } else { return QueryPtr(); } }
QueryPtr D3D11RenderFactory::MakeConditionalRender() { D3D11RenderEngine& re = *checked_cast<D3D11RenderEngine*>(&Context::Instance().RenderFactoryInstance().RenderEngineInstance()); if (re.DeviceFeatureLevel() >= D3D_FEATURE_LEVEL_10_0) { return MakeSharedPtr<D3D11ConditionalRender>(); } else { return QueryPtr(); } }
QueryPtr OGLESRenderFactory::MakeOcclusionQuery() { return QueryPtr(); }
static void QueryStr(TiXmlElement* elem, const char* attribute, std::string& data) { const char* p = NULL; QueryPtr(elem, attribute, p); data = p; }