Moved pauseState from CelestiaCore to Simulation
Removed timeScale from CelestiaCore Fixed pause behaviour with urls [bug 1819753] Fixed track handling in urls when body with empty name exists [bug 1824833] Fixed timeScale display in overlay Added localization to numbers in flash messagesver1_5_1
parent
0e9e7ffb7b
commit
c60504c07a
|
@ -19,6 +19,8 @@ using namespace std;
|
|||
Simulation::Simulation(Universe* _universe) :
|
||||
realTime(0.0),
|
||||
timeScale(1.0),
|
||||
storedTimeScale(1.0),
|
||||
pauseState(false),
|
||||
syncTime(true),
|
||||
universe(_universe),
|
||||
closestSolarSystem(NULL),
|
||||
|
@ -478,12 +480,19 @@ vector<std::string> Simulation::getObjectCompletion(string s, bool withLocations
|
|||
|
||||
double Simulation::getTimeScale() const
|
||||
{
|
||||
return timeScale;
|
||||
return pauseState?storedTimeScale:timeScale;
|
||||
}
|
||||
|
||||
void Simulation::setTimeScale(double _timeScale)
|
||||
{
|
||||
timeScale = _timeScale;
|
||||
if (pauseState == true)
|
||||
{
|
||||
storedTimeScale = _timeScale;
|
||||
}
|
||||
else
|
||||
{
|
||||
timeScale = _timeScale;
|
||||
}
|
||||
}
|
||||
|
||||
bool Simulation::getSyncTime() const
|
||||
|
@ -496,6 +505,27 @@ void Simulation::setSyncTime(bool sync)
|
|||
syncTime = sync;
|
||||
}
|
||||
|
||||
bool Simulation::getPauseState() const
|
||||
{
|
||||
return pauseState;
|
||||
}
|
||||
|
||||
void Simulation::setPauseState(bool state)
|
||||
{
|
||||
if (pauseState == state) return;
|
||||
|
||||
pauseState = state;
|
||||
if (pauseState == true)
|
||||
{
|
||||
storedTimeScale = timeScale;
|
||||
timeScale = 0.0;
|
||||
}
|
||||
else
|
||||
{
|
||||
timeScale = storedTimeScale;
|
||||
}
|
||||
}
|
||||
|
||||
// Synchronize all observers to active observer time
|
||||
void Simulation::synchronizeTime()
|
||||
{
|
||||
|
|
|
@ -98,6 +98,8 @@ class Simulation
|
|||
bool getSyncTime() const;
|
||||
void setSyncTime(bool);
|
||||
void synchronizeTime();
|
||||
bool getPauseState() const;
|
||||
void setPauseState(bool);
|
||||
|
||||
float getFaintestVisible() const;
|
||||
void setFaintestVisible(float);
|
||||
|
@ -126,6 +128,8 @@ class Simulation
|
|||
std::vector<Observer*> observers;
|
||||
|
||||
float faintestVisible;
|
||||
double storedTimeScale;
|
||||
bool pauseState;
|
||||
};
|
||||
|
||||
#endif // _CELENGINE_SIMULATION_H_
|
||||
|
|
|
@ -333,8 +333,6 @@ CelestiaCore::CelestiaCore() :
|
|||
zoomTime(0.0),
|
||||
sysTime(0.0),
|
||||
currentTime(0.0),
|
||||
timeScale(1.0),
|
||||
paused(false),
|
||||
joystickRotation(0.0f, 0.0f, 0.0f),
|
||||
KeyAccel(1.0),
|
||||
movieCapture(NULL),
|
||||
|
@ -565,7 +563,7 @@ void CelestiaCore::runScript(const string& filename)
|
|||
else
|
||||
{
|
||||
runningScript = new Execution(*script, *execEnv);
|
||||
scriptState = ScriptRunning;
|
||||
scriptState = sim->getPauseState()?ScriptPaused:ScriptRunning;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -614,7 +612,7 @@ void CelestiaCore::runScript(const string& filename)
|
|||
}
|
||||
else
|
||||
{
|
||||
scriptState = ScriptRunning;
|
||||
scriptState = sim->getPauseState()?ScriptPaused:ScriptRunning;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1553,17 +1551,15 @@ void CelestiaCore::charEntered(const char *c_p, int /*modifiers*/)
|
|||
break;
|
||||
|
||||
case ' ':
|
||||
if (paused)
|
||||
if (sim->getPauseState() == true)
|
||||
{
|
||||
sim->setTimeScale(timeScale);
|
||||
if (scriptState == ScriptPaused)
|
||||
scriptState = ScriptRunning;
|
||||
paused = false;
|
||||
sim->setPauseState(false);
|
||||
}
|
||||
else
|
||||
{
|
||||
sim->setTimeScale(0.0);
|
||||
paused = true;
|
||||
sim->setPauseState(true);
|
||||
|
||||
// If there's a script running then pause it. This has the
|
||||
// potentially confusing side effect of rendering nonfunctional
|
||||
|
@ -1584,7 +1580,7 @@ void CelestiaCore::charEntered(const char *c_p, int /*modifiers*/)
|
|||
}
|
||||
}
|
||||
|
||||
if (paused)
|
||||
if (sim->getPauseState() == true)
|
||||
{
|
||||
if (scriptState == ScriptPaused)
|
||||
flash(_("Time and script are paused"));
|
||||
|
@ -1724,7 +1720,9 @@ void CelestiaCore::charEntered(const char *c_p, int /*modifiers*/)
|
|||
{
|
||||
setFaintestAutoMag();
|
||||
char buf[128];
|
||||
setlocale(LC_NUMERIC, "");
|
||||
sprintf(buf, _("Magnitude limit: %.2f"), sim->getFaintestVisible());
|
||||
setlocale(LC_NUMERIC, "C");
|
||||
flash(buf);
|
||||
}
|
||||
}
|
||||
|
@ -1740,7 +1738,9 @@ void CelestiaCore::charEntered(const char *c_p, int /*modifiers*/)
|
|||
{
|
||||
setFaintestAutoMag();
|
||||
char buf[128];
|
||||
setlocale(LC_NUMERIC, "");
|
||||
sprintf(buf, _("Magnitude limit: %.2f"), sim->getFaintestVisible());
|
||||
setlocale(LC_NUMERIC, "C");
|
||||
flash(buf);
|
||||
}
|
||||
}
|
||||
|
@ -1842,10 +1842,8 @@ void CelestiaCore::charEntered(const char *c_p, int /*modifiers*/)
|
|||
|
||||
case 'J':
|
||||
addToHistory();
|
||||
timeScale = -timeScale;
|
||||
if (!paused)
|
||||
sim->setTimeScale(timeScale);
|
||||
if (timeScale >= 0)
|
||||
sim->setTimeScale(-sim->getTimeScale());
|
||||
if (sim->getTimeScale() >= 0)
|
||||
flash(_("Time: Forward"));
|
||||
else
|
||||
flash(_("Time: Backward"));
|
||||
|
@ -1853,32 +1851,32 @@ void CelestiaCore::charEntered(const char *c_p, int /*modifiers*/)
|
|||
|
||||
case 'K':
|
||||
addToHistory();
|
||||
if (abs(timeScale) > MinimumTimeRate)
|
||||
if (abs(sim->getTimeScale()) > MinimumTimeRate)
|
||||
{
|
||||
if (c == 'k')
|
||||
timeScale /= CoarseTimeScaleFactor;
|
||||
sim->setTimeScale(sim->getTimeScale() / CoarseTimeScaleFactor);
|
||||
else
|
||||
timeScale /= FineTimeScaleFactor;
|
||||
if (!paused)
|
||||
sim->setTimeScale(timeScale);
|
||||
sim->setTimeScale(sim->getTimeScale() / FineTimeScaleFactor);
|
||||
char buf[128];
|
||||
sprintf(buf, _("Time rate: %g"), timeScale);
|
||||
setlocale(LC_NUMERIC, "");
|
||||
sprintf(buf, _("Time rate: %'.12g"), sim->getTimeScale());
|
||||
setlocale(LC_NUMERIC, "C");
|
||||
flash(buf);
|
||||
}
|
||||
break;
|
||||
|
||||
case 'L':
|
||||
addToHistory();
|
||||
if (abs(timeScale) < MaximumTimeRate)
|
||||
if (abs(sim->getTimeScale()) < MaximumTimeRate)
|
||||
{
|
||||
if (c == 'l')
|
||||
timeScale *= CoarseTimeScaleFactor;
|
||||
sim->setTimeScale(sim->getTimeScale() * CoarseTimeScaleFactor);
|
||||
else
|
||||
timeScale *= FineTimeScaleFactor;
|
||||
if (!paused)
|
||||
sim->setTimeScale(timeScale);
|
||||
sim->setTimeScale(sim->getTimeScale() * FineTimeScaleFactor);
|
||||
char buf[128];
|
||||
sprintf(buf, _("Time rate: %g"), timeScale);
|
||||
setlocale(LC_NUMERIC, "");
|
||||
sprintf(buf, _("Time rate: %'.12g"), sim->getTimeScale());
|
||||
setlocale(LC_NUMERIC, "C");
|
||||
flash(buf);
|
||||
}
|
||||
break;
|
||||
|
@ -1987,7 +1985,9 @@ void CelestiaCore::charEntered(const char *c_p, int /*modifiers*/)
|
|||
setFaintest(sim->getFaintestVisible() - 0.2f);
|
||||
notifyWatchers(FaintestChanged);
|
||||
char buf[128];
|
||||
setlocale(LC_NUMERIC, "");
|
||||
sprintf(buf, _("Magnitude limit: %.2f"),sim->getFaintestVisible());
|
||||
setlocale(LC_NUMERIC, "C");
|
||||
flash(buf);
|
||||
}
|
||||
}
|
||||
|
@ -1996,16 +1996,16 @@ void CelestiaCore::charEntered(const char *c_p, int /*modifiers*/)
|
|||
renderer->setFaintestAM45deg(renderer->getFaintestAM45deg() - 0.1f);
|
||||
setFaintestAutoMag();
|
||||
char buf[128];
|
||||
setlocale(LC_NUMERIC, "");
|
||||
sprintf(buf, _("Auto magnitude limit at 45 degrees: %.2f"),renderer->getFaintestAM45deg());
|
||||
setlocale(LC_NUMERIC, "C");
|
||||
flash(buf);
|
||||
}
|
||||
break;
|
||||
|
||||
case '\\':
|
||||
addToHistory();
|
||||
timeScale = 1.0f;
|
||||
if (!paused)
|
||||
sim->setTimeScale(timeScale);
|
||||
sim->setTimeScale(1.0f);
|
||||
break;
|
||||
|
||||
case ']':
|
||||
|
@ -2016,7 +2016,9 @@ void CelestiaCore::charEntered(const char *c_p, int /*modifiers*/)
|
|||
setFaintest(sim->getFaintestVisible() + 0.2f);
|
||||
notifyWatchers(FaintestChanged);
|
||||
char buf[128];
|
||||
sprintf(buf, _("Magnitude limit: %.2f"),sim->getFaintestVisible());
|
||||
setlocale(LC_NUMERIC, "");
|
||||
sprintf(buf, _("Magnitude limit: %.2f"),sim->getFaintestVisible());
|
||||
setlocale(LC_NUMERIC, "C");
|
||||
flash(buf);
|
||||
}
|
||||
}
|
||||
|
@ -2025,7 +2027,9 @@ void CelestiaCore::charEntered(const char *c_p, int /*modifiers*/)
|
|||
renderer->setFaintestAM45deg(renderer->getFaintestAM45deg() + 0.1f);
|
||||
setFaintestAutoMag();
|
||||
char buf[128];
|
||||
setlocale(LC_NUMERIC, "");
|
||||
sprintf(buf, _("Auto magnitude limit at 45 degrees: %.2f"),renderer->getFaintestAM45deg());
|
||||
setlocale(LC_NUMERIC, "C");
|
||||
flash(buf);
|
||||
}
|
||||
break;
|
||||
|
@ -2042,9 +2046,11 @@ void CelestiaCore::charEntered(const char *c_p, int /*modifiers*/)
|
|||
renderer->setAmbientLightLevel(0.0f);
|
||||
notifyWatchers(AmbientLightChanged);
|
||||
char buf[128];
|
||||
setlocale(LC_NUMERIC, "");
|
||||
sprintf(buf, _("Ambient light level: %.2f"),renderer->getAmbientLightLevel());
|
||||
flash(buf);
|
||||
}
|
||||
setlocale(LC_NUMERIC, "C");
|
||||
flash(buf);
|
||||
}
|
||||
break;
|
||||
|
||||
case '}':
|
||||
|
@ -2055,16 +2061,20 @@ void CelestiaCore::charEntered(const char *c_p, int /*modifiers*/)
|
|||
renderer->setAmbientLightLevel(1.0f);
|
||||
notifyWatchers(AmbientLightChanged);
|
||||
char buf[128];
|
||||
setlocale(LC_NUMERIC, "");
|
||||
sprintf(buf, _("Ambient light level: %.2f"),renderer->getAmbientLightLevel());
|
||||
flash(buf);
|
||||
}
|
||||
setlocale(LC_NUMERIC, "C");
|
||||
flash(buf);
|
||||
}
|
||||
break;
|
||||
|
||||
case '(':
|
||||
{
|
||||
char buf[128];
|
||||
Galaxy::decreaseLightGain();
|
||||
setlocale(LC_NUMERIC, "");
|
||||
sprintf(buf, "%s: %3.2f %%", _("Light gain"), Galaxy::getLightGain() * 100.0f);
|
||||
setlocale(LC_NUMERIC, "C");
|
||||
flash(buf);
|
||||
notifyWatchers(GalaxyLightGainChanged);
|
||||
}
|
||||
|
@ -2074,7 +2084,9 @@ void CelestiaCore::charEntered(const char *c_p, int /*modifiers*/)
|
|||
{
|
||||
char buf[128];
|
||||
Galaxy::increaseLightGain();
|
||||
setlocale(LC_NUMERIC, "");
|
||||
sprintf(buf, "%s: %3.2f %%", _("Light gain"), Galaxy::getLightGain() * 100.0f);
|
||||
setlocale(LC_NUMERIC, "C");
|
||||
flash(buf);
|
||||
notifyWatchers(GalaxyLightGainChanged);
|
||||
}
|
||||
|
@ -2181,10 +2193,6 @@ void CelestiaCore::tick()
|
|||
|
||||
currentTime += dt;
|
||||
|
||||
// synchronize timeScale if it was changed by a script:
|
||||
if (!paused && (timeScale != sim->getTimeScale()))
|
||||
timeScale = sim->getTimeScale();
|
||||
|
||||
// Mouse wheel zoom
|
||||
if (zoomMotion != 0.0f)
|
||||
{
|
||||
|
@ -3234,28 +3242,29 @@ void CelestiaCore::renderOverlay()
|
|||
}
|
||||
|
||||
{
|
||||
if (abs(abs(timeScale) - 1) < 1e-6)
|
||||
if (abs(abs(sim->getTimeScale()) - 1) < 1e-6)
|
||||
{
|
||||
if (sign(timeScale) == 1)
|
||||
if (sign(sim->getTimeScale()) == 1)
|
||||
*overlay << _("Real time");
|
||||
else
|
||||
*overlay << _("-Real time");
|
||||
}
|
||||
else if (abs(timeScale) < MinimumTimeRate)
|
||||
else if (abs(sim->getTimeScale()) < MinimumTimeRate)
|
||||
{
|
||||
*overlay << _("Time stopped");
|
||||
}
|
||||
else if (abs(timeScale) > 1.0)
|
||||
else if (abs(sim->getTimeScale()) > 1.0)
|
||||
{
|
||||
*overlay << FormattedNumber(timeScale, 0, FormattedNumber::GroupThousands)
|
||||
<< UTF8_MULTIPLICATION_SIGN << _(" faster");
|
||||
overlay->oprintf("%'.12g", sim->getTimeScale());
|
||||
*overlay << UTF8_MULTIPLICATION_SIGN << _(" faster");
|
||||
}
|
||||
else
|
||||
{
|
||||
*overlay << SigDigitNum(1.0 / timeScale, 1) << UTF8_MULTIPLICATION_SIGN << _(" slower");
|
||||
overlay->oprintf("%'.12g", 1.0 / sim->getTimeScale());
|
||||
*overlay << UTF8_MULTIPLICATION_SIGN << _(" slower");
|
||||
}
|
||||
|
||||
if (paused)
|
||||
if (sim->getPauseState() == true)
|
||||
{
|
||||
glColor4f(1.0f, 0.0f, 0.0f, 1.0f);
|
||||
*overlay << _(" (Paused)");
|
||||
|
@ -4417,7 +4426,6 @@ void CelestiaCore::goToUrl(const string& urlStr)
|
|||
{
|
||||
Url url(urlStr, this);
|
||||
url.goTo();
|
||||
timeScale = sim->getTimeScale();
|
||||
notifyWatchers(RenderFlagsChanged | LabelFlagsChanged);
|
||||
}
|
||||
|
||||
|
@ -4449,7 +4457,6 @@ void CelestiaCore::back()
|
|||
}
|
||||
historyCurrent--;
|
||||
history[historyCurrent].goTo();
|
||||
timeScale = sim->getTimeScale();
|
||||
notifyWatchers(HistoryChanged|RenderFlagsChanged|LabelFlagsChanged);
|
||||
}
|
||||
|
||||
|
@ -4460,7 +4467,6 @@ void CelestiaCore::forward()
|
|||
if (historyCurrent == history.size()-1) return;
|
||||
historyCurrent++;
|
||||
history[historyCurrent].goTo();
|
||||
timeScale = sim->getTimeScale();
|
||||
notifyWatchers(HistoryChanged|RenderFlagsChanged|LabelFlagsChanged);
|
||||
}
|
||||
|
||||
|
|
|
@ -414,8 +414,6 @@ class CelestiaCore // : public Watchable<CelestiaCore>
|
|||
|
||||
double sysTime;
|
||||
double currentTime;
|
||||
double timeScale;
|
||||
bool paused;
|
||||
|
||||
Vec3f joystickRotation;
|
||||
bool joyButtonsPressed[JoyButtonCount];
|
||||
|
|
|
@ -26,10 +26,11 @@ static const unsigned int CurrentCelestiaURLVersion = 2;
|
|||
Url::Url()
|
||||
{};
|
||||
|
||||
Url::Url(const std::string& str, CelestiaCore *core)
|
||||
Url::Url(const std::string& str, CelestiaCore *core):
|
||||
urlStr(str),
|
||||
appCore(core),
|
||||
pauseState(false)
|
||||
{
|
||||
urlStr = str;
|
||||
appCore = core;
|
||||
std::string::size_type pos, endPrevious;
|
||||
std::vector<Selection> bodies;
|
||||
Simulation *sim = appCore->getSimulation();
|
||||
|
@ -190,6 +191,9 @@ Url::Url(const std::string& str, CelestiaCore *core)
|
|||
if (params["ts"] != "") {
|
||||
sscanf(params["ts"].c_str(), "%f", &timeScale);
|
||||
}
|
||||
if (params["p"] != "") {
|
||||
sscanf(params["p"].c_str(), "%d", &pauseState);
|
||||
}
|
||||
break;
|
||||
case Settings:
|
||||
break;
|
||||
|
@ -268,9 +272,10 @@ Url::Url(CelestiaCore* core, UrlType type)
|
|||
|
||||
fieldOfView = radToDeg(sim->getActiveObserver()->getFOV());
|
||||
timeScale = (float) sim->getTimeScale();
|
||||
pauseState = sim->getPauseState();
|
||||
lightTimeDelay = appCore->getLightDelayActive();
|
||||
sprintf(buff, "&fov=%f&ts=%f<d=%c&", fieldOfView,
|
||||
timeScale, lightTimeDelay?'1':'0');
|
||||
sprintf(buff, "&fov=%f&ts=%f<d=%c&p=%c&", fieldOfView,
|
||||
timeScale, lightTimeDelay?'1':'0', pauseState?'1':'0');
|
||||
urlStr += buff;
|
||||
case Settings: // Intentional Fall-Through
|
||||
renderFlags = renderer->getRenderFlags();
|
||||
|
@ -466,25 +471,41 @@ void Url::goTo()
|
|||
sim->getActiveObserver()->setFOV(degToRad(fieldOfView));
|
||||
appCore->setZoomFromFOV();
|
||||
sim->setTimeScale(timeScale);
|
||||
sim->setPauseState(pauseState);
|
||||
appCore->setLightDelayActive(lightTimeDelay);
|
||||
|
||||
pos = 0;
|
||||
while(pos != std::string::npos)
|
||||
if (selectedStr != "")
|
||||
{
|
||||
pos = selectedStr.find(":", pos + 1);
|
||||
if (pos != std::string::npos) selectedStr[pos]='/';
|
||||
pos = 0;
|
||||
while(pos != std::string::npos)
|
||||
{
|
||||
pos = selectedStr.find(":", pos + 1);
|
||||
if (pos != std::string::npos) selectedStr[pos]='/';
|
||||
}
|
||||
sel = sim->findObjectFromPath(selectedStr);
|
||||
sim->setSelection(sel);
|
||||
}
|
||||
else
|
||||
{
|
||||
sim->setSelection(Selection());
|
||||
}
|
||||
sel = sim->findObjectFromPath(selectedStr);
|
||||
sim->setSelection(sel);
|
||||
|
||||
pos = 0;
|
||||
while(pos != std::string::npos)
|
||||
if (trackedStr != "")
|
||||
{
|
||||
pos = trackedStr.find(":", pos + 1);
|
||||
if (pos != std::string::npos) trackedStr[pos]='/';
|
||||
pos = 0;
|
||||
while(pos != std::string::npos)
|
||||
{
|
||||
pos = trackedStr.find(":", pos + 1);
|
||||
if (pos != std::string::npos) trackedStr[pos]='/';
|
||||
}
|
||||
sel = sim->findObjectFromPath(trackedStr);
|
||||
sim->setTrackedObject(sel);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!sim->getTrackedObject().empty())
|
||||
sim->setTrackedObject(Selection());
|
||||
}
|
||||
sel = sim->findObjectFromPath(trackedStr);
|
||||
sim->setTrackedObject(sel);
|
||||
// Intentional Fall-Through
|
||||
case Settings:
|
||||
renderer->setRenderFlags(renderFlags);
|
||||
|
|
|
@ -63,6 +63,7 @@ private:
|
|||
int renderFlags;
|
||||
int labelMode;
|
||||
bool lightTimeDelay;
|
||||
bool pauseState;
|
||||
|
||||
std::map<std::string, std::string> parseUrlParams(const std::string& url) const;
|
||||
std::string getCoordSysName(astro::CoordinateSystem mode) const;
|
||||
|
|
Loading…
Reference in New Issue