Added MotorConfiguration object and made MotorMount interface extend

SupportsFlightConfiguration<MotorConfiguration>.  Created a class
BaseMotorMount which implements
SupportsFlightConfiguration<MotorConfiguration> and provides a place to
unify the common code in InnerTube and BodyTube.
This commit is contained in:
kruland2607 2012-10-17 20:36:32 -05:00
parent a0b3ccae08
commit 8c56b7b793
10 changed files with 407 additions and 215 deletions

View File

@ -50,6 +50,7 @@ import net.sf.openrocket.rocketcomponent.InternalComponent;
import net.sf.openrocket.rocketcomponent.LaunchLug;
import net.sf.openrocket.rocketcomponent.MassComponent;
import net.sf.openrocket.rocketcomponent.MassObject;
import net.sf.openrocket.rocketcomponent.MotorConfiguration;
import net.sf.openrocket.rocketcomponent.MotorMount;
import net.sf.openrocket.rocketcomponent.NoseCone;
import net.sf.openrocket.rocketcomponent.Parachute;
@ -1029,8 +1030,8 @@ class MotorMountHandler extends AbstractElementHandler {
}
if (element.equals("ignitionevent")) {
MotorMount.IgnitionEvent event = null;
for (MotorMount.IgnitionEvent e : MotorMount.IgnitionEvent.values()) {
MotorConfiguration.IgnitionEvent event = null;
for (MotorConfiguration.IgnitionEvent e : MotorConfiguration.IgnitionEvent.values()) {
if (e.name().toLowerCase(Locale.ENGLISH).replaceAll("_", "").equals(content)) {
event = e;
break;

View File

@ -31,8 +31,9 @@ import net.sf.openrocket.l10n.Translator;
import net.sf.openrocket.motor.Motor;
import net.sf.openrocket.motor.ThrustCurveMotor;
import net.sf.openrocket.rocketcomponent.Configuration;
import net.sf.openrocket.rocketcomponent.MotorConfiguration;
import net.sf.openrocket.rocketcomponent.MotorConfiguration.IgnitionEvent;
import net.sf.openrocket.rocketcomponent.MotorMount;
import net.sf.openrocket.rocketcomponent.MotorMount.IgnitionEvent;
import net.sf.openrocket.rocketcomponent.Rocket;
import net.sf.openrocket.rocketcomponent.RocketComponent;
import net.sf.openrocket.startup.Application;
@ -122,7 +123,7 @@ public class MotorConfig extends JPanel {
//// Ignition at:
panel.add(new JLabel(trans.get("MotorCfg.lbl.Ignitionat")), "");
combo = new JComboBox(new EnumModel<IgnitionEvent>(mount, "IgnitionEvent"));
combo = new JComboBox(new EnumModel<MotorConfiguration.IgnitionEvent>(mount, "IgnitionEvent"));
panel.add(combo, "growx, wrap");
// ... and delay

View File

@ -32,8 +32,9 @@ import net.sf.openrocket.gui.util.SwingPreferences;
import net.sf.openrocket.l10n.Translator;
import net.sf.openrocket.logging.LogHelper;
import net.sf.openrocket.rocketcomponent.Configuration;
import net.sf.openrocket.rocketcomponent.MotorConfiguration;
import net.sf.openrocket.rocketcomponent.MotorConfiguration.IgnitionEvent;
import net.sf.openrocket.rocketcomponent.MotorMount;
import net.sf.openrocket.rocketcomponent.MotorMount.IgnitionEvent;
import net.sf.openrocket.simulation.FlightEvent;
import net.sf.openrocket.simulation.SimulationStatus;
import net.sf.openrocket.simulation.customexpression.CustomExpression;
@ -308,7 +309,7 @@ public class SimulationRunDialog extends JDialog {
Iterator<MotorMount> iterator = config.motorIterator();
while (iterator.hasNext()) {
MotorMount m = iterator.next();
if (m.getIgnitionEvent() == IgnitionEvent.LAUNCH)
if (m.getIgnitionEvent() == MotorConfiguration.IgnitionEvent.LAUNCH)
launchBurn = MathUtil.max(launchBurn, m.getMotor(id).getBurnTimeEstimate());
else
otherBurn = otherBurn + m.getMotor(id).getBurnTimeEstimate();

View File

@ -0,0 +1,119 @@
package net.sf.openrocket.rocketcomponent;
import java.util.HashMap;
import net.sf.openrocket.motor.Motor;
public class BaseMotorMount implements SupportsFlightConfiguration<MotorConfiguration>, Cloneable {
private HashMap<String, MotorConfiguration > motors = new HashMap<String,MotorConfiguration>();
private MotorConfiguration defaultConfiguration = new MotorConfiguration();
@Override
public MotorConfiguration getFlightConfiguration(String configId) {
return motors.get(configId);
}
@Override
public void setFlightConfiguration(String configId, MotorConfiguration config) {
if ( config == null ) {
motors.remove(configId);
} else {
motors.put(configId, config);
}
}
@Override
public void cloneFlightConfiguration(String oldConfigId, String newConfigId) {
MotorConfiguration oldConfig = getFlightConfiguration(oldConfigId);
setFlightConfiguration(newConfigId, oldConfig.clone());
}
@Override
public MotorConfiguration getDefaultFlightConfiguration() {
return defaultConfiguration;
}
@Override
public void setDefaultFlightConfiguration(MotorConfiguration config) {
defaultConfiguration = config;
}
public Motor getMotor(String id) {
if (id == null)
return null;
MotorConfiguration motorConfig =getFlightConfiguration(id);
if ( motorConfig == null ) {
return null;
}
return motorConfig.getMotor();
}
/**
* Change the motor used in this mount for the given flight configuration.
*
* @param id
* @param motor
* @return true if the new motor is different from the old motor.
*/
public boolean setMotor(String id, Motor motor) {
if (id == null) {
if (motor != null) {
throw new IllegalArgumentException("Cannot set non-null motor for id null");
}
}
if ( motor == null ) {
setFlightConfiguration(id, null);
}
MotorConfiguration current = getFlightConfiguration(id);
if ( current == null ) {
current = new MotorConfiguration();
setFlightConfiguration(id, current);
}
Motor currentMotor = current.getMotor();
if (motor.equals(currentMotor)) {
return false;
}
current.setMotor(motor);
return true;
}
public double getMotorDelay(String id) {
MotorConfiguration current = getFlightConfiguration(id);
Double delay = ( current == null ) ? null : current.getEjectionDelay();
if (delay == null)
return Motor.PLUGGED;
return delay;
}
/**
* Change the motor ejection delay for the given flight configuration
*
* @param id
* @param delay
* @return true if the new value for the delay is different from the old
*/
public boolean setMotorDelay(String id, double delay) {
MotorConfiguration current = getFlightConfiguration(id);
if ( current == null ) {
current = new MotorConfiguration();
setFlightConfiguration(id, current);
}
if ( current.getEjectionDelay() != delay ) {
current.setEjectionDelay(delay);
return true;
} else {
return false;
}
}
@Override
protected BaseMotorMount clone() {
BaseMotorMount clone = new BaseMotorMount();
clone.defaultConfiguration = defaultConfiguration.clone();
clone.motors = (HashMap<String,MotorConfiguration>) motors.clone();
return clone;
}
}

View File

@ -27,13 +27,9 @@ public class BodyTube extends SymmetricComponent implements MotorMount, Coaxial
// When changing the inner radius, thickness is modified
private boolean motorMount = false;
private HashMap<String, Double> ejectionDelays = new HashMap<String, Double>();
private HashMap<String, Motor> motors = new HashMap<String, Motor>();
private IgnitionEvent ignitionEvent = IgnitionEvent.AUTOMATIC;
private double ignitionDelay = 0;
private double overhang = 0;
private BaseMotorMount baseMotorMount = new BaseMotorMount();
public BodyTube() {
super();
@ -338,6 +334,56 @@ public class BodyTube extends SymmetricComponent implements MotorMount, Coaxial
//////////////// Motor mount /////////////////
@Override
public MotorConfiguration getFlightConfiguration(String configId) {
return baseMotorMount.getFlightConfiguration(configId);
}
@Override
public void setFlightConfiguration(String configId,
MotorConfiguration config) {
baseMotorMount.setFlightConfiguration(configId, config);
}
@Override
public void cloneFlightConfiguration(String oldConfigId, String newConfigId) {
baseMotorMount.cloneFlightConfiguration(oldConfigId, newConfigId);
}
@Override
public MotorConfiguration getDefaultFlightConfiguration() {
return baseMotorMount.getDefaultFlightConfiguration();
}
@Override
public void setDefaultFlightConfiguration(MotorConfiguration config) {
baseMotorMount.setDefaultFlightConfiguration(config);
}
@Override
public Motor getMotor(String id) {
return baseMotorMount.getMotor(id);
}
@Override
public void setMotor(String id, Motor motor) {
if (baseMotorMount.setMotor(id, motor)) {
fireComponentChangeEvent(ComponentChangeEvent.MOTOR_CHANGE);
}
}
@Override
public double getMotorDelay(String id) {
return baseMotorMount.getMotorDelay(id);
}
@Override
public void setMotorDelay(String id, double delay) {
if (baseMotorMount.setMotorDelay(id, delay)) {
fireComponentChangeEvent(ComponentChangeEvent.MOTOR_CHANGE);
}
}
@Override
public boolean isMotorMount() {
return motorMount;
@ -351,50 +397,6 @@ public class BodyTube extends SymmetricComponent implements MotorMount, Coaxial
fireComponentChangeEvent(ComponentChangeEvent.MOTOR_CHANGE);
}
@Override
public Motor getMotor(String id) {
if (id == null)
return null;
// Check whether the id is valid for the current rocket
RocketComponent root = this.getRoot();
if (!(root instanceof Rocket))
return null;
if (!((Rocket) root).isFlightConfigurationID(id))
return null;
return motors.get(id);
}
@Override
public void setMotor(String id, Motor motor) {
if (id == null) {
if (motor != null) {
throw new IllegalArgumentException("Cannot set non-null motor for id null");
}
}
Motor current = motors.get(id);
if ((motor == null && current == null) ||
(motor != null && motor.equals(current)))
return;
motors.put(id, motor);
fireComponentChangeEvent(ComponentChangeEvent.MOTOR_CHANGE);
}
@Override
public double getMotorDelay(String id) {
Double delay = ejectionDelays.get(id);
if (delay == null)
return Motor.PLUGGED;
return delay;
}
@Override
public void setMotorDelay(String id, double delay) {
ejectionDelays.put(id, delay);
fireComponentChangeEvent(ComponentChangeEvent.MOTOR_CHANGE);
}
@Override
public int getMotorCount() {
return 1;
@ -404,35 +406,38 @@ public class BodyTube extends SymmetricComponent implements MotorMount, Coaxial
public double getMotorMountDiameter() {
return getInnerRadius() * 2;
}
// FIXME - rename to getDefaultIgnitionEvent
@Override
public IgnitionEvent getIgnitionEvent() {
return ignitionEvent;
public MotorConfiguration.IgnitionEvent getIgnitionEvent() {
return getDefaultFlightConfiguration().getIgnitionEvent();
}
// FIXME
@Override
public void setIgnitionEvent(IgnitionEvent event) {
public void setIgnitionEvent(MotorConfiguration.IgnitionEvent event) {
MotorConfiguration.IgnitionEvent ignitionEvent = getIgnitionEvent();
if (ignitionEvent == event)
return;
ignitionEvent = event;
getDefaultFlightConfiguration().setIgnitionEvent(event);
fireComponentChangeEvent(ComponentChangeEvent.EVENT_CHANGE);
}
// FIXME
@Override
public double getIgnitionDelay() {
return ignitionDelay;
return getDefaultFlightConfiguration().getIgnitionDelay();
}
// FIXME
@Override
public void setIgnitionDelay(double delay) {
double ignitionDelay = getIgnitionDelay();
if (MathUtil.equals(delay, ignitionDelay))
return;
ignitionDelay = delay;
getDefaultFlightConfiguration().setIgnitionDelay(delay);
fireComponentChangeEvent(ComponentChangeEvent.EVENT_CHANGE);
}
@Override
public double getMotorOverhang() {
return overhang;
@ -449,7 +454,7 @@ public class BodyTube extends SymmetricComponent implements MotorMount, Coaxial
@Override
public Coordinate getMotorPosition(String id) {
Motor motor = motors.get(id);
Motor motor = getMotor(id);
if (motor == null) {
throw new IllegalArgumentException("No motor with id " + id + " defined.");
}
@ -470,8 +475,7 @@ public class BodyTube extends SymmetricComponent implements MotorMount, Coaxial
@Override
protected RocketComponent copyWithOriginalID() {
RocketComponent c = super.copyWithOriginalID();
((BodyTube) c).motors = (HashMap<String, Motor>) motors.clone();
((BodyTube) c).ejectionDelays = (HashMap<String, Double>) ejectionDelays.clone();
((BodyTube) c).baseMotorMount = baseMotorMount.clone();
return c;
}
}

View File

@ -49,7 +49,7 @@ public class DeploymentConfiguration implements Cloneable {
description += " + " + deployDelay + "s";
}
if ( deployEvent == DeployEvent.ALTITUDE && deployAltitude != 0 ) {
description += " " + UnitGroup.UNITS_DISTANCE.fromUnit(deployAltitude);
description += " " + UnitGroup.UNITS_DISTANCE.toString(deployAltitude);
}
return description;
}

View File

@ -19,22 +19,17 @@ import net.sf.openrocket.util.MathUtil;
*
* @author Sampo Niskanen <sampo.niskanen@iki.fi>
*/
public class InnerTube extends ThicknessRingComponent
implements Clusterable, RadialParent, MotorMount {
public class InnerTube extends ThicknessRingComponent implements Clusterable, RadialParent, MotorMount {
private static final Translator trans = Application.getTranslator();
private ClusterConfiguration cluster = ClusterConfiguration.SINGLE;
private double clusterScale = 1.0;
private double clusterRotation = 0.0;
private boolean motorMount = false;
private HashMap<String, Double> ejectionDelays = new HashMap<String, Double>();
private HashMap<String, Motor> motors = new HashMap<String, Motor>();
private IgnitionEvent ignitionEvent = IgnitionEvent.AUTOMATIC;
private double ignitionDelay = 0;
private double overhang = 0;
private BaseMotorMount baseMotorMount = new BaseMotorMount();
/**
* Main constructor.
@ -217,16 +212,47 @@ public class InnerTube extends ThicknessRingComponent
return newArray;
}
//////////////// Motor mount /////////////////
@Override
public MotorConfiguration getFlightConfiguration(String configId) {
return baseMotorMount.getFlightConfiguration(configId);
}
@Override
public void setFlightConfiguration(String configId, MotorConfiguration config) {
baseMotorMount.setFlightConfiguration(configId, config);
fireComponentChangeEvent(ComponentChangeEvent.ALL_CHANGE);
}
@Override
public void cloneFlightConfiguration(String oldConfigId, String newConfigId) {
baseMotorMount.cloneFlightConfiguration(oldConfigId, newConfigId);
}
@Override
public MotorConfiguration getDefaultFlightConfiguration() {
return baseMotorMount.getDefaultFlightConfiguration();
}
@Override
public void setDefaultFlightConfiguration(MotorConfiguration config) {
baseMotorMount.setDefaultFlightConfiguration(config);
fireComponentChangeEvent(ComponentChangeEvent.ALL_CHANGE);
}
@Override
public boolean isMotorMount() {
return motorMount;
}
@Override
public void setMotorMount(boolean mount) {
if (motorMount == mount)
@ -235,49 +261,6 @@ public class InnerTube extends ThicknessRingComponent
fireComponentChangeEvent(ComponentChangeEvent.MOTOR_CHANGE);
}
@Override
public Motor getMotor(String id) {
if (id == null)
return null;
// Check whether the id is valid for the current rocket
RocketComponent root = this.getRoot();
if (!(root instanceof Rocket))
return null;
if (!((Rocket) root).isFlightConfigurationID(id))
return null;
return motors.get(id);
}
@Override
public void setMotor(String id, Motor motor) {
if (id == null) {
if (motor != null) {
throw new IllegalArgumentException("Cannot set non-null motor for id null");
}
}
Motor current = motors.get(id);
if ((motor == null && current == null) ||
(motor != null && motor.equals(current)))
return;
motors.put(id, motor);
fireComponentChangeEvent(ComponentChangeEvent.MOTOR_CHANGE);
}
@Override
public double getMotorDelay(String id) {
Double delay = ejectionDelays.get(id);
if (delay == null)
return Motor.PLUGGED;
return delay;
}
@Override
public void setMotorDelay(String id, double delay) {
ejectionDelays.put(id, delay);
fireComponentChangeEvent(ComponentChangeEvent.MOTOR_CHANGE);
}
@Deprecated
@Override
@ -290,34 +273,62 @@ public class InnerTube extends ThicknessRingComponent
return getInnerRadius() * 2;
}
// FIXME - rename to getDefaultIgnitionEvent
@Override
public IgnitionEvent getIgnitionEvent() {
return ignitionEvent;
public MotorConfiguration.IgnitionEvent getIgnitionEvent() {
return getDefaultFlightConfiguration().getIgnitionEvent();
}
// FIXME
@Override
public void setIgnitionEvent(IgnitionEvent event) {
public void setIgnitionEvent(MotorConfiguration.IgnitionEvent event) {
MotorConfiguration.IgnitionEvent ignitionEvent = getIgnitionEvent();
if (ignitionEvent == event)
return;
ignitionEvent = event;
getDefaultFlightConfiguration().setIgnitionEvent(event);
fireComponentChangeEvent(ComponentChangeEvent.EVENT_CHANGE);
}
// FIXME
@Override
public double getIgnitionDelay() {
return ignitionDelay;
return getDefaultFlightConfiguration().getIgnitionDelay();
}
// FIXME
@Override
public void setIgnitionDelay(double delay) {
double ignitionDelay = getIgnitionDelay();
if (MathUtil.equals(delay, ignitionDelay))
return;
ignitionDelay = delay;
getDefaultFlightConfiguration().setIgnitionDelay(delay);
fireComponentChangeEvent(ComponentChangeEvent.EVENT_CHANGE);
}
@Override
public Motor getMotor(String id) {
return baseMotorMount.getMotor(id);
}
@Override
public void setMotor(String id, Motor motor) {
if (baseMotorMount.setMotor(id, motor) ) {
fireComponentChangeEvent(ComponentChangeEvent.MOTOR_CHANGE);
}
}
public double getMotorDelay(String id) {
return baseMotorMount.getMotorDelay(id);
}
public void setMotorDelay(String id, double delay) {
if (baseMotorMount.setMotorDelay(id, delay) ) {
fireComponentChangeEvent(ComponentChangeEvent.MOTOR_CHANGE);
}
}
@Override
public double getMotorOverhang() {
return overhang;
@ -334,7 +345,7 @@ public class InnerTube extends ThicknessRingComponent
@Override
public Coordinate getMotorPosition(String id) {
Motor motor = motors.get(id);
Motor motor = getMotor(id);
if (motor == null) {
throw new IllegalArgumentException("No motor with id " + id + " defined.");
}
@ -352,8 +363,7 @@ public class InnerTube extends ThicknessRingComponent
@Override
protected RocketComponent copyWithOriginalID() {
RocketComponent c = super.copyWithOriginalID();
((InnerTube) c).motors = (HashMap<String, Motor>) motors.clone();
((InnerTube) c).ejectionDelays = (HashMap<String, Double>) ejectionDelays.clone();
((InnerTube) c).baseMotorMount = baseMotorMount.clone();
return c;
}

View File

@ -0,0 +1,130 @@
package net.sf.openrocket.rocketcomponent;
import net.sf.openrocket.l10n.Translator;
import net.sf.openrocket.motor.Motor;
import net.sf.openrocket.simulation.FlightEvent;
import net.sf.openrocket.startup.Application;
public class MotorConfiguration implements Cloneable {
private MotorConfiguration.IgnitionEvent ignitionEvent = MotorConfiguration.IgnitionEvent.AUTOMATIC;
private double ignitionDelay = 0;
private Motor motor = null;
private Double ejectionDelay = 0d;
public MotorConfiguration.IgnitionEvent getIgnitionEvent() {
return ignitionEvent;
}
public void setIgnitionEvent(MotorConfiguration.IgnitionEvent ignitionEvent) {
this.ignitionEvent = ignitionEvent;
}
public double getIgnitionDelay() {
return ignitionDelay;
}
public void setIgnitionDelay(double ignitionDelay) {
this.ignitionDelay = ignitionDelay;
}
public Motor getMotor() {
return motor;
}
public void setMotor(Motor motor) {
this.motor = motor;
}
public Double getEjectionDelay() {
return ejectionDelay;
}
public void setEjectionDelay(Double ejectionDelay) {
this.ejectionDelay = ejectionDelay;
}
@Override
protected MotorConfiguration clone() {
MotorConfiguration clone = new MotorConfiguration();
clone.motor = motor;
clone.ejectionDelay = ejectionDelay;
clone.ignitionDelay = ignitionDelay;
clone.ignitionEvent = ignitionEvent;
return clone;
}
public static enum IgnitionEvent {
//// Automatic (launch or ejection charge)
AUTOMATIC("MotorMount.IgnitionEvent.AUTOMATIC") {
@Override
public boolean isActivationEvent(FlightEvent e, RocketComponent source) {
int count = source.getRocket().getStageCount();
int stage = source.getStageNumber();
if (stage == count - 1) {
return LAUNCH.isActivationEvent(e, source);
} else {
return EJECTION_CHARGE.isActivationEvent(e, source);
}
}
},
//// Launch
LAUNCH("MotorMount.IgnitionEvent.LAUNCH") {
@Override
public boolean isActivationEvent(FlightEvent e, RocketComponent source) {
return (e.getType() == FlightEvent.Type.LAUNCH);
}
},
//// First ejection charge of previous stage
EJECTION_CHARGE("MotorMount.IgnitionEvent.EJECTION_CHARGE") {
@Override
public boolean isActivationEvent(FlightEvent e, RocketComponent source) {
if (e.getType() != FlightEvent.Type.EJECTION_CHARGE)
return false;
int charge = e.getSource().getStageNumber();
int mount = source.getStageNumber();
return (mount + 1 == charge);
}
},
//// First burnout of previous stage
BURNOUT("MotorMount.IgnitionEvent.BURNOUT") {
@Override
public boolean isActivationEvent(FlightEvent e, RocketComponent source) {
if (e.getType() != FlightEvent.Type.BURNOUT)
return false;
int charge = e.getSource().getStageNumber();
int mount = source.getStageNumber();
return (mount + 1 == charge);
}
},
//// Never
NEVER("MotorMount.IgnitionEvent.NEVER") {
@Override
public boolean isActivationEvent(FlightEvent e, RocketComponent source) {
return false;
}
},
;
private static final Translator trans = Application.getTranslator();
private final String description;
IgnitionEvent(String description) {
this.description = description;
}
public abstract boolean isActivationEvent(FlightEvent e, RocketComponent source);
@Override
public String toString() {
return trans.get(description);
}
}
}

View File

@ -1,85 +1,10 @@
package net.sf.openrocket.rocketcomponent;
import net.sf.openrocket.l10n.Translator;
import net.sf.openrocket.motor.Motor;
import net.sf.openrocket.simulation.FlightEvent;
import net.sf.openrocket.startup.Application;
import net.sf.openrocket.util.ChangeSource;
import net.sf.openrocket.util.Coordinate;
public interface MotorMount extends ChangeSource {
public static enum IgnitionEvent {
//// Automatic (launch or ejection charge)
AUTOMATIC("MotorMount.IgnitionEvent.AUTOMATIC") {
@Override
public boolean isActivationEvent(FlightEvent e, RocketComponent source) {
int count = source.getRocket().getStageCount();
int stage = source.getStageNumber();
if (stage == count - 1) {
return LAUNCH.isActivationEvent(e, source);
} else {
return EJECTION_CHARGE.isActivationEvent(e, source);
}
}
},
//// Launch
LAUNCH("MotorMount.IgnitionEvent.LAUNCH") {
@Override
public boolean isActivationEvent(FlightEvent e, RocketComponent source) {
return (e.getType() == FlightEvent.Type.LAUNCH);
}
},
//// First ejection charge of previous stage
EJECTION_CHARGE("MotorMount.IgnitionEvent.EJECTION_CHARGE") {
@Override
public boolean isActivationEvent(FlightEvent e, RocketComponent source) {
if (e.getType() != FlightEvent.Type.EJECTION_CHARGE)
return false;
int charge = e.getSource().getStageNumber();
int mount = source.getStageNumber();
return (mount + 1 == charge);
}
},
//// First burnout of previous stage
BURNOUT("MotorMount.IgnitionEvent.BURNOUT") {
@Override
public boolean isActivationEvent(FlightEvent e, RocketComponent source) {
if (e.getType() != FlightEvent.Type.BURNOUT)
return false;
int charge = e.getSource().getStageNumber();
int mount = source.getStageNumber();
return (mount + 1 == charge);
}
},
//// Never
NEVER("MotorMount.IgnitionEvent.NEVER") {
@Override
public boolean isActivationEvent(FlightEvent e, RocketComponent source) {
return false;
}
},
;
private static final Translator trans = Application.getTranslator();
private final String description;
IgnitionEvent(String description) {
this.description = description;
}
public abstract boolean isActivationEvent(FlightEvent e, RocketComponent source);
@Override
public String toString() {
return trans.get(description);
}
};
public interface MotorMount extends ChangeSource, SupportsFlightConfiguration<MotorConfiguration> {
/**
* Is the component currently a motor mount.
@ -150,16 +75,16 @@ public interface MotorMount extends ChangeSource {
/**
* Return the event that ignites this motor.
*
* @return the {@link IgnitionEvent} that ignites this motor.
* @return the {@link MotorConfiguration.IgnitionEvent} that ignites this motor.
*/
public IgnitionEvent getIgnitionEvent();
public MotorConfiguration.IgnitionEvent getIgnitionEvent();
/**
* Sets the event that ignites this motor.
*
* @param event the {@link IgnitionEvent} that ignites this motor.
* @param event the {@link MotorConfiguration.IgnitionEvent} that ignites this motor.
*/
public void setIgnitionEvent(IgnitionEvent event);
public void setIgnitionEvent(MotorConfiguration.IgnitionEvent event);
/**

View File

@ -18,7 +18,8 @@ import net.sf.openrocket.rocketcomponent.InnerTube;
import net.sf.openrocket.rocketcomponent.InternalComponent;
import net.sf.openrocket.rocketcomponent.LaunchLug;
import net.sf.openrocket.rocketcomponent.MassComponent;
import net.sf.openrocket.rocketcomponent.MotorMount.IgnitionEvent;
import net.sf.openrocket.rocketcomponent.MotorConfiguration;
import net.sf.openrocket.rocketcomponent.MotorConfiguration.IgnitionEvent;
import net.sf.openrocket.rocketcomponent.NoseCone;
import net.sf.openrocket.rocketcomponent.ReferenceType;
import net.sf.openrocket.rocketcomponent.Rocket;
@ -135,7 +136,7 @@ public class TestRockets {
body.setThickness(rnd(0.002));
body.setFilled(rnd.nextBoolean());
body.setIgnitionDelay(rnd.nextDouble() * 3);
body.setIgnitionEvent((IgnitionEvent) randomEnum(IgnitionEvent.class));
body.setIgnitionEvent((MotorConfiguration.IgnitionEvent) randomEnum(MotorConfiguration.IgnitionEvent.class));
body.setLength(rnd(0.3));
body.setMotorMount(rnd.nextBoolean());
body.setMotorOverhang(rnd.nextGaussian() * 0.03);