Merge commit '42b2e5ca519766e37ce6941ba4faecc9691cc403' into upstream
[debian/openrocket] / core / src / net / sf / openrocket / simulation / customexpression / CustomExpressionSimulationListener.java
diff --git a/core/src/net/sf/openrocket/simulation/customexpression/CustomExpressionSimulationListener.java b/core/src/net/sf/openrocket/simulation/customexpression/CustomExpressionSimulationListener.java
new file mode 100644 (file)
index 0000000..243f7b1
--- /dev/null
@@ -0,0 +1,44 @@
+package net.sf.openrocket.simulation.customexpression;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import net.sf.openrocket.logging.LogHelper;
+import net.sf.openrocket.simulation.FlightDataBranch;
+import net.sf.openrocket.simulation.SimulationStatus;
+import net.sf.openrocket.simulation.exception.SimulationException;
+import net.sf.openrocket.simulation.listeners.AbstractSimulationListener;
+import net.sf.openrocket.startup.Application;
+
+public class CustomExpressionSimulationListener extends        AbstractSimulationListener {
+
+       private static final LogHelper log = Application.getLogger();
+       private final List<CustomExpression> expressions;
+       
+       public CustomExpressionSimulationListener(List<CustomExpression> expressions) {
+               super();
+               this.expressions = expressions;
+       }
+
+       @Override
+       public void postStep(SimulationStatus status) throws SimulationException {
+               if ( expressions == null || expressions.size() == 0 ) {
+                       return;
+               }
+               // Calculate values for custom expressions
+               FlightDataBranch data = status.getFlightData();
+               for (CustomExpression expression : expressions ) {
+                       double value = expression.evaluateDouble(status);
+                       //log.debug("Setting value of custom expression "+expression.toString()+" = "+value);
+                       data.setValue(expression.getType(), value);
+               }
+               
+
+       }
+
+       @Override
+       public boolean isSystemListener(){
+               return true;
+       }
+       
+}