From 39eb2bf5bf2e950f87608756fdf9d52fb20b0f0e Mon Sep 17 00:00:00 2001 From: JoePfeiffer Date: Thu, 25 Aug 2022 13:02:21 -0600 Subject: [PATCH] Only set timestep to 0 if we both have no events in the queue and we're sitting on the ground. Otherwise we end up with a timestep of .001 throughout the coast phase of the flight (as .001 is a hard "minimum step size") --- .../openrocket/simulation/BasicEventSimulationEngine.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/core/src/net/sf/openrocket/simulation/BasicEventSimulationEngine.java b/core/src/net/sf/openrocket/simulation/BasicEventSimulationEngine.java index 0ba86fb4c..fd864e789 100644 --- a/core/src/net/sf/openrocket/simulation/BasicEventSimulationEngine.java +++ b/core/src/net/sf/openrocket/simulation/BasicEventSimulationEngine.java @@ -130,12 +130,16 @@ public class BasicEventSimulationEngine implements SimulationEngine { double oldAlt = currentStatus.getRocketPosition().z; if (SimulationListenerHelper.firePreStep(currentStatus)) { - // Step at most to the next event. If there is no next event, don't step time - double maxStepTime = 0.0; + // Step at most to the next event + double maxStepTime = Double.MAX_VALUE; FlightEvent nextEvent = currentStatus.getEventQueue().peek(); + if (nextEvent != null) { maxStepTime = MathUtil.max(nextEvent.getTime() - currentStatus.getSimulationTime(), 0.001); + } else if (currentStatus.isLanded()) { + maxStepTime = 0.0; } + log.trace("Taking simulation step at t=" + currentStatus.getSimulationTime() + " altitude " + oldAlt); currentStepper.step(currentStatus, maxStepTime); }