[fixes #358] Fix multi-component motor mount editing

This commit is contained in:
SiboVG 2022-02-18 18:28:45 +01:00
parent ace8b2c24b
commit 33b19ecc04
3 changed files with 102 additions and 0 deletions

View File

@ -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;
}
}

View File

@ -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();
}
}

View File

@ -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();
}
}