From 7bafe94f23169ab2a451af80cea529df07c7a167 Mon Sep 17 00:00:00 2001 From: JoePfeiffer Date: Tue, 26 Sep 2023 16:48:54 -0600 Subject: [PATCH] Pass acceleration data to post listeners Also, existing code wouldn't call calculation post-listeners if pre-listeners had been called. Fixes that. --- .../simulation/RK4SimulationStepper.java | 27 +++++++++---------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/core/src/net/sf/openrocket/simulation/RK4SimulationStepper.java b/core/src/net/sf/openrocket/simulation/RK4SimulationStepper.java index 9c1b825af..1e24d0924 100644 --- a/core/src/net/sf/openrocket/simulation/RK4SimulationStepper.java +++ b/core/src/net/sf/openrocket/simulation/RK4SimulationStepper.java @@ -283,11 +283,17 @@ public class RK4SimulationStepper extends AbstractSimulationStepper { throws SimulationException { RK4Parameters params = new RK4Parameters(); - // if (dataStore == null) { - // dataStore = new DataStore(); - // } + // Call pre-listeners + store.accelerationData = SimulationListenerHelper.firePreAccelerationCalculation(status); + + // Calculate acceleration (if not overridden by pre-listeners) + if (store.accelerationData == null) { + store.accelerationData = calculateAcceleration(status, dataStore); + } + + // Call post-listeners + store.accelerationData = SimulationListenerHelper.firePostAccelerationCalculation(status, store.accelerationData); - calculateAcceleration(status, dataStore); params.a = dataStore.linearAcceleration; params.ra = dataStore.angularAcceleration; params.v = status.getRocketVelocity(); @@ -312,13 +318,7 @@ public class RK4SimulationStepper extends AbstractSimulationStepper { * @param status the status of the rocket. * @throws SimulationException */ - private void calculateAcceleration(RK4SimulationStatus status, DataStore store) throws SimulationException { - - // Call pre-listeners - store.accelerationData = SimulationListenerHelper.firePreAccelerationCalculation(status); - if (store.accelerationData != null) { - return; - } + private AccelerationData calculateAcceleration(RK4SimulationStatus status, DataStore store) throws SimulationException { // Compute the forces affecting the rocket calculateForces(status, store); @@ -403,9 +403,8 @@ public class RK4SimulationStepper extends AbstractSimulationStepper { store.angularAcceleration = status.getRocketOrientationQuaternion().rotate(store.angularAcceleration); } - - // Call post-listeners - store.accelerationData = SimulationListenerHelper.firePostAccelerationCalculation(status, store.accelerationData); + + return new AccelerationData(null, null, store.linearAcceleration, store.angularAcceleration, status.getRocketOrientationQuaternion()); }