From 942b3adacfe379b5982aa983b706f68c8a6922e4 Mon Sep 17 00:00:00 2001 From: JoePfeiffer Date: Sat, 15 Oct 2022 16:59:42 -0600 Subject: [PATCH] Get rid of redundant apogeeAltitude. Use maxAltitude[index] instead (this actually solves the reported bug; apogeeAltitude was being set to the first altitude after apogee which could in pathological conditions already be 0). --- .../gui/simulation/SimulationRunDialog.java | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/swing/src/net/sf/openrocket/gui/simulation/SimulationRunDialog.java b/swing/src/net/sf/openrocket/gui/simulation/SimulationRunDialog.java index d5e9f6531..669db71af 100644 --- a/swing/src/net/sf/openrocket/gui/simulation/SimulationRunDialog.java +++ b/swing/src/net/sf/openrocket/gui/simulation/SimulationRunDialog.java @@ -270,7 +270,6 @@ public class SimulationRunDialog extends JDialog { private final int index; private final double burnoutTimeEstimate; private volatile double burnoutVelocity; - private volatile double apogeeAltitude; private final CustomExpressionSimulationListener exprListener; @@ -278,7 +277,8 @@ public class SimulationRunDialog extends JDialog { * Keep track of current phase ("stage") of simulation * -2: Boost. Estimate progress using time from 0 to burnoutTimeEstimate * -1: Coast. Estimate progress using velocity from v(burnoutTimeEstimate) to 0 - * 0 ... n: Landing. stages from alt(max) ... 0 (?) + * 0 ... n: Landing. Estimate progress using altitude from alt(max) ... 0 + * (it appears as if the idea is to use values above 0 to support multiple stages, but this is not implemented) */ private volatile int simulationStage = -2; @@ -362,14 +362,13 @@ public class SimulationRunDialog extends JDialog { // Past apogee, switch to landing if (simulationStage == -1 && status.getRocketVelocity().z < 0) { simulationStage++; - apogeeAltitude = MathUtil.max(status.getRocketPosition().z, 1); - log.debug("CHANGING to simulationStage " + simulationStage + ", apogee=" + apogeeAltitude); + log.debug("CHANGING to simulationStage " + simulationStage + ", apogee=" + simulationMaxAltitude[index]); } // >= 0 Landing. z-position from apogee to zero // TODO: MEDIUM: several stages - log.debug("simulationStage landing (" + simulationStage + "): alt=" + status.getRocketPosition().z + " apogee=" + apogeeAltitude); - setSimulationProgress(MathUtil.map(status.getRocketPosition().z, apogeeAltitude, 0, APOGEE_PROGRESS, 1.0)); + log.debug("simulationStage landing (" + simulationStage + "): alt=" + status.getRocketPosition().z + " apogee=" + simulationMaxAltitude[index]); + setSimulationProgress(MathUtil.map(status.getRocketPosition().z, simulationMaxAltitude[index], 0, APOGEE_PROGRESS, 1.0)); updateProgress(); } @@ -444,7 +443,6 @@ public class SimulationRunDialog extends JDialog { switch (event.getType()) { case APOGEE: simulationStage = 0; - apogeeAltitude = status.getRocketPosition().z; log.debug("APOGEE, setting progress"); setSimulationProgress(APOGEE_PROGRESS); publish(status);