QLocale::Country QTimeZonePrivate::country() const { // Default fall-back mode, use the zoneTable to find Region of known Zones for (int i = 0; i < zoneDataTableSize; ++i) { const QZoneData *data = zoneData(i); if (ianaId(data).split(' ').contains(m_id)) return (QLocale::Country)data->country; } return QLocale::AnyCountry; }
void MapGeometryLoader::LoadDoors() { // // Load the door data // std::string filename = m_meshPath + "\\MQ2Nav\\" + m_zoneName + "_doors.json"; boost::system::error_code ec; if (!boost::filesystem::is_regular_file(filename, ec)) return; std::stringstream ss; std::ifstream ifs; ifs.open(filename.c_str()); ss << ifs.rdbuf(); ifs.close(); rapidjson::Document document; if (document.Parse<0>(ss.str().c_str()).HasParseError()) return; if (!document.IsArray()) return; std::vector<DoorParams> doors; m_hasDynamicObjects = true; for (auto iter = document.Begin(); iter != document.End(); ++iter) { if (!iter->IsObject()) return; DoorParams params; params.id = (*iter)["ID"].GetInt(); params.name = (*iter)["Name"].GetString(); params.type = (*iter)["Type"].GetInt(); params.scale = (*iter)["Scale"].GetDouble(); // only add stationary objects if (!IsSwitchStationary(params.type)) continue; const auto& t = (*iter)["Transform"]; for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { params.transform[i][j] = t[i][j].GetDouble(); } } doors.push_back(params); } if (doors.empty()) { m_doorsLoaded = true; return; } // // Load the models for that door data // ZoneData zoneData(m_eqPath, m_zoneName); if (!zoneData.IsLoaded()) return; uint32_t counter = m_vertCount; auto AddTriangle = [&](const glm::mat4x4& matrix, const glm::vec3& v1_, const glm::vec3& v2_, const glm::vec3& v3_) { glm::vec4 v1 = matrix * glm::vec4(v1_.x, v1_.y, v1_.z, 1.0); glm::vec4 v2 = matrix * glm::vec4(v2_.x, v2_.y, v2_.z, 1.0); glm::vec4 v3 = matrix * glm::vec4(v3_.x, v3_.y, v3_.z, 1.0); addVertex(v1.y, v1.z, v1.x); addVertex(v2.y, v2.z, v2.x); addVertex(v3.y, v3.z, v3.x); addTriangle(counter, counter + 1, counter + 2); counter += 3; }; // generic lambda for both old and new model types auto addModel = [&](const glm::mat4x4& matrix, float scale, auto modelPtr) { auto verts = modelPtr->GetVertices(); auto polys = modelPtr->GetPolygons(); for (auto iter = polys.begin(); iter != polys.end(); ++iter) { if (iter->flags & 0x11) continue; auto& polygon = *iter; AddTriangle(matrix, scale * verts[polygon.verts[0]].pos, scale * verts[polygon.verts[1]].pos, scale * verts[polygon.verts[2]].pos); } ++m_dynamicObjects; }; for (auto iter = doors.begin(); iter != doors.end(); ++iter) { auto& params = *iter; if (std::shared_ptr<ModelInfo> mi = zoneData.GetModelInfo(params.name)) { glm::mat4x4 matrix = params.transform; if (mi->oldModel) { addModel(matrix, params.scale, mi->oldModel); } if (mi->newModel) { addModel(matrix, params.scale, mi->newModel); } } else { eqLogMessage(LogTrace, "Couldn't find model for %s.", params.name.c_str()); } } }