Get the vector of browsers by reference instead of as a pointer

This commit is contained in:
Ylva Selling
2021-05-10 09:20:11 +02:00
parent 4126be2604
commit 3ef357f56e
4 changed files with 28 additions and 18 deletions

View File

@@ -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<ScreenSpaceSkyBrowser*>* SkyBrowserModule::getSkyBrowsers() {
return &browsers;
std::vector<ScreenSpaceSkyBrowser*>& SkyBrowserModule::getSkyBrowsers() {
return browsers;
}
void SkyBrowserModule::startRotation(glm::dvec2 coordsEnd) {

View File

@@ -54,7 +54,7 @@ public:
glm::vec2 getMousePositionInScreenSpaceCoords(glm::vec2& mousePos);
void addRenderable(ScreenSpaceRenderable* object);
WWTDataHandler* getWWTDataHandler();
std::vector<ScreenSpaceSkyBrowser*>* getSkyBrowsers();
std::vector<ScreenSpaceSkyBrowser*>& getSkyBrowsers();
void startRotation(glm::dvec2 coordsEnd);
void rotateCamera(double deltaTime);
void setSelectedBrowser(ScreenSpaceRenderable* ptr);

View File

@@ -37,7 +37,7 @@ namespace openspace::skybrowser::luascriptfunctions {
ghoul::lua::checkArgumentsAndThrow(L, 1, "lua::selectImage");
const int i = ghoul::lua::value<int>(L, 1);
SkyBrowserModule* module = global::moduleEngine->module<SkyBrowserModule>();
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<int>(L, 1);
SkyBrowserModule* module = global::moduleEngine->module<SkyBrowserModule>();
std::vector<ScreenSpaceSkyBrowser*>* browsers = module->getSkyBrowsers();
ScreenSpaceSkyTarget* target = (*browsers)[i]->getSkyTarget();
if (i < browsers->size()) {
ScreenSpaceSkyTarget* target = (*browsers)[i]->getSkyTarget();
std::vector<ScreenSpaceSkyBrowser*> 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<int>(L, 1);
SkyBrowserModule* module = global::moduleEngine->module<SkyBrowserModule>();
std::vector<ScreenSpaceSkyBrowser*>* browsers = module->getSkyBrowsers();
if (i < browsers->size()) {
ScreenSpaceSkyTarget* target = (*browsers)[i]->getSkyTarget();
std::vector<ScreenSpaceSkyBrowser*> 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<ScreenSpaceSkyBrowser*>* browsers = module->getSkyBrowsers();
std::vector<ScreenSpaceSkyBrowser*> 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<int>(L, 1);
SkyBrowserModule* module = global::moduleEngine->module<SkyBrowserModule>();
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<int>(L, 1);
SkyBrowserModule* module = global::moduleEngine->module<SkyBrowserModule>();
if (module->getSkyBrowsers()->size() < i) {
if (module->getSkyBrowsers().size() < i) {
module->setSelectedBrowser(i);
}
return 0;

View File

@@ -367,6 +367,10 @@ namespace openspace {
}
bool ScreenSpaceSkyTarget::animateFOV(float endFOV, float deltaTime) {
if (!_skyBrowser) {
ScreenSpaceSkyBrowser* browser = dynamic_cast<ScreenSpaceSkyBrowser*>(global::renderEngine->screenSpaceRenderable(_skyBrowserID.value()));
setBrowser(browser);
}
if (_skyBrowser) {
double distance = static_cast<double>(_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;
}