void MeteorMgr::update(double deltaTime) { #ifdef _MSC_BUILD return; #endif if (!flagShow) return; deltaTime*=1000; StelCore* core = StelApp::getInstance().getCore(); // step through and update all active meteors for (std::vector<Meteor*>::iterator iter = active.begin(); iter != active.end(); ++iter) { if (!(*iter)->update(deltaTime)) { // remove dead meteor // qDebug("Meteor \tdied\n"); delete *iter; active.erase(iter); iter--; // important! } } // only makes sense given lifetimes of meteors to draw when timeSpeed is realtime // otherwise high overhead of large numbers of meteors double tspeed = core->getTimeRate()*86400; // sky seconds per actual second if (tspeed<=0 || fabs(tspeed)>1.) { // don't start any more meteors return; } // if stellarium has been suspended, don't create huge number of meteors to // make up for lost time! if (deltaTime > 500) { deltaTime = 500; } // determine average meteors per frame needing to be created int mpf = (int)((double)ZHR*zhrToWsr*deltaTime/1000.0 + 0.5); if (mpf<1) mpf = 1; int mlaunch = 0; for (int i=0; i<mpf; ++i) { // start new meteor based on ZHR time probability double prob = ((double)rand())/RAND_MAX; if (ZHR>0 && prob<((double)ZHR*zhrToWsr*deltaTime/1000.0/(double)mpf) ) { Meteor *m = new Meteor(StelApp::getInstance().getCore(), maxVelocity); active.push_back(m); mlaunch++; } } // qDebug("mpf: %d\tm launched: %d\t(mps: %f)\t%d\n", mpf, mlaunch, ZHR*zhrToWsr, deltaTime); }
void StelGui::update() { StelCore* core = StelApp::getInstance().getCore(); if (core->getTimeRate()<-0.99*StelCore::JD_SECOND) { if (buttonTimeRewind->isChecked()==false) buttonTimeRewind->setChecked(true); } else { if (buttonTimeRewind->isChecked()==true) buttonTimeRewind->setChecked(false); } if (core->getTimeRate()>1.01*StelCore::JD_SECOND) { if (buttonTimeForward->isChecked()==false) { buttonTimeForward->setChecked(true); } } else { if (buttonTimeForward->isChecked()==true) buttonTimeForward->setChecked(false); } if (core->getTimeRate() == 0) { if (buttonTimeRealTimeSpeed->isChecked() != StelButton::ButtonStateNoChange) buttonTimeRealTimeSpeed->setChecked(StelButton::ButtonStateNoChange); } else if (core->getRealTimeSpeed()) { if (buttonTimeRealTimeSpeed->isChecked() != StelButton::ButtonStateOn) buttonTimeRealTimeSpeed->setChecked(StelButton::ButtonStateOn); } else if (buttonTimeRealTimeSpeed->isChecked() != StelButton::ButtonStateOff) { buttonTimeRealTimeSpeed->setChecked(StelButton::ButtonStateOff); } const bool isTimeNow=core->getIsTimeNow(); if (buttonTimeCurrent->isChecked()!=isTimeNow) { buttonTimeCurrent->setChecked(isTimeNow); } StelMovementMgr* mmgr = GETSTELMODULE(StelMovementMgr); const bool b = mmgr->getFlagTracking(); if (buttonGotoSelectedObject->isChecked()!=b) { buttonGotoSelectedObject->setChecked(b); } bool flag = GETSTELMODULE(StarMgr)->getFlagStars(); if (getGuiAction("actionShow_Stars")->isChecked() != flag) { getGuiAction("actionShow_Stars")->setChecked(flag); } flag = GETSTELMODULE(NebulaMgr)->getFlagHints(); if (getGuiAction("actionShow_Nebulas")->isChecked() != flag) getGuiAction("actionShow_Nebulas")->setChecked(flag); flag = GETSTELMODULE(StelSkyLayerMgr)->getFlagShow(); if (getGuiAction("actionShow_DSS")->isChecked() != flag) getGuiAction("actionShow_DSS")->setChecked(flag); flag = mmgr->getMountMode() != StelMovementMgr::MountAltAzimuthal; if (getGuiAction("actionSwitch_Equatorial_Mount")->isChecked() != flag) getGuiAction("actionSwitch_Equatorial_Mount")->setChecked(flag); SolarSystem* ssmgr = GETSTELMODULE(SolarSystem); flag = ssmgr->getFlagLabels(); if (getGuiAction("actionShow_Planets_Labels")->isChecked() != flag) getGuiAction("actionShow_Planets_Labels")->setChecked(flag); flag = ssmgr->getFlagOrbits(); if (getGuiAction("actionShow_Planets_Orbits")->isChecked() != flag) getGuiAction("actionShow_Planets_Orbits")->setChecked(flag); flag = ssmgr->getFlagTrails(); if (getGuiAction("actionShow_Planets_Trails")->isChecked() != flag) getGuiAction("actionShow_Planets_Trails")->setChecked(flag); flag = StelApp::getInstance().getVisionModeNight(); if (getGuiAction("actionShow_Night_Mode")->isChecked() != flag) getGuiAction("actionShow_Night_Mode")->setChecked(flag); flag = StelMainWindow::getInstance().isFullScreen(); if (getGuiAction("actionSet_Full_Screen_Global")->isChecked() != flag) getGuiAction("actionSet_Full_Screen_Global")->setChecked(flag); skyGui->infoPanel->setTextFromObjects(GETSTELMODULE(StelObjectMgr)->getSelectedObject()); // Check if the progressbar window changed, if yes update the whole view if (savedProgressBarSize!=skyGui->progressBarMgr->boundingRect().size()) { savedProgressBarSize=skyGui->progressBarMgr->boundingRect().size(); skyGui->updateBarsPos(); } dateTimeDialog->setDateTime(core->getJDay()); }