Include delta time steps in time topic

In case anyone wants to create a GUI that contains the delta time steps
This commit is contained in:
Emma Broman
2020-08-25 10:11:58 +02:00
parent 157df5ff93
commit 64b23e172a
2 changed files with 42 additions and 0 deletions

View File

@@ -43,14 +43,17 @@ private:
void sendCurrentTime();
void sendFullTimeData();
void sendDeltaTimeSteps();
int _timeCallbackHandle = UnsetOnChangeHandle;
int _deltaTimeCallbackHandle = UnsetOnChangeHandle;
int _deltaTimeStepsCallbackHandle = UnsetOnChangeHandle;
bool _isDone = false;
std::chrono::system_clock::time_point _lastUpdateTime;
bool _lastPauseState = false;
double _lastTargetDeltaTime = 0.0;
std::vector<double> _lastDeltaTimeSteps;
};
} // namespace openspace

View File

@@ -54,6 +54,9 @@ TimeTopic::~TimeTopic() {
if (_deltaTimeCallbackHandle != UnsetOnChangeHandle) {
global::timeManager.removeDeltaTimeChangeCallback(_deltaTimeCallbackHandle);
}
if (_deltaTimeStepsCallbackHandle != UnsetOnChangeHandle) {
global::timeManager.removeDeltaTimeStepsChangeCallback(_deltaTimeStepsCallbackHandle);
}
}
bool TimeTopic::isDone() const {
@@ -68,6 +71,7 @@ void TimeTopic::handleJson(const nlohmann::json& json) {
}
sendFullTimeData();
sendDeltaTimeSteps();
if (event != SubscribeEvent) {
_isDone = true;
@@ -95,6 +99,15 @@ void TimeTopic::handleJson(const nlohmann::json& json) {
sendFullTimeData();
}
});
_deltaTimeStepsCallbackHandle = global::timeManager.addDeltaTimeStepsChangeCallback(
[this]() {
const std::vector<double> steps = global::timeManager.deltaTimeSteps();
if (steps != _lastDeltaTimeSteps) {
sendDeltaTimeSteps();
}
}
);
}
void TimeTopic::sendCurrentTime() {
@@ -140,4 +153,30 @@ void TimeTopic::sendFullTimeData() {
_lastTargetDeltaTime = targetDeltaTime;
}
void TimeTopic::sendDeltaTimeSteps() {
const std::vector<double> steps = global::timeManager.deltaTimeSteps();
const std::optional<double> nextStep = global::timeManager.nextDeltaTimeStep();
const std::optional<double> prevStep = global::timeManager.previousDeltaTimeStep();
const bool hasNext = nextStep.has_value();
const bool hasPrev = prevStep.has_value();
json deltaTimeStepsJson = {
{ "deltaTimeSteps", steps },
{ "hasNextStep", hasNext },
{ "hasPrevStep", hasPrev }
};
if (hasNext) {
deltaTimeStepsJson["nextStep"] = nextStep.value();
}
if (hasPrev) {
deltaTimeStepsJson["prevStep"] = prevStep.value();
}
_connection->sendJson(wrappedPayload(deltaTimeStepsJson));
_lastDeltaTimeSteps = steps;
}
} // namespace openspace