[fixes #358] Fix multi-component motor mount editing
This commit is contained in:
parent
ace8b2c24b
commit
33b19ecc04
@ -7,9 +7,13 @@ import net.sf.openrocket.rocketcomponent.InnerTube;
|
||||
import net.sf.openrocket.rocketcomponent.MotorMount;
|
||||
import net.sf.openrocket.rocketcomponent.RocketComponent;
|
||||
import net.sf.openrocket.startup.Application;
|
||||
import net.sf.openrocket.util.ArrayList;
|
||||
import net.sf.openrocket.util.Coordinate;
|
||||
import net.sf.openrocket.util.Inertia;
|
||||
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* A single motor configuration. This includes the selected motor
|
||||
* and the ejection charge delay.
|
||||
@ -28,6 +32,8 @@ public class MotorConfiguration implements FlightConfigurableParameter<MotorConf
|
||||
private boolean ignitionOveride = false;
|
||||
private double ignitionDelay = 0.0;
|
||||
private IgnitionEvent ignitionEvent = IgnitionEvent.AUTOMATIC;
|
||||
|
||||
private final List<MotorConfiguration> configListeners = new LinkedList<>();
|
||||
|
||||
private int modID = 0;
|
||||
|
||||
@ -84,6 +90,10 @@ public class MotorConfiguration implements FlightConfigurableParameter<MotorConf
|
||||
|
||||
public void setMotor(Motor motor){
|
||||
this.motor = motor;
|
||||
|
||||
for (MotorConfiguration listener : configListeners) {
|
||||
listener.setMotor(motor);
|
||||
}
|
||||
}
|
||||
|
||||
public Motor getMotor() {
|
||||
@ -100,6 +110,10 @@ public class MotorConfiguration implements FlightConfigurableParameter<MotorConf
|
||||
|
||||
public void setEjectionDelay(double delay) {
|
||||
this.ejectionDelay = delay;
|
||||
|
||||
for (MotorConfiguration listener : configListeners) {
|
||||
listener.setEjectionDelay(delay);
|
||||
}
|
||||
}
|
||||
|
||||
public Coordinate getPosition(){
|
||||
@ -117,6 +131,10 @@ public class MotorConfiguration implements FlightConfigurableParameter<MotorConf
|
||||
this.ignitionOveride = false;
|
||||
setIgnitionDelay(0);
|
||||
setIgnitionEvent(IgnitionEvent.AUTOMATIC);
|
||||
|
||||
for (MotorConfiguration listener : configListeners) {
|
||||
listener.useDefaultIgnition();
|
||||
}
|
||||
}
|
||||
|
||||
public double getIgnitionDelay() {
|
||||
@ -126,6 +144,10 @@ public class MotorConfiguration implements FlightConfigurableParameter<MotorConf
|
||||
public void setIgnitionDelay(final double _delay) {
|
||||
this.ignitionDelay = _delay;
|
||||
this.ignitionOveride = true;
|
||||
|
||||
for (MotorConfiguration listener : configListeners) {
|
||||
listener.setIgnitionDelay(_delay);
|
||||
}
|
||||
}
|
||||
|
||||
public IgnitionEvent getIgnitionEvent() {
|
||||
@ -135,6 +157,10 @@ public class MotorConfiguration implements FlightConfigurableParameter<MotorConf
|
||||
public void setIgnitionEvent(final IgnitionEvent _event) {
|
||||
this.ignitionEvent = _event;
|
||||
this.ignitionOveride = true;
|
||||
|
||||
for (MotorConfiguration listener : configListeners) {
|
||||
listener.setIgnitionEvent(_event);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -269,5 +295,29 @@ public class MotorConfiguration implements FlightConfigurableParameter<MotorConf
|
||||
return buf.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a new config listener that will undergo the same configuration changes as this configuration.
|
||||
* @param listener new config listener
|
||||
* @return true if listener was successfully added, false if not
|
||||
*/
|
||||
public boolean addConfigListener(MotorConfiguration listener) {
|
||||
if (listener == null) {
|
||||
return false;
|
||||
}
|
||||
configListeners.add(listener);
|
||||
return true;
|
||||
}
|
||||
|
||||
public void removeConfigListener(MotorConfiguration listener) {
|
||||
configListeners.remove(listener);
|
||||
}
|
||||
|
||||
public void clearConfigListeners() {
|
||||
configListeners.clear();
|
||||
}
|
||||
|
||||
public List<MotorConfiguration> getConfigListeners() {
|
||||
return configListeners;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -520,4 +520,30 @@ public class BodyTube extends SymmetricComponent implements BoxBounded, MotorMou
|
||||
public InsideColorComponentHandler getInsideColorComponentHandler() {
|
||||
return this.insideColorComponentHandler;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean addConfigListener(RocketComponent listener) {
|
||||
boolean success = super.addConfigListener(listener);
|
||||
if (listener instanceof BodyTube) {
|
||||
MotorConfiguration config = ((BodyTube) listener).getDefaultMotorConfig();
|
||||
success = success && getDefaultMotorConfig().addConfigListener(config);
|
||||
return success;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeConfigListener(RocketComponent listener) {
|
||||
super.removeConfigListener(listener);
|
||||
if (listener instanceof BodyTube) {
|
||||
MotorConfiguration config = ((BodyTube) listener).getDefaultMotorConfig();
|
||||
getDefaultMotorConfig().removeConfigListener(config);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clearConfigListeners() {
|
||||
super.clearConfigListeners();
|
||||
getDefaultMotorConfig().clearConfigListeners();
|
||||
}
|
||||
}
|
||||
|
@ -445,5 +445,31 @@ public class InnerTube extends ThicknessRingComponent implements AxialPositionab
|
||||
public String toMotorDebug( ){
|
||||
return this.motors.toDebug();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean addConfigListener(RocketComponent listener) {
|
||||
boolean success = super.addConfigListener(listener);
|
||||
if (listener instanceof InnerTube) {
|
||||
MotorConfiguration config = ((InnerTube) listener).getDefaultMotorConfig();
|
||||
success = success && getDefaultMotorConfig().addConfigListener(config);
|
||||
return success;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeConfigListener(RocketComponent listener) {
|
||||
super.removeConfigListener(listener);
|
||||
if (listener instanceof InnerTube) {
|
||||
MotorConfiguration config = ((InnerTube) listener).getDefaultMotorConfig();
|
||||
getDefaultMotorConfig().removeConfigListener(config);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clearConfigListeners() {
|
||||
super.clearConfigListeners();
|
||||
getDefaultMotorConfig().clearConfigListeners();
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user