[fixes #358] Fix multi-component recovery device deployment
This commit is contained in:
parent
79973e2cfb
commit
9a77baf643
@ -5,9 +5,11 @@ import net.sf.openrocket.l10n.Translator;
|
||||
import net.sf.openrocket.simulation.FlightEvent;
|
||||
import net.sf.openrocket.startup.Application;
|
||||
import net.sf.openrocket.unit.UnitGroup;
|
||||
import net.sf.openrocket.util.ArrayList;
|
||||
import net.sf.openrocket.util.MathUtil;
|
||||
import net.sf.openrocket.util.Pair;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
public class DeploymentConfiguration implements FlightConfigurableParameter<DeploymentConfiguration> {
|
||||
@ -87,6 +89,8 @@ public class DeploymentConfiguration implements FlightConfigurableParameter<Depl
|
||||
private DeployEvent deployEvent = DeployEvent.EJECTION;
|
||||
private double deployAltitude = 200;
|
||||
private double deployDelay = 0;
|
||||
|
||||
private List<DeploymentConfiguration> configListeners = new ArrayList<>();
|
||||
|
||||
public boolean isActivationEvent(FlightEvent e, RocketComponent source) {
|
||||
return deployEvent.isActivationEvent(this, e, source);
|
||||
@ -97,6 +101,10 @@ public class DeploymentConfiguration implements FlightConfigurableParameter<Depl
|
||||
}
|
||||
|
||||
public void setDeployEvent(DeployEvent deployEvent) {
|
||||
for (DeploymentConfiguration listener : configListeners) {
|
||||
listener.setDeployEvent(deployEvent);
|
||||
}
|
||||
|
||||
if (this.deployEvent == deployEvent) {
|
||||
return;
|
||||
}
|
||||
@ -111,6 +119,10 @@ public class DeploymentConfiguration implements FlightConfigurableParameter<Depl
|
||||
}
|
||||
|
||||
public void setDeployAltitude(double deployAltitude) {
|
||||
for (DeploymentConfiguration listener : configListeners) {
|
||||
listener.setDeployAltitude(deployAltitude);
|
||||
}
|
||||
|
||||
if (MathUtil.equals(this.deployAltitude, deployAltitude)) {
|
||||
return;
|
||||
}
|
||||
@ -122,6 +134,10 @@ public class DeploymentConfiguration implements FlightConfigurableParameter<Depl
|
||||
}
|
||||
|
||||
public void setDeployDelay(double deployDelay) {
|
||||
for (DeploymentConfiguration listener : configListeners) {
|
||||
listener.setDeployDelay(deployDelay);
|
||||
}
|
||||
|
||||
if (MathUtil.equals(this.deployDelay, deployDelay)) {
|
||||
return;
|
||||
}
|
||||
@ -169,4 +185,29 @@ public class DeploymentConfiguration implements FlightConfigurableParameter<Depl
|
||||
public int hashCode() {
|
||||
return Objects.hash(deployEvent, deployAltitude, deployDelay);
|
||||
}
|
||||
|
||||
/**
|
||||
* 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(DeploymentConfiguration listener) {
|
||||
if (listener == null) {
|
||||
return false;
|
||||
}
|
||||
configListeners.add(listener);
|
||||
return true;
|
||||
}
|
||||
|
||||
public void removeConfigListener(DeploymentConfiguration listener) {
|
||||
configListeners.remove(listener);
|
||||
}
|
||||
|
||||
public void clearConfigListeners() {
|
||||
configListeners.clear();
|
||||
}
|
||||
|
||||
public List<DeploymentConfiguration> getConfigListeners() {
|
||||
return configListeners;
|
||||
}
|
||||
}
|
@ -138,4 +138,33 @@ public abstract class RecoveryDevice extends MassObject implements FlightConfigu
|
||||
copy.deploymentConfigurations = new FlightConfigurableParameterSet<DeploymentConfiguration>(deploymentConfigurations);
|
||||
return copy;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean addConfigListener(RocketComponent listener) {
|
||||
boolean success = super.addConfigListener(listener);
|
||||
if (listener instanceof RecoveryDevice) {
|
||||
DeploymentConfiguration thisConfig = getDeploymentConfigurations().getDefault();
|
||||
DeploymentConfiguration listenerConfig = ((RecoveryDevice) listener).getDeploymentConfigurations().getDefault();
|
||||
success = success && thisConfig.addConfigListener(listenerConfig);
|
||||
return success;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeConfigListener(RocketComponent listener) {
|
||||
super.removeConfigListener(listener);
|
||||
if (listener instanceof RecoveryDevice) {
|
||||
DeploymentConfiguration thisConfig = getDeploymentConfigurations().getDefault();
|
||||
DeploymentConfiguration listenerConfig = ((RecoveryDevice) listener).getDeploymentConfigurations().getDefault();
|
||||
thisConfig.removeConfigListener(listenerConfig);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clearConfigListeners() {
|
||||
super.clearConfigListeners();
|
||||
DeploymentConfiguration thisConfig = getDeploymentConfigurations().getDefault();
|
||||
thisConfig.clearConfigListeners();
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user