diff --git a/modules/skybrowser/skybrowsermodule.cpp b/modules/skybrowser/skybrowsermodule.cpp index 955db4b4cb..2539c09524 100644 --- a/modules/skybrowser/skybrowsermodule.cpp +++ b/modules/skybrowser/skybrowsermodule.cpp @@ -312,7 +312,10 @@ SkyBrowserModule::SkyBrowserModule() return true; } else if (to_browser(_mouseOnObject) && button == MouseButton::Right) { - + // If you start dragging around on the browser, the target should unlock + if (to_browser(_mouseOnObject) && to_browser(_mouseOnObject)->getSkyTarget()) { + to_browser(_mouseOnObject)->getSkyTarget()->unlock(); + } // Change view (by moving target) within browser if right mouse click on browser startDragMousePos = _mousePosition; startDragObjectPos = to_browser(_mouseOnObject)->getSkyTarget()->getScreenSpacePosition(); @@ -403,8 +406,8 @@ WWTDataHandler* SkyBrowserModule::getWWTDataHandler() { return dataHandler; } -std::vector* SkyBrowserModule::getSkyBrowsers() { - return &browsers; +std::vector& SkyBrowserModule::getSkyBrowsers() { + return browsers; } void SkyBrowserModule::startRotation(glm::dvec2 coordsEnd) { diff --git a/modules/skybrowser/skybrowsermodule.h b/modules/skybrowser/skybrowsermodule.h index 5594fd9cf1..5017f8687a 100644 --- a/modules/skybrowser/skybrowsermodule.h +++ b/modules/skybrowser/skybrowsermodule.h @@ -54,7 +54,7 @@ public: glm::vec2 getMousePositionInScreenSpaceCoords(glm::vec2& mousePos); void addRenderable(ScreenSpaceRenderable* object); WWTDataHandler* getWWTDataHandler(); - std::vector* getSkyBrowsers(); + std::vector& getSkyBrowsers(); void startRotation(glm::dvec2 coordsEnd); void rotateCamera(double deltaTime); void setSelectedBrowser(ScreenSpaceRenderable* ptr); diff --git a/modules/skybrowser/skybrowsermodule_lua.inl b/modules/skybrowser/skybrowsermodule_lua.inl index 50312fa439..0161f55380 100644 --- a/modules/skybrowser/skybrowsermodule_lua.inl +++ b/modules/skybrowser/skybrowsermodule_lua.inl @@ -37,7 +37,7 @@ namespace openspace::skybrowser::luascriptfunctions { ghoul::lua::checkArgumentsAndThrow(L, 1, "lua::selectImage"); const int i = ghoul::lua::value(L, 1); SkyBrowserModule* module = global::moduleEngine->module(); - ScreenSpaceSkyBrowser* browser = (*module->getSkyBrowsers())[module->getSelectedBrowserIndex()]; + ScreenSpaceSkyBrowser* browser = module->getSkyBrowsers()[module->getSelectedBrowserIndex()]; const ImageData& resultImage = module->getWWTDataHandler()->getLoadedImages()[i]; // Load image collection, if it isn't loaded already @@ -106,10 +106,10 @@ namespace openspace::skybrowser::luascriptfunctions { ghoul::lua::checkArgumentsAndThrow(L, 1, "lua::lockTarget"); const int i = ghoul::lua::value(L, 1); SkyBrowserModule* module = global::moduleEngine->module(); - std::vector* browsers = module->getSkyBrowsers(); - ScreenSpaceSkyTarget* target = (*browsers)[i]->getSkyTarget(); - if (i < browsers->size()) { - ScreenSpaceSkyTarget* target = (*browsers)[i]->getSkyTarget(); + std::vector browsers = module->getSkyBrowsers(); + ScreenSpaceSkyTarget* target = browsers[i]->getSkyTarget(); + if (i < browsers.size()) { + ScreenSpaceSkyTarget* target = browsers[i]->getSkyTarget(); if (target) { target->lock(); } @@ -121,9 +121,9 @@ namespace openspace::skybrowser::luascriptfunctions { ghoul::lua::checkArgumentsAndThrow(L, 1, "lua::unlockTarget"); const int i = ghoul::lua::value(L, 1); SkyBrowserModule* module = global::moduleEngine->module(); - std::vector* browsers = module->getSkyBrowsers(); - if (i < browsers->size()) { - ScreenSpaceSkyTarget* target = (*browsers)[i]->getSkyTarget(); + std::vector browsers = module->getSkyBrowsers(); + if (i < browsers.size()) { + ScreenSpaceSkyTarget* target = browsers[i]->getSkyTarget(); if (target) { target->unlock(); } @@ -258,9 +258,9 @@ namespace openspace::skybrowser::luascriptfunctions { lua_settable(L, -3); // Pass data for all the browsers and the corresponding targets - std::vector* browsers = module->getSkyBrowsers(); + std::vector browsers = module->getSkyBrowsers(); - for (ScreenSpaceSkyBrowser* browser : *browsers) { + for (ScreenSpaceSkyBrowser* browser : browsers) { // Only add browsers that have an initialized target ScreenSpaceSkyTarget* target = browser->getSkyTarget(); if (target) { @@ -298,8 +298,8 @@ namespace openspace::skybrowser::luascriptfunctions { ghoul::lua::checkArgumentsAndThrow(L, 1, "lua::adjustCamera"); const int i = ghoul::lua::value(L, 1); SkyBrowserModule* module = global::moduleEngine->module(); - if (module->getSkyBrowsers()->size() > i) { - module->startRotation((*module->getSkyBrowsers())[i]->getSkyTarget()->getTargetDirectionCelestial()); + if (module->getSkyBrowsers().size() > i) { + module->startRotation(module->getSkyBrowsers()[i]->getSkyTarget()->getTargetDirectionCelestial()); } return 0; @@ -309,7 +309,7 @@ namespace openspace::skybrowser::luascriptfunctions { ghoul::lua::checkArgumentsAndThrow(L, 1, "lua::setSelectedBrowser"); const int i = ghoul::lua::value(L, 1); SkyBrowserModule* module = global::moduleEngine->module(); - if (module->getSkyBrowsers()->size() < i) { + if (module->getSkyBrowsers().size() < i) { module->setSelectedBrowser(i); } return 0; diff --git a/modules/skybrowser/src/screenspaceskytarget.cpp b/modules/skybrowser/src/screenspaceskytarget.cpp index 742190bb6d..573510677b 100644 --- a/modules/skybrowser/src/screenspaceskytarget.cpp +++ b/modules/skybrowser/src/screenspaceskytarget.cpp @@ -367,6 +367,10 @@ namespace openspace { } bool ScreenSpaceSkyTarget::animateFOV(float endFOV, float deltaTime) { + if (!_skyBrowser) { + ScreenSpaceSkyBrowser* browser = dynamic_cast(global::renderEngine->screenSpaceRenderable(_skyBrowserID.value())); + setBrowser(browser); + } if (_skyBrowser) { double distance = static_cast(_skyBrowser->_vfieldOfView.value()) - endFOV; // If distance is too large, keep animating @@ -377,7 +381,10 @@ namespace openspace { // Animation is finished return true; } - LINFO("Browser not connected to target!"); + else { + LINFO("Target can't connect to browser!"); + } + return true; }