void loadScene(const char* _scenePath, bool _setPositionFromScene) { LOG("Loading scene file: %s", _scenePath); auto sceneString = stringFromFile(setResourceRoot(_scenePath).c_str(), PathType::resource); bool setPositionFromCurrentView = bool(m_scene); auto scene = std::make_shared<Scene>(); if (m_view) { scene->view() = std::make_shared<View>(*m_view); } if (SceneLoader::loadScene(sceneString, *scene)) { m_scene = scene; m_scene->fontContext()->addFont("firasans", "medium", ""); if (setPositionFromCurrentView && !_setPositionFromScene) { m_scene->view()->setPosition(m_view->getPosition()); m_scene->view()->setZoom(m_view->getZoom()); } m_view = m_scene->view(); m_inputHandler->setView(m_view); m_tileManager->setDataSources(scene->dataSources()); setPixelScale(m_view->pixelScale()); m_tileWorker->setScene(scene); } }
void setScene(std::shared_ptr<Scene>& _scene) { { std::lock_guard<std::mutex> lock(m_sceneMutex); m_scene = _scene; } auto& camera = m_scene->camera(); m_view->setCameraType(camera.type); switch (camera.type) { case CameraType::perspective: m_view->setVanishingPoint(camera.vanishingPoint.x, camera.vanishingPoint.y); if (camera.fovStops) { m_view->setFieldOfViewStops(camera.fovStops); } else { m_view->setFieldOfView(camera.fieldOfView); } break; case CameraType::isometric: m_view->setObliqueAxis(camera.obliqueAxis.x, camera.obliqueAxis.y); break; case CameraType::flat: break; } if (m_scene->useScenePosition) { glm::dvec2 projPos = m_view->getMapProjection().LonLatToMeters(m_scene->startPosition); m_view->setPosition(projPos.x, projPos.y); m_view->setZoom(m_scene->startZoom); } m_inputHandler->setView(m_view); m_tileManager->setDataSources(_scene->dataSources()); m_tileWorker->setScene(_scene); setPixelScale(m_view->pixelScale()); bool animated = m_scene->animated() == Scene::animate::yes; if (m_scene->animated() == Scene::animate::none) { for (const auto& style : m_scene->styles()) { animated |= style->isAnimated(); } } if (animated != isContinuousRendering()) { setContinuousRendering(animated); } }