From 7aca75f053e022011611d947e0cd8d6c8bb6964f Mon Sep 17 00:00:00 2001 From: Sampo Niskanen Date: Tue, 23 Dec 2014 23:49:37 +0200 Subject: [PATCH] Implement launch velocity into AirStart extension --- core/resources/l10n/messages.properties | 3 ++- .../simulation/extension/impl/AirStart.java | 21 +++++++++++++++++-- .../extension/impl/AirStartConfigurator.java | 15 +++++++++++++ 3 files changed, 36 insertions(+), 3 deletions(-) diff --git a/core/resources/l10n/messages.properties b/core/resources/l10n/messages.properties index 79979c423..0ace129c9 100644 --- a/core/resources/l10n/messages.properties +++ b/core/resources/l10n/messages.properties @@ -398,7 +398,8 @@ simedtdlg.IntensityDesc.High = High simedtdlg.IntensityDesc.Veryhigh = Very high simedtdlg.IntensityDesc.Extreme = Extreme -SimulationExtension.airstart.name = Air-start ({alt}) +SimulationExtension.airstart.name.alt = Air-start ({alt}) +SimulationExtension.airstart.name.altvel = Air-start ({alt}, {vel}) SimulationExtension.javacode.name = Java code SimulationExtension.javacode.name.none = none SimulationExtension.javacode.desc = Add a custom SimulationListener to the simulation diff --git a/core/src/net/sf/openrocket/simulation/extension/impl/AirStart.java b/core/src/net/sf/openrocket/simulation/extension/impl/AirStart.java index 4b026e199..e591685b3 100644 --- a/core/src/net/sf/openrocket/simulation/extension/impl/AirStart.java +++ b/core/src/net/sf/openrocket/simulation/extension/impl/AirStart.java @@ -18,8 +18,15 @@ public class AirStart extends AbstractSimulationExtension { @Override public String getName() { - String name = trans.get("SimulationExtension.airstart.name"); - return L10N.replace(name, "{alt}", UnitGroup.UNITS_DISTANCE.toStringUnit(getLaunchAltitude())); + String name; + if (getLaunchVelocity() > 0.01) { + name = trans.get("SimulationExtension.airstart.name.altvel"); + } else { + name = trans.get("SimulationExtension.airstart.name.alt"); + } + name = L10N.replace(name, "{alt}", UnitGroup.UNITS_DISTANCE.toStringUnit(getLaunchAltitude())); + name = L10N.replace(name, "{vel}", UnitGroup.UNITS_VELOCITY.toStringUnit(getLaunchVelocity())); + return name; } public double getLaunchAltitude() { @@ -31,11 +38,21 @@ public class AirStart extends AbstractSimulationExtension { fireChangeEvent(); } + public double getLaunchVelocity() { + return config.getDouble("launchVelocity", 0.0); + } + + public void setLaunchVelocity(double launchVelocity) { + config.put("launchVelocity", launchVelocity); + fireChangeEvent(); + } + private class AirStartListener extends AbstractSimulationListener { @Override public void startSimulation(SimulationStatus status) throws SimulationException { status.setRocketPosition(new Coordinate(0, 0, getLaunchAltitude())); + status.setRocketVelocity(status.getRocketOrientationQuaternion().rotate(new Coordinate(0, 0, getLaunchVelocity()))); } } } diff --git a/swing/src/net/sf/openrocket/simulation/extension/impl/AirStartConfigurator.java b/swing/src/net/sf/openrocket/simulation/extension/impl/AirStartConfigurator.java index 65dd6f9b4..8b7879526 100644 --- a/swing/src/net/sf/openrocket/simulation/extension/impl/AirStartConfigurator.java +++ b/swing/src/net/sf/openrocket/simulation/extension/impl/AirStartConfigurator.java @@ -37,6 +37,21 @@ public class AirStartConfigurator extends AbstractSwingSimulationExtensionConfig BasicSlider slider = new BasicSlider(m.getSliderModel(0, 1000)); panel.add(slider, "w 75lp, wrap"); + + panel.add(new JLabel("Launch velocity:")); + + m = new DoubleModel(extension, "LaunchVelocity", UnitGroup.UNITS_VELOCITY, 0); + + spin = new JSpinner(m.getSpinnerModel()); + spin.setEditor(new SpinnerEditor(spin)); + panel.add(spin, "w 65lp!"); + + unit = new UnitSelector(m); + panel.add(unit, "w 25"); + + slider = new BasicSlider(m.getSliderModel(0, 150)); + panel.add(slider, "w 75lp, wrap"); + return panel; }