[fixes #358] Move configListener's set-positions to front

Moving it to the front ensures that the method doesn't exit before the listeners' methods are set (because of a return in the main component) + causes the fireComponentChangeEvent to be in the end
This commit is contained in:
SiboVG 2022-02-19 01:37:08 +01:00
parent 117c0c76ca
commit e8a2fbf449
30 changed files with 769 additions and 751 deletions

View File

@ -65,16 +65,16 @@ public abstract class BodyComponent extends ExternalComponent {
* clearPreset(). (BodyTube allows changing length without resetting the preset.)
*/
public void setLength(double length) {
if (this.length == length)
return;
this.length = Math.max(length, 0);
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof BodyComponent) {
((BodyComponent) listener).setLength(length);
}
}
if (this.length == length)
return;
this.length = Math.max(length, 0);
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
}
@Override

View File

@ -115,6 +115,12 @@ public class BodyTube extends SymmetricComponent implements BoxBounded, MotorMou
*/
@Override
public void setOuterRadius(double radius) {
for (RocketComponent listener : configListeners) {
if (listener instanceof BodyTube) {
((BodyTube) listener).setOuterRadius(radius);
}
}
if ((this.outerRadius == radius) && (autoRadius == false))
return;
@ -125,12 +131,6 @@ public class BodyTube extends SymmetricComponent implements BoxBounded, MotorMou
this.thickness = this.outerRadius;
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
clearPreset();
for (RocketComponent listener : configListeners) {
if (listener instanceof BodyTube) {
((BodyTube) listener).setOuterRadius(radius);
}
}
}
@ -146,18 +146,18 @@ public class BodyTube extends SymmetricComponent implements BoxBounded, MotorMou
* Sets whether the radius is selected automatically or not.
*/
public void setOuterRadiusAutomatic(boolean auto) {
for (RocketComponent listener : configListeners) {
if (listener instanceof BodyTube) {
((BodyTube) listener).setOuterRadiusAutomatic(auto);
}
}
if (autoRadius == auto)
return;
autoRadius = auto;
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
clearPreset();
for (RocketComponent listener : configListeners) {
if (listener instanceof BodyTube) {
((BodyTube) listener).setOuterRadiusAutomatic(auto);
}
}
}
@Override
@ -250,13 +250,13 @@ public class BodyTube extends SymmetricComponent implements BoxBounded, MotorMou
@Override
public void setInnerRadius(double r) {
setThickness(getOuterRadius() - r);
for (RocketComponent listener : configListeners) {
if (listener instanceof BodyTube) {
((BodyTube) listener).setInnerRadius(r);
}
}
setThickness(getOuterRadius() - r);
}
@ -391,6 +391,16 @@ public class BodyTube extends SymmetricComponent implements BoxBounded, MotorMou
@Override
public void setMotorConfig(MotorConfiguration newMotorConfig, FlightConfigurationId fcid){
for (RocketComponent listener : configListeners) {
if (listener instanceof BodyTube) {
if (newMotorConfig != null) {
BodyTube tube = (BodyTube) listener;
MotorConfiguration config = tube.getMotorConfig(fcid);
config.copyFrom(newMotorConfig);
}
}
}
if(null == newMotorConfig){
this.motors.set( fcid, null);
}else{
@ -402,16 +412,6 @@ public class BodyTube extends SymmetricComponent implements BoxBounded, MotorMou
}
this.isActingMount=true;
for (RocketComponent listener : configListeners) {
if (listener instanceof BodyTube) {
if (newMotorConfig != null) {
BodyTube tube = (BodyTube) listener;
MotorConfiguration config = tube.getMotorConfig(fcid);
config.copyFrom(newMotorConfig);
}
}
}
}
@ -432,16 +432,16 @@ public class BodyTube extends SymmetricComponent implements BoxBounded, MotorMou
@Override
public void setMotorMount(boolean _active){
if (this.isActingMount == _active)
return;
this.isActingMount = _active;
fireComponentChangeEvent(ComponentChangeEvent.MOTOR_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof BodyTube) {
((BodyTube) listener).setMotorMount(_active);
}
}
if (this.isActingMount == _active)
return;
this.isActingMount = _active;
fireComponentChangeEvent(ComponentChangeEvent.MOTOR_CHANGE);
}
@Override
@ -474,16 +474,16 @@ public class BodyTube extends SymmetricComponent implements BoxBounded, MotorMou
@Override
public void setMotorOverhang(double overhang) {
if (MathUtil.equals(this.overhang, overhang))
return;
this.overhang = overhang;
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof BodyTube) {
((BodyTube) listener).setMotorOverhang(overhang);
}
}
if (MathUtil.equals(this.overhang, overhang))
return;
this.overhang = overhang;
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
}

View File

@ -142,6 +142,12 @@ public abstract class ComponentAssembly extends RocketComponent implements Axial
@Override
public void setAxialMethod( final AxialMethod newMethod ) {
for (RocketComponent listener : configListeners) {
if (listener instanceof ComponentAssembly) {
((ComponentAssembly) listener).setAxialMethod(newMethod);
}
}
if (null == this.parent) {
throw new NullPointerException(" a Stage requires a parent before any positioning! ");
}
@ -159,12 +165,6 @@ public abstract class ComponentAssembly extends RocketComponent implements Axial
throw new BugException("Unrecognized subclass of Component Assembly. Please update this method.");
}
fireComponentChangeEvent(ComponentChangeEvent.NONFUNCTIONAL_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof ComponentAssembly) {
((ComponentAssembly) listener).setAxialMethod(newMethod);
}
}
}
@Override

View File

@ -60,31 +60,31 @@ public class EllipticalFinSet extends FinSet {
}
public void setHeight(double height) {
if (MathUtil.equals(this.height, height))
return;
this.height = height;
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof EllipticalFinSet) {
((EllipticalFinSet) listener).setHeight(height);
}
}
if (MathUtil.equals(this.height, height))
return;
this.height = height;
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
}
public void setLength(double length) {
if (MathUtil.equals(this.length, length))
return;
this.length = length;
validateFinTabLength();
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof EllipticalFinSet) {
((EllipticalFinSet) listener).setLength(length);
}
}
if (MathUtil.equals(this.length, length))
return;
this.length = length;
validateFinTabLength();
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
}

View File

@ -127,16 +127,16 @@ public abstract class ExternalComponent extends RocketComponent {
}
public void setFinish(Finish finish) {
if (this.finish == finish)
return;
this.finish = finish;
fireComponentChangeEvent(ComponentChangeEvent.AERODYNAMIC_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof ExternalComponent) {
((ExternalComponent) listener).setFinish(finish);
}
}
if (this.finish == finish)
return;
this.finish = finish;
fireComponentChangeEvent(ComponentChangeEvent.AERODYNAMIC_CHANGE);
}

View File

@ -152,6 +152,12 @@ public abstract class FinSet extends ExternalComponent implements AxialPositiona
* @param n The number of fins, greater of equal to one.
*/
public void setFinCount(int n) {
for (RocketComponent listener : configListeners) {
if (listener instanceof FinSet) {
((FinSet) listener).setFinCount(n);
}
}
if (finCount == n)
return;
if (n < 1)
@ -163,12 +169,6 @@ public abstract class FinSet extends ExternalComponent implements AxialPositiona
finRotationIncrement = Transformation.rotate_x(2 * Math.PI / finCount);
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof FinSet) {
((FinSet) listener).setFinCount(n);
}
}
}
public Transformation getFinRotationTransformation() {
@ -193,13 +193,13 @@ public abstract class FinSet extends ExternalComponent implements AxialPositiona
* @param r The base rotation in radians
*/
public void setBaseRotation(double r) {
setAngleOffset(r);
for (RocketComponent listener : configListeners) {
if (listener instanceof FinSet) {
((FinSet) listener).setBaseRotation(r);
}
}
setAngleOffset(r);
}
/**
@ -214,18 +214,18 @@ public abstract class FinSet extends ExternalComponent implements AxialPositiona
* @param newCantRadians -- new cant angle, in radians
*/
public void setCantAngle(final double newCantRadians) {
for (RocketComponent listener : configListeners) {
if (listener instanceof FinSet) {
((FinSet) listener).setCantAngle(newCantRadians);
}
}
final double clampedCant = MathUtil.clamp(newCantRadians, -MAX_CANT_RADIANS, MAX_CANT_RADIANS);
if (MathUtil.equals(clampedCant, this.cantRadians))
return;
this.cantRadians = clampedCant;
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof FinSet) {
((FinSet) listener).setCantAngle(newCantRadians);
}
}
}
public Transformation getCantRotation() {
@ -244,16 +244,16 @@ public abstract class FinSet extends ExternalComponent implements AxialPositiona
}
public void setThickness(double r) {
if (thickness == r)
return;
thickness = Math.max(r, 0);
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof FinSet) {
((FinSet) listener).setThickness(r);
}
}
if (thickness == r)
return;
thickness = Math.max(r, 0);
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
}
@ -262,16 +262,16 @@ public abstract class FinSet extends ExternalComponent implements AxialPositiona
}
public void setCrossSection(CrossSection cs) {
if (crossSection == cs)
return;
crossSection = cs;
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof FinSet) {
((FinSet) listener).setCrossSection(cs);
}
}
if (crossSection == cs)
return;
crossSection = cs;
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
}
public double getTabHeight() {
@ -295,6 +295,12 @@ public abstract class FinSet extends ExternalComponent implements AxialPositiona
*
*/
public void setTabHeight(final double newTabHeight) {
for (RocketComponent listener : configListeners) {
if (listener instanceof FinSet) {
((FinSet) listener).setTabHeight(newTabHeight);
}
}
if (MathUtil.equals(this.tabHeight, MathUtil.max(newTabHeight, 0))){
return;
}
@ -302,12 +308,6 @@ public abstract class FinSet extends ExternalComponent implements AxialPositiona
tabHeight = newTabHeight;
validateFinTabHeight();
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof FinSet) {
((FinSet) listener).setTabHeight(newTabHeight);
}
}
}
@ -319,6 +319,12 @@ public abstract class FinSet extends ExternalComponent implements AxialPositiona
* set tab length
*/
public void setTabLength(final double lengthRequest) {
for (RocketComponent listener : configListeners) {
if (listener instanceof FinSet) {
((FinSet) listener).setTabLength(lengthRequest);
}
}
if (MathUtil.equals(tabLength, MathUtil.max(lengthRequest, 0))) {
return;
}
@ -328,12 +334,6 @@ public abstract class FinSet extends ExternalComponent implements AxialPositiona
updateTabPosition();
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof FinSet) {
((FinSet) listener).setTabLength(lengthRequest);
}
}
}
public void updateTabPosition(){
@ -346,16 +346,16 @@ public abstract class FinSet extends ExternalComponent implements AxialPositiona
* @param offsetRequest new requested tab offset
*/
public void setTabOffset( final double offsetRequest) {
tabOffset = offsetRequest;
updateTabPosition();
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof FinSet) {
((FinSet) listener).setTabOffset(offsetRequest);
}
}
tabOffset = offsetRequest;
updateTabPosition();
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
}
public AxialMethod getTabOffsetMethod() {
@ -367,16 +367,16 @@ public abstract class FinSet extends ExternalComponent implements AxialPositiona
* it is merely a lens through which other modules may view the tab's position.
*/
public void setTabOffsetMethod(final AxialMethod newPositionMethod) {
this.tabOffsetMethod = newPositionMethod;
this.tabOffset = this.tabOffsetMethod.getAsOffset(tabPosition, tabLength, length);
fireComponentChangeEvent(ComponentChangeEvent.NONFUNCTIONAL_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof FinSet) {
((FinSet) listener).setTabOffsetMethod(newPositionMethod);
}
}
this.tabOffsetMethod = newPositionMethod;
this.tabOffset = this.tabOffsetMethod.getAsOffset(tabPosition, tabLength, length);
fireComponentChangeEvent(ComponentChangeEvent.NONFUNCTIONAL_CHANGE);
}
/**
@ -1016,6 +1016,12 @@ public abstract class FinSet extends ExternalComponent implements AxialPositiona
@Override
public void setAngleOffset(final double angleRadians) {
for (RocketComponent listener : configListeners) {
if (listener instanceof FinSet) {
((FinSet) listener).setAngleOffset(angleRadians);
}
}
final double reducedAngle = MathUtil.reducePi(angleRadians);
if (MathUtil.equals(reducedAngle, firstFinOffsetRadians))
return;
@ -1028,12 +1034,6 @@ public abstract class FinSet extends ExternalComponent implements AxialPositiona
}
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof FinSet) {
((FinSet) listener).setAngleOffset(angleRadians);
}
}
}
@Override
@ -1060,15 +1060,15 @@ public abstract class FinSet extends ExternalComponent implements AxialPositiona
@Override
public void setAngleMethod(AngleMethod newAngleMethod ) {
mutex.verify();
this.angleMethod = newAngleMethod;
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof FinSet) {
((FinSet) listener).setAngleMethod(newAngleMethod);
}
}
mutex.verify();
this.angleMethod = newAngleMethod;
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
}
@Override
@ -1094,12 +1094,13 @@ public abstract class FinSet extends ExternalComponent implements AxialPositiona
@Override
public void setInstanceCount(int newCount) {
setFinCount(newCount);
for (RocketComponent listener : configListeners) {
if (listener instanceof FinSet) {
((FinSet) listener).setInstanceCount(newCount);
}
}
setFinCount(newCount);
}
@Override
@ -1146,6 +1147,12 @@ public abstract class FinSet extends ExternalComponent implements AxialPositiona
}
public void setFilletMaterial(Material mat) {
for (RocketComponent listener : configListeners) {
if (listener instanceof FinSet) {
((FinSet) listener).setFilletMaterial(mat);
}
}
if (mat.getType() != Material.Type.BULK) {
throw new IllegalArgumentException("ExternalComponent requires a bulk material" +
" type=" + mat.getType());
@ -1156,12 +1163,6 @@ public abstract class FinSet extends ExternalComponent implements AxialPositiona
filletMaterial = mat;
clearPreset();
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof FinSet) {
((FinSet) listener).setFilletMaterial(mat);
}
}
}
public double getFilletRadius() {
@ -1169,17 +1170,17 @@ public abstract class FinSet extends ExternalComponent implements AxialPositiona
}
public void setFilletRadius(double r) {
if (MathUtil.equals(filletRadius, r))
return;
filletRadius = r;
clearPreset();
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof FinSet) {
((FinSet) listener).setFilletRadius(r);
}
}
if (MathUtil.equals(filletRadius, r))
return;
filletRadius = r;
clearPreset();
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
}
/**

View File

@ -152,13 +152,13 @@ public class FreeformFinSet extends FinSet {
/** maintained just for backwards compatibility:
*/
public void setPoints(Coordinate[] newPoints) {
setPoints(new ArrayList<>(Arrays.asList(newPoints)));
for (RocketComponent listener : configListeners) {
if (listener instanceof FreeformFinSet) {
((FreeformFinSet) listener).setPoints(newPoints);
}
}
setPoints(new ArrayList<>(Arrays.asList(newPoints)));
}
/**
@ -167,6 +167,11 @@ public class FreeformFinSet extends FinSet {
* @param newPoints New points to set as the exposed edges of the fin
*/
public void setPoints( ArrayList<Coordinate> newPoints) {
for (RocketComponent listener : configListeners) {
if (listener instanceof FreeformFinSet) {
((FreeformFinSet) listener).setPoints(newPoints);
}
}
final Coordinate delta = newPoints.get(0).multiply(-1);
if( IGNORE_SMALLER_THAN < delta.length2()){
@ -198,12 +203,6 @@ public class FreeformFinSet extends FinSet {
}
fireComponentChangeEvent(ComponentChangeEvent.AEROMASS_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof FreeformFinSet) {
((FreeformFinSet) listener).setPoints(newPoints);
}
}
}
/**

View File

@ -130,6 +130,12 @@ public class InnerTube extends ThicknessRingComponent implements AxialPositionab
*/
@Override
public void setClusterConfiguration( final ClusterConfiguration cluster) {
for (RocketComponent listener : configListeners) {
if (listener instanceof InnerTube) {
((InnerTube) listener).setClusterConfiguration(cluster);
}
}
if( cluster == this.cluster){
// no change
return;
@ -137,12 +143,6 @@ public class InnerTube extends ThicknessRingComponent implements AxialPositionab
this.cluster = cluster;
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
}
for (RocketComponent listener : configListeners) {
if (listener instanceof InnerTube) {
((InnerTube) listener).setClusterConfiguration(cluster);
}
}
}
public BoundingBox getInstanceBoundingBox(){
@ -189,16 +189,17 @@ public class InnerTube extends ThicknessRingComponent implements AxialPositionab
*/
public void setClusterScale(double scale) {
scale = Math.max(scale, 0);
if (MathUtil.equals(clusterScale, scale))
return;
clusterScale = scale;
fireComponentChangeEvent(new ComponentChangeEvent(this, ComponentChangeEvent.MASS_CHANGE));
for (RocketComponent listener : configListeners) {
if (listener instanceof InnerTube) {
((InnerTube) listener).setClusterScale(scale);
}
}
if (MathUtil.equals(clusterScale, scale))
return;
clusterScale = scale;
fireComponentChangeEvent(new ComponentChangeEvent(this, ComponentChangeEvent.MASS_CHANGE));
}
@ -215,17 +216,17 @@ public class InnerTube extends ThicknessRingComponent implements AxialPositionab
* @param rotation the clusterRotation to set
*/
public void setClusterRotation(double rotation) {
rotation = MathUtil.reducePi(rotation);
if (clusterRotation == rotation)
return;
this.clusterRotation = rotation;
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof InnerTube) {
((InnerTube) listener).setClusterRotation(rotation);
}
}
rotation = MathUtil.reducePi(rotation);
if (clusterRotation == rotation)
return;
this.clusterRotation = rotation;
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
}
@ -304,6 +305,12 @@ public class InnerTube extends ThicknessRingComponent implements AxialPositionab
@Override
public void setMotorConfig( final MotorConfiguration newMotorConfig, final FlightConfigurationId fcid){
for (RocketComponent listener : configListeners) {
if (listener instanceof InnerTube) {
((InnerTube) listener).setMotorConfig(newMotorConfig, fcid);
}
}
if((null == newMotorConfig)){
this.motors.set( fcid, null);
}else{
@ -315,12 +322,6 @@ public class InnerTube extends ThicknessRingComponent implements AxialPositionab
}
this.isActingMount = true;
for (RocketComponent listener : configListeners) {
if (listener instanceof InnerTube) {
((InnerTube) listener).setMotorConfig(newMotorConfig, fcid);
}
}
}
@Override
@ -340,16 +341,16 @@ public class InnerTube extends ThicknessRingComponent implements AxialPositionab
@Override
public void setMotorMount(boolean _active){
if (this.isActingMount == _active)
return;
this.isActingMount = _active;
fireComponentChangeEvent(ComponentChangeEvent.MOTOR_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof InnerTube) {
((InnerTube) listener).setMotorMount(_active);
}
}
if (this.isActingMount == _active)
return;
this.isActingMount = _active;
fireComponentChangeEvent(ComponentChangeEvent.MOTOR_CHANGE);
}
@Override
@ -381,16 +382,16 @@ public class InnerTube extends ThicknessRingComponent implements AxialPositionab
@Override
public void setMotorOverhang(double overhang) {
if (MathUtil.equals(this.overhang, overhang))
return;
this.overhang = overhang;
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof InnerTube) {
((InnerTube) listener).setMotorOverhang(overhang);
}
}
if (MathUtil.equals(this.overhang, overhang))
return;
this.overhang = overhang;
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
}
@Override

View File

@ -38,6 +38,12 @@ public class InsideColorComponentHandler {
* @param appearance the inner appearance to be set
*/
public void setInsideAppearance(Appearance appearance) {
for (RocketComponent listener : component.configListeners) {
if (listener instanceof InsideColorComponent) {
((InsideColorComponent) listener).getInsideColorComponentHandler().setInsideAppearance(appearance);
}
}
this.insideAppearance = appearance;
if (this.insideAppearance != null) {
Decal d = this.insideAppearance.getTexture();
@ -53,12 +59,6 @@ public class InsideColorComponentHandler {
}
}
component.fireComponentChangeEvent(ComponentChangeEvent.NONFUNCTIONAL_CHANGE);
for (RocketComponent listener : component.configListeners) {
if (listener instanceof InsideColorComponent) {
((InsideColorComponent) listener).getInsideColorComponentHandler().setInsideAppearance(appearance);
}
}
}
/**
@ -78,13 +78,13 @@ public class InsideColorComponentHandler {
* @param newState new edgesUseInsideAppearance value
*/
public void setEdgesSameAsInside(boolean newState) {
this.edgesSameAsInside = newState;
for (RocketComponent listener : component.configListeners) {
if (listener instanceof InsideColorComponent) {
((InsideColorComponent) listener).getInsideColorComponentHandler().setEdgesSameAsInside(newState);
}
}
this.edgesSameAsInside = newState;
}
/**
@ -103,13 +103,13 @@ public class InsideColorComponentHandler {
* @param newState new separateInsideOutside value
*/
public void setSeparateInsideOutside(boolean newState) {
this.separateInsideOutside = newState;
for (RocketComponent listener : component.configListeners) {
if (listener instanceof InsideColorComponent) {
((InsideColorComponent) listener).getInsideColorComponentHandler().setSeparateInsideOutside(newState);
}
}
this.separateInsideOutside = newState;
}
public void copyFrom(InsideColorComponentHandler src) {

View File

@ -49,18 +49,18 @@ public class LaunchLug extends ExternalComponent implements AnglePositionable, B
@Override
public void setOuterRadius(double radius) {
for (RocketComponent listener : configListeners) {
if (listener instanceof LaunchLug) {
((LaunchLug) listener).setOuterRadius(radius);
}
}
if (MathUtil.equals(this.radius, radius))
return;
this.radius = radius;
this.thickness = Math.min(this.thickness, this.radius);
clearPreset();
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof LaunchLug) {
((LaunchLug) listener).setOuterRadius(radius);
}
}
}
@Override
@ -70,13 +70,13 @@ public class LaunchLug extends ExternalComponent implements AnglePositionable, B
@Override
public void setInnerRadius(double innerRadius) {
setOuterRadius(innerRadius + thickness);
for (RocketComponent listener : configListeners) {
if (listener instanceof LaunchLug) {
((LaunchLug) listener).setInnerRadius(innerRadius);
}
}
setOuterRadius(innerRadius + thickness);
}
@Override
@ -85,17 +85,17 @@ public class LaunchLug extends ExternalComponent implements AnglePositionable, B
}
public void setThickness(double thickness) {
if (MathUtil.equals(this.thickness, thickness))
return;
this.thickness = MathUtil.clamp(thickness, 0, radius);
clearPreset();
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof LaunchLug) {
((LaunchLug) listener).setThickness(thickness);
}
}
if (MathUtil.equals(this.thickness, thickness))
return;
this.thickness = MathUtil.clamp(thickness, 0, radius);
clearPreset();
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
}
@Override
@ -105,30 +105,30 @@ public class LaunchLug extends ExternalComponent implements AnglePositionable, B
@Override
public void setAngleOffset(double newAngleRadians) {
double clamped_rad = MathUtil.clamp( newAngleRadians, -Math.PI, Math.PI);
if (MathUtil.equals(this.angleOffsetRadians, clamped_rad))
return;
this.angleOffsetRadians = clamped_rad;
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof LaunchLug) {
((LaunchLug) listener).setAngleOffset(newAngleRadians);
}
}
double clamped_rad = MathUtil.clamp( newAngleRadians, -Math.PI, Math.PI);
if (MathUtil.equals(this.angleOffsetRadians, clamped_rad))
return;
this.angleOffsetRadians = clamped_rad;
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
}
public void setLength(double length) {
if (MathUtil.equals(this.length, length))
return;
this.length = length;
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof LaunchLug) {
((LaunchLug) listener).setLength(length);
}
}
if (MathUtil.equals(this.length, length))
return;
this.length = length;
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
}
@Override
@ -272,26 +272,26 @@ public class LaunchLug extends ExternalComponent implements AnglePositionable, B
@Override
public void setInstanceSeparation(final double _separation){
this.instanceSeparation = _separation;
for (RocketComponent listener : configListeners) {
if (listener instanceof LaunchLug) {
((LaunchLug) listener).setInstanceSeparation(_separation);
}
}
this.instanceSeparation = _separation;
}
@Override
public void setInstanceCount( final int newCount ){
if( 0 < newCount ){
this.instanceCount = newCount;
}
for (RocketComponent listener : configListeners) {
if (listener instanceof LaunchLug) {
((LaunchLug) listener).setInstanceCount(newCount);
}
}
if( 0 < newCount ){
this.instanceCount = newCount;
}
}
@Override

View File

@ -59,17 +59,17 @@ public class MassComponent extends MassObject {
}
public void setComponentMass(double mass) {
mass = Math.max(mass, 0);
if (MathUtil.equals(this.mass, mass))
return;
this.mass = mass;
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof MassComponent) {
((MassComponent) listener).setComponentMass(mass);
}
}
mass = Math.max(mass, 0);
if (MathUtil.equals(this.mass, mass))
return;
this.mass = mass;
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
}
@ -81,17 +81,17 @@ public class MassComponent extends MassObject {
}
public void setDensity(double density) {
double m = density * getVolume();
m = MathUtil.clamp(m, 0, 1000000);
if (Double.isNaN(m))
m = 0;
setComponentMass(m);
for (RocketComponent listener : configListeners) {
if (listener instanceof MassComponent) {
((MassComponent) listener).setDensity(density);
}
}
double m = density * getVolume();
m = MathUtil.clamp(m, 0, 1000000);
if (Double.isNaN(m))
m = 0;
setComponentMass(m);
}
@ -112,6 +112,12 @@ public class MassComponent extends MassObject {
}
public void setMassComponentType(MassComponent.MassComponentType compType) {
for (RocketComponent listener : configListeners) {
if (listener instanceof MassComponent) {
((MassComponent) listener).setMassComponentType(compType);
}
}
mutex.verify();
if (this.massComponentType == compType) {
return;
@ -119,12 +125,6 @@ public class MassComponent extends MassObject {
checkState();
this.massComponentType = compType;
fireComponentChangeEvent(ComponentChangeEvent.NONFUNCTIONAL_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof MassComponent) {
((MassComponent) listener).setMassComponentType(compType);
}
}
}
@Override

View File

@ -51,18 +51,18 @@ public abstract class MassObject extends InternalComponent {
public void setLength(double length) {
for (RocketComponent listener : configListeners) {
if (listener instanceof MassObject) {
((MassObject) listener).setLength(length);
}
}
length = Math.max(length, 0);
if (MathUtil.equals(this.length, length)) {
return;
}
this.length = length;
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof MassObject) {
((MassObject) listener).setLength(length);
}
}
}
@ -73,17 +73,18 @@ public abstract class MassObject extends InternalComponent {
public final void setRadius(double radius) {
radius = Math.max(radius, 0);
if (MathUtil.equals(this.radius, radius)) {
return;
}
this.radius = radius;
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof MassObject) {
((MassObject) listener).setRadius(radius);
}
}
if (MathUtil.equals(this.radius, radius)) {
return;
}
this.radius = radius;
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
}
@ -94,6 +95,13 @@ public abstract class MassObject extends InternalComponent {
public final void setRadialPosition(double radialPosition) {
radialPosition = Math.max(radialPosition, 0);
for (RocketComponent listener : configListeners) {
if (listener instanceof MassObject) {
((MassObject) listener).setRadialPosition(radialPosition);
}
}
if (MathUtil.equals(this.radialPosition, radialPosition)) {
return;
}
@ -101,12 +109,6 @@ public abstract class MassObject extends InternalComponent {
shiftY = radialPosition * Math.cos(radialDirection);
shiftZ = radialPosition * Math.sin(radialDirection);
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof MassObject) {
((MassObject) listener).setRadialPosition(radialPosition);
}
}
}
public final double getRadialDirection() {
@ -114,6 +116,12 @@ public abstract class MassObject extends InternalComponent {
}
public final void setRadialDirection(double radialDirection) {
for (RocketComponent listener : configListeners) {
if (listener instanceof MassObject) {
((MassObject) listener).setRadialDirection(radialDirection);
}
}
radialDirection = MathUtil.reducePi(radialDirection);
if (MathUtil.equals(this.radialDirection, radialDirection)) {
return;
@ -122,12 +130,6 @@ public abstract class MassObject extends InternalComponent {
shiftY = radialPosition * Math.cos(radialDirection);
shiftZ = radialPosition * Math.sin(radialDirection);
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof MassObject) {
((MassObject) listener).setRadialDirection(radialDirection);
}
}
}

View File

@ -33,17 +33,17 @@ public class Parachute extends RecoveryDevice {
}
public void setDiameter(double d) {
if (MathUtil.equals(this.diameter, d))
return;
this.diameter = d;
clearPreset();
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof Parachute) {
((Parachute) listener).setDiameter(d);
}
}
if (MathUtil.equals(this.diameter, d))
return;
this.diameter = d;
clearPreset();
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
}
@ -52,6 +52,12 @@ public class Parachute extends RecoveryDevice {
}
public final void setLineMaterial(Material mat) {
for (RocketComponent listener : configListeners) {
if (listener instanceof Parachute) {
((Parachute) listener).setLineMaterial(mat);
}
}
if (mat.getType() != Material.Type.LINE) {
throw new IllegalArgumentException("Attempted to set non-line material " + mat);
}
@ -62,12 +68,6 @@ public class Parachute extends RecoveryDevice {
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
else
fireComponentChangeEvent(ComponentChangeEvent.NONFUNCTIONAL_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof Parachute) {
((Parachute) listener).setLineMaterial(mat);
}
}
}
@ -76,17 +76,17 @@ public class Parachute extends RecoveryDevice {
}
public final void setLineCount(int n) {
if (this.lineCount == n)
return;
this.lineCount = n;
clearPreset();
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof Parachute) {
((Parachute) listener).setLineCount(n);
}
}
if (this.lineCount == n)
return;
this.lineCount = n;
clearPreset();
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
}
public final double getLineLength() {
@ -94,6 +94,12 @@ public class Parachute extends RecoveryDevice {
}
public final void setLineLength(double length) {
for (RocketComponent listener : configListeners) {
if (listener instanceof Parachute) {
((Parachute) listener).setLineLength(length);
}
}
if (MathUtil.equals(this.lineLength, length))
return;
this.lineLength = length;
@ -101,12 +107,6 @@ public class Parachute extends RecoveryDevice {
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
else
fireComponentChangeEvent(ComponentChangeEvent.NONFUNCTIONAL_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof Parachute) {
((Parachute) listener).setLineLength(length);
}
}
}
@ -121,17 +121,17 @@ public class Parachute extends RecoveryDevice {
}
public void setArea(double area) {
if (MathUtil.equals(getArea(), area))
return;
diameter = MathUtil.safeSqrt(area / Math.PI) * 2;
clearPreset();
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof Parachute) {
((Parachute) listener).setArea(area);
}
}
if (MathUtil.equals(getArea(), area))
return;
diameter = MathUtil.safeSqrt(area / Math.PI) * 2;
clearPreset();
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
}
@Override

View File

@ -117,6 +117,12 @@ public class ParallelStage extends AxialStage implements FlightConfigurableCompo
@Override
public void setInstanceCount( final int newCount ){
for (RocketComponent listener : configListeners) {
if (listener instanceof ParallelStage) {
((ParallelStage) listener).setInstanceCount(newCount);
}
}
mutex.verify();
if ( newCount < 1) {
// there must be at least one instance....
@ -126,12 +132,6 @@ public class ParallelStage extends AxialStage implements FlightConfigurableCompo
this.instanceCount = newCount;
this.angleSeparation = Math.PI * 2 / this.instanceCount;
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof ParallelStage) {
((ParallelStage) listener).setInstanceCount(newCount);
}
}
}
@Override
@ -181,6 +181,12 @@ public class ParallelStage extends AxialStage implements FlightConfigurableCompo
@Override
public void setAxialMethod(final AxialMethod _newPosition) {
for (RocketComponent listener : configListeners) {
if (listener instanceof ParallelStage) {
((ParallelStage) listener).setAxialMethod(_newPosition);
}
}
if (null == this.parent) {
throw new NullPointerException(" a Stage requires a parent before any positioning! ");
}
@ -188,40 +194,40 @@ public class ParallelStage extends AxialStage implements FlightConfigurableCompo
super.setAxialMethod(_newPosition);
fireComponentChangeEvent(ComponentChangeEvent.NONFUNCTIONAL_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof ParallelStage) {
((ParallelStage) listener).setAxialMethod(_newPosition);
}
}
}
@Override
public void setRadiusOffset(final double radius_m) {
setRadius( radiusMethod, radius_m );
for (RocketComponent listener : configListeners) {
if (listener instanceof ParallelStage) {
((ParallelStage) listener).setRadiusOffset(radius_m);
}
}
setRadius( radiusMethod, radius_m );
}
@Override
public void setAngleOffset(final double angle_rad) {
mutex.verify();
this.angleOffset_rad = MathUtil.reducePi( angle_rad);
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof ParallelStage) {
((ParallelStage) listener).setAngleOffset(angle_rad);
}
}
mutex.verify();
this.angleOffset_rad = MathUtil.reducePi( angle_rad);
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
}
@Override
public void setRadius(RadiusMethod requestedMethod, double requestedRadius ) {
for (RocketComponent listener : configListeners) {
if (listener instanceof ParallelStage) {
((ParallelStage) listener).setRadius(requestedMethod, requestedRadius);
}
}
mutex.verify();
RadiusMethod newMethod = requestedMethod;
@ -235,12 +241,6 @@ public class ParallelStage extends AxialStage implements FlightConfigurableCompo
this.radiusOffset_m = newRadius;
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof ParallelStage) {
((ParallelStage) listener).setRadius(requestedMethod, requestedRadius);
}
}
}
@Override
@ -250,15 +250,15 @@ public class ParallelStage extends AxialStage implements FlightConfigurableCompo
@Override
public void setAngleMethod(AngleMethod newAngleMethod ) {
mutex.verify();
this.angleMethod = newAngleMethod;
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof ParallelStage) {
((ParallelStage) listener).setAngleMethod(newAngleMethod);
}
}
mutex.verify();
this.angleMethod = newAngleMethod;
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
}
@Override
@ -268,13 +268,13 @@ public class ParallelStage extends AxialStage implements FlightConfigurableCompo
@Override
public void setRadiusMethod(RadiusMethod newRadiusMethod) {
setRadius( newRadiusMethod, this.radiusOffset_m );
for (RocketComponent listener : configListeners) {
if (listener instanceof ParallelStage) {
((ParallelStage) listener).setRadiusMethod(newRadiusMethod);
}
}
setRadius( newRadiusMethod, this.radiusOffset_m );
}

View File

@ -163,6 +163,12 @@ public class PodSet extends ComponentAssembly implements RingInstanceable {
@Override
public void setInstanceCount(int newCount ){
for (RocketComponent listener : configListeners) {
if (listener instanceof PodSet) {
((PodSet) listener).setInstanceCount(newCount);
}
}
mutex.verify();
if ( newCount < 1) {
// there must be at least one instance....
@ -172,12 +178,6 @@ public class PodSet extends ComponentAssembly implements RingInstanceable {
this.instanceCount = newCount;
this.angleSeparation = Math.PI * 2 / this.instanceCount;
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof PodSet) {
((PodSet) listener).setInstanceCount(newCount);
}
}
}
@Override
@ -196,15 +196,15 @@ public class PodSet extends ComponentAssembly implements RingInstanceable {
@Override
public void setAngleOffset(double angle_rad) {
mutex.verify();
this.angleOffset_rad = angle_rad;
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof PodSet) {
((PodSet) listener).setAngleOffset(angle_rad);
}
}
mutex.verify();
this.angleOffset_rad = angle_rad;
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
}
@Override
@ -218,6 +218,12 @@ public class PodSet extends ComponentAssembly implements RingInstanceable {
@Override
public void setRadiusOffset(double radius_m) {
for (RocketComponent listener : configListeners) {
if (listener instanceof PodSet) {
((PodSet) listener).setRadiusOffset(radius_m);
}
}
mutex.verify();
if( this.radiusMethod.clampToZero() ) {
this.radiusOffset_m = 0.0;
@ -225,12 +231,6 @@ public class PodSet extends ComponentAssembly implements RingInstanceable {
this.radiusOffset_m = radius_m;
}
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof PodSet) {
((PodSet) listener).setRadiusOffset(radius_m);
}
}
}
@Override
@ -240,19 +240,25 @@ public class PodSet extends ComponentAssembly implements RingInstanceable {
@Override
public void setRadiusMethod(RadiusMethod newMethod ) {
mutex.verify();
this.radiusMethod = newMethod;
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof PodSet) {
((PodSet) listener).setRadiusMethod(newMethod);
}
}
mutex.verify();
this.radiusMethod = newMethod;
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
}
@Override
public void setRadius(RadiusMethod requestMethod, double requestRadius ) {
for (RocketComponent listener : configListeners) {
if (listener instanceof PodSet) {
((PodSet) listener).setRadius(requestMethod, requestRadius);
}
}
mutex.verify();
RadiusMethod newMethod = requestMethod;
@ -265,12 +271,6 @@ public class PodSet extends ComponentAssembly implements RingInstanceable {
this.radiusMethod = newMethod;
this.radiusOffset_m = newRadius;
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof PodSet) {
((PodSet) listener).setRadius(requestMethod, requestRadius);
}
}
}
}

View File

@ -51,6 +51,13 @@ public abstract class RadiusRingComponent extends RingComponent implements Coaxi
@Override
public void setOuterRadius(double r) {
r = Math.max(r,0);
for (RocketComponent listener : configListeners) {
if (listener instanceof RadiusRingComponent) {
((RadiusRingComponent) listener).setOuterRadius(r);
}
}
if (MathUtil.equals(outerRadius, r) && !isOuterRadiusAutomatic())
return;
@ -63,12 +70,6 @@ public abstract class RadiusRingComponent extends RingComponent implements Coaxi
clearPreset();
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof RadiusRingComponent) {
((RadiusRingComponent) listener).setOuterRadius(r);
}
}
}
@ -79,6 +80,13 @@ public abstract class RadiusRingComponent extends RingComponent implements Coaxi
@Override
public void setInnerRadius(double r) {
r = Math.max(r,0);
for (RocketComponent listener : configListeners) {
if (listener instanceof RadiusRingComponent) {
((RadiusRingComponent) listener).setInnerRadius(r);
}
}
if (MathUtil.equals(innerRadius, r))
return;
@ -91,12 +99,6 @@ public abstract class RadiusRingComponent extends RingComponent implements Coaxi
clearPreset();
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof RadiusRingComponent) {
((RadiusRingComponent) listener).setInnerRadius(r);
}
}
}
@ -106,16 +108,16 @@ public abstract class RadiusRingComponent extends RingComponent implements Coaxi
}
@Override
public void setThickness(double thickness) {
double outer = getOuterRadius();
thickness = MathUtil.clamp(thickness, 0, outer);
setInnerRadius(outer - thickness);
for (RocketComponent listener : configListeners) {
if (listener instanceof RadiusRingComponent) {
((RadiusRingComponent) listener).setThickness(thickness);
}
}
double outer = getOuterRadius();
thickness = MathUtil.clamp(thickness, 0, outer);
setInnerRadius(outer - thickness);
}
@ -137,15 +139,15 @@ public abstract class RadiusRingComponent extends RingComponent implements Coaxi
@Override
public void setInstanceCount( final int newCount ){
if( 0 < newCount ){
this.instanceCount = newCount;
}
for (RocketComponent listener : configListeners) {
if (listener instanceof RadiusRingComponent) {
((RadiusRingComponent) listener).setInstanceCount(newCount);
}
}
if( 0 < newCount ){
this.instanceCount = newCount;
}
}
@Override

View File

@ -152,60 +152,60 @@ public class RailButton extends ExternalComponent implements AnglePositionable,
public void setStandoff(double newStandoff){
this.standoff_m = Math.max( newStandoff, RailButton.MINIMUM_STANDOFF );
for (RocketComponent listener : configListeners) {
if (listener instanceof RailButton) {
((RailButton) listener).setStandoff(newStandoff);
}
}
this.standoff_m = Math.max( newStandoff, RailButton.MINIMUM_STANDOFF );
}
public void setInnerDiameter(double newID ){
this.innerDiameter_m = newID;
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof RailButton) {
((RailButton) listener).setInnerDiameter(newID);
}
}
this.innerDiameter_m = newID;
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
}
public void setOuterDiameter(double newOD ){
this.outerDiameter_m = newOD;
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof RailButton) {
((RailButton) listener).setOuterDiameter(newOD);
}
}
this.outerDiameter_m = newOD;
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
}
public void setTotalHeight(double newHeight ) {
this.totalHeight_m = newHeight;
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof RailButton) {
((RailButton) listener).setTotalHeight(newHeight);
}
}
this.totalHeight_m = newHeight;
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
}
public void setThickness(double newThickness ) {
this.flangeHeight_m = newThickness;
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof RailButton) {
((RailButton) listener).setThickness(newThickness);
}
}
this.flangeHeight_m = newThickness;
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
}
@Override
@ -232,18 +232,18 @@ public class RailButton extends ExternalComponent implements AnglePositionable,
@Override
public void setAngleOffset(double angle_rad){
for (RocketComponent listener : configListeners) {
if (listener instanceof RailButton) {
((RailButton) listener).setAngleOffset(angle_rad);
}
}
double clamped_rad = MathUtil.clamp(angle_rad, -Math.PI, Math.PI);
if (MathUtil.equals(this.angle_rad, clamped_rad))
return;
this.angle_rad = clamped_rad;
fireComponentChangeEvent(ComponentChangeEvent.AERODYNAMIC_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof RailButton) {
((RailButton) listener).setAngleOffset(angle_rad);
}
}
}
@ -319,28 +319,28 @@ public class RailButton extends ExternalComponent implements AnglePositionable,
@Override
public void setInstanceSeparation(double _separation){
this.instanceSeparation = _separation;
fireComponentChangeEvent(ComponentChangeEvent.AERODYNAMIC_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof RailButton) {
((RailButton) listener).setInstanceSeparation(_separation);
}
}
this.instanceSeparation = _separation;
fireComponentChangeEvent(ComponentChangeEvent.AERODYNAMIC_CHANGE);
}
@Override
public void setInstanceCount(int newCount ){
if( 0 < newCount ){
this.instanceCount = newCount;
}
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof RailButton) {
((RailButton) listener).setInstanceCount(newCount);
}
}
if( 0 < newCount ){
this.instanceCount = newCount;
}
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
}
@Override

View File

@ -49,17 +49,17 @@ public abstract class RecoveryDevice extends MassObject implements FlightConfigu
}
public void setCD(double cd) {
if (MathUtil.equals(this.cd, cd) && !isCDAutomatic())
return;
this.cd = cd;
this.cdAutomatic = false;
fireComponentChangeEvent(ComponentChangeEvent.AERODYNAMIC_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof RecoveryDevice) {
((RecoveryDevice) listener).setCD(cd);
}
}
if (MathUtil.equals(this.cd, cd) && !isCDAutomatic())
return;
this.cd = cd;
this.cdAutomatic = false;
fireComponentChangeEvent(ComponentChangeEvent.AERODYNAMIC_CHANGE);
}
@ -68,16 +68,16 @@ public abstract class RecoveryDevice extends MassObject implements FlightConfigu
}
public void setCDAutomatic(boolean auto) {
if (cdAutomatic == auto)
return;
this.cdAutomatic = auto;
fireComponentChangeEvent(ComponentChangeEvent.AERODYNAMIC_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof RecoveryDevice) {
((RecoveryDevice) listener).setCDAutomatic(auto);
}
}
if (cdAutomatic == auto)
return;
this.cdAutomatic = auto;
fireComponentChangeEvent(ComponentChangeEvent.AERODYNAMIC_CHANGE);
}
@ -87,6 +87,12 @@ public abstract class RecoveryDevice extends MassObject implements FlightConfigu
}
public final void setMaterial(Material mat) {
for (RocketComponent listener : configListeners) {
if (listener instanceof RecoveryDevice) {
((RecoveryDevice) listener).setMaterial(mat);
}
}
if (!(mat instanceof Material.Surface)) {
throw new IllegalArgumentException("Attempted to set non-surface material " + mat);
}
@ -95,12 +101,6 @@ public abstract class RecoveryDevice extends MassObject implements FlightConfigu
this.material = (Material.Surface) mat;
clearPreset();
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof RecoveryDevice) {
((RecoveryDevice) listener).setMaterial(mat);
}
}
}
public FlightConfigurableParameterSet<DeploymentConfiguration> getDeploymentConfigurations() {

View File

@ -54,16 +54,16 @@ public abstract class RingComponent extends StructuralComponent implements BoxBo
// Setter is protected, subclasses may make it public
protected void setOuterRadiusAutomatic(boolean auto) {
if (auto == outerRadiusAutomatic)
return;
outerRadiusAutomatic = auto;
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof RingComponent) {
((RingComponent) listener).setOuterRadiusAutomatic(auto);
}
}
if (auto == outerRadiusAutomatic)
return;
outerRadiusAutomatic = auto;
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
}
@ -73,34 +73,34 @@ public abstract class RingComponent extends StructuralComponent implements BoxBo
// Setter is protected, subclasses may make it public
protected void setInnerRadiusAutomatic(boolean auto) {
if (auto == innerRadiusAutomatic)
return;
innerRadiusAutomatic = auto;
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof RingComponent) {
((RingComponent) listener).setInnerRadiusAutomatic(auto);
}
}
if (auto == innerRadiusAutomatic)
return;
innerRadiusAutomatic = auto;
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
}
public final void setLength(double length) {
for (RocketComponent listener : configListeners) {
if (listener instanceof RingComponent) {
((RingComponent) listener).setLength(length);
}
}
double l = Math.max(length, 0);
if (this.length == l)
return;
this.length = l;
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof RingComponent) {
((RingComponent) listener).setLength(length);
}
}
}
@ -121,6 +121,12 @@ public abstract class RingComponent extends StructuralComponent implements BoxBo
* @param dir the radial direction.
*/
public void setRadialDirection(double dir) {
for (RocketComponent listener : configListeners) {
if (listener instanceof RingComponent) {
((RingComponent) listener).setRadialDirection(dir);
}
}
dir = MathUtil.reducePi(dir);
if (radialDirection == dir)
return;
@ -128,12 +134,6 @@ public abstract class RingComponent extends StructuralComponent implements BoxBo
shiftY = radialPosition * Math.cos(radialDirection);
shiftZ = radialPosition * Math.sin(radialDirection);
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof RingComponent) {
((RingComponent) listener).setRadialDirection(dir);
}
}
}
public BoundingBox getInstanceBoundingBox(){
@ -166,18 +166,19 @@ public abstract class RingComponent extends StructuralComponent implements BoxBo
*/
public void setRadialPosition(double pos) {
pos = Math.max(pos, 0);
if (radialPosition == pos)
return;
radialPosition = pos;
shiftY = radialPosition * Math.cos(radialDirection);
shiftZ = radialPosition * Math.sin(radialDirection);
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof RingComponent) {
((RingComponent) listener).setRadialPosition(pos);
}
}
if (radialPosition == pos)
return;
radialPosition = pos;
shiftY = radialPosition * Math.cos(radialDirection);
shiftZ = radialPosition * Math.sin(radialDirection);
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
}
@ -190,6 +191,12 @@ public abstract class RingComponent extends StructuralComponent implements BoxBo
}
public void setRadialShift(double y, double z) {
for (RocketComponent listener : configListeners) {
if (listener instanceof RingComponent) {
((RingComponent) listener).setRadialShift(y, z);
}
}
radialPosition = Math.hypot(y, z);
radialDirection = Math.atan2(z, y);
@ -200,12 +207,6 @@ public abstract class RingComponent extends StructuralComponent implements BoxBo
assert (MathUtil.equals(z, shiftZ));
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof RingComponent) {
((RingComponent) listener).setRadialShift(y, z);
}
}
}
@Override

View File

@ -451,6 +451,10 @@ public abstract class RocketComponent implements ChangeSource, Cloneable, Iterab
* @param appearance
*/
public void setAppearance(Appearance appearance) {
for (RocketComponent listener : configListeners) {
listener.setAppearance(appearance);
}
this.appearance = appearance;
if (this.appearance != null) {
Decal d = this.appearance.getTexture();
@ -465,12 +469,8 @@ public abstract class RocketComponent implements ChangeSource, Cloneable, Iterab
});
}
}
// CHECK - should this be a TEXTURE_CHANGE and not NONFUNCTIONAL_CHANGE?
fireComponentChangeEvent(ComponentChangeEvent.NONFUNCTIONAL_CHANGE);
for (RocketComponent listener : configListeners) {
listener.setAppearance(appearance);
}
fireComponentChangeEvent(ComponentChangeEvent.NONFUNCTIONAL_CHANGE);
}
/**
@ -486,6 +486,10 @@ public abstract class RocketComponent implements ChangeSource, Cloneable, Iterab
* Set the color of the object to use in 2D figures.
*/
public final void setColor(Color c) {
for (RocketComponent listener : configListeners) {
listener.setColor(c);
}
if ((color == null && c == null) ||
(color != null && color.equals(c)))
return;
@ -493,10 +497,6 @@ public abstract class RocketComponent implements ChangeSource, Cloneable, Iterab
checkState();
this.color = c;
fireComponentChangeEvent(ComponentChangeEvent.NONFUNCTIONAL_CHANGE);
for (RocketComponent listener : configListeners) {
listener.setColor(c);
}
}
@ -506,15 +506,15 @@ public abstract class RocketComponent implements ChangeSource, Cloneable, Iterab
}
public final void setLineStyle(LineStyle style) {
for (RocketComponent listener : configListeners) {
listener.setLineStyle(style);
}
if (this.lineStyle == style)
return;
checkState();
this.lineStyle = style;
fireComponentChangeEvent(ComponentChangeEvent.NONFUNCTIONAL_CHANGE);
for (RocketComponent listener : configListeners) {
listener.setLineStyle(style);
}
}
@ -538,16 +538,16 @@ public abstract class RocketComponent implements ChangeSource, Cloneable, Iterab
* @param m the override mass
*/
public final void setOverrideMass(double m) {
for (RocketComponent listener : configListeners) {
listener.setOverrideMass(m);
}
if (MathUtil.equals(m, overrideMass))
return;
checkState();
overrideMass = Math.max(m, 0);
if (massOverridden)
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
for (RocketComponent listener : configListeners) {
listener.setOverrideMass(m);
}
}
/**
@ -567,16 +567,18 @@ public abstract class RocketComponent implements ChangeSource, Cloneable, Iterab
* @param o whether the mass is overridden
*/
public final void setMassOverridden(boolean o) {
for (RocketComponent listener : configListeners) {
listener.setIgnoreComponentChange(false);
listener.setMassOverridden(o);
listener.setIgnoreComponentChange(false);
}
if (massOverridden == o) {
return;
}
checkState();
massOverridden = o;
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
for (RocketComponent listener : configListeners) {
listener.setMassOverridden(o);
}
}
@ -609,6 +611,10 @@ public abstract class RocketComponent implements ChangeSource, Cloneable, Iterab
* @param x the x-coordinate of the override CG to set.
*/
public final void setOverrideCGX(double x) {
for (RocketComponent listener : configListeners) {
listener.setOverrideCGX(x);
}
if (MathUtil.equals(overrideCGX, x))
return;
checkState();
@ -617,10 +623,6 @@ public abstract class RocketComponent implements ChangeSource, Cloneable, Iterab
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
else
fireComponentChangeEvent(ComponentChangeEvent.NONFUNCTIONAL_CHANGE);
for (RocketComponent listener : configListeners) {
listener.setOverrideCGX(x);
}
}
/**
@ -639,16 +641,18 @@ public abstract class RocketComponent implements ChangeSource, Cloneable, Iterab
* @param o whether the CG is overridden
*/
public final void setCGOverridden(boolean o) {
for (RocketComponent listener : configListeners) {
listener.setIgnoreComponentChange(false);
listener.setCGOverridden(o);
listener.setIgnoreComponentChange(true);
}
if (cgOverridden == o) {
return;
}
checkState();
cgOverridden = o;
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
for (RocketComponent listener : configListeners) {
listener.setCGOverridden(o);
}
}
@ -668,6 +672,10 @@ public abstract class RocketComponent implements ChangeSource, Cloneable, Iterab
* @param x the override CD to set.
*/
public final void setOverrideCD(double x) {
for (RocketComponent listener : configListeners) {
listener.setOverrideCD(x);
}
if (MathUtil.equals(overrideCD, x))
return;
checkState();
@ -676,10 +684,6 @@ public abstract class RocketComponent implements ChangeSource, Cloneable, Iterab
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
else
fireComponentChangeEvent(ComponentChangeEvent.NONFUNCTIONAL_CHANGE);
for (RocketComponent listener : configListeners) {
listener.setOverrideCD(x);
}
}
@ -701,16 +705,16 @@ public abstract class RocketComponent implements ChangeSource, Cloneable, Iterab
* @param o whether the CD is overridden
*/
public final void setCDOverridden(boolean o) {
for (RocketComponent listener : configListeners) {
listener.setCDOverridden(o);
}
if(cdOverridden == o) {
return;
}
checkState();
cdOverridden = o;
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
for (RocketComponent listener : configListeners) {
listener.setCDOverridden(o);
}
}
@ -738,16 +742,17 @@ public abstract class RocketComponent implements ChangeSource, Cloneable, Iterab
* @param override whether the mass and/or CG override overrides all subcomponent.
*/
public void setOverrideSubcomponents(boolean override) {
for (RocketComponent listener : configListeners) {
listener.setOverrideSubcomponents(override);
}
if (overrideSubcomponents == override) {
return;
}
checkState();
overrideSubcomponents = override;
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
for (RocketComponent listener : configListeners) {
listener.setOverrideSubcomponents(override);
}
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
}
/**
@ -787,6 +792,12 @@ public abstract class RocketComponent implements ChangeSource, Cloneable, Iterab
* the default name, currently the component name.
*/
public final void setName(String name) {
for (RocketComponent listener : configListeners) {
listener.setIgnoreComponentChange(false);
listener.setName(name);
listener.setIgnoreComponentChange(true);
}
if (this.name.equals(name)) {
return;
}
@ -795,11 +806,8 @@ public abstract class RocketComponent implements ChangeSource, Cloneable, Iterab
this.name = getComponentName();
else
this.name = name;
fireComponentChangeEvent(ComponentChangeEvent.NONFUNCTIONAL_CHANGE);
for (RocketComponent listener : configListeners) {
listener.setName(name);
}
fireComponentChangeEvent(ComponentChangeEvent.NONFUNCTIONAL_CHANGE);
}
@ -820,6 +828,10 @@ public abstract class RocketComponent implements ChangeSource, Cloneable, Iterab
* @param comment the comment of the component.
*/
public final void setComment(String comment) {
for (RocketComponent listener : configListeners) {
listener.setComment(comment);
}
if (this.comment.equals(comment))
return;
checkState();
@ -827,11 +839,8 @@ public abstract class RocketComponent implements ChangeSource, Cloneable, Iterab
this.comment = "";
else
this.comment = comment;
fireComponentChangeEvent(ComponentChangeEvent.NONFUNCTIONAL_CHANGE);
for (RocketComponent listener : configListeners) {
listener.setComment(comment);
}
fireComponentChangeEvent(ComponentChangeEvent.NONFUNCTIONAL_CHANGE);
}
@ -862,6 +871,10 @@ public abstract class RocketComponent implements ChangeSource, Cloneable, Iterab
* @param preset the preset component to load, or <code>null</code> to clear the preset.
*/
public final void loadPreset(ComponentPreset preset) {
for (RocketComponent listener : configListeners) {
listener.loadPreset(preset);
}
if (presetComponent == preset) {
return;
}
@ -895,7 +908,6 @@ public abstract class RocketComponent implements ChangeSource, Cloneable, Iterab
loadFromPreset(preset);
this.presetComponent = preset;
fireComponentChangeEvent(ComponentChangeEvent.NONFUNCTIONAL_CHANGE);
} finally {
if (rocket != null) {
@ -903,9 +915,7 @@ public abstract class RocketComponent implements ChangeSource, Cloneable, Iterab
}
}
for (RocketComponent listener : configListeners) {
listener.loadPreset(preset);
}
fireComponentChangeEvent(ComponentChangeEvent.NONFUNCTIONAL_CHANGE);
}
@ -933,14 +943,14 @@ public abstract class RocketComponent implements ChangeSource, Cloneable, Iterab
* otherwise.
*/
public final void clearPreset() {
for (RocketComponent listener : configListeners) {
listener.clearPreset();
}
if (presetComponent == null)
return;
presetComponent = null;
fireComponentChangeEvent(ComponentChangeEvent.NONFUNCTIONAL_CHANGE);
for (RocketComponent listener : configListeners) {
listener.clearPreset();
}
}
@ -1004,6 +1014,10 @@ public abstract class RocketComponent implements ChangeSource, Cloneable, Iterab
* @param newAxialMethod the relative positioning.
*/
public void setAxialMethod(final AxialMethod newAxialMethod) {
for (RocketComponent listener : configListeners) {
listener.setAxialMethod(newAxialMethod);
}
if (newAxialMethod == this.axialMethod) {
// no change.
return;
@ -1016,10 +1030,6 @@ public abstract class RocketComponent implements ChangeSource, Cloneable, Iterab
// // this doesn't cause any physical change-- just how it's described.
// fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
for (RocketComponent listener : configListeners) {
listener.setAxialMethod(newAxialMethod);
}
}
/**

View File

@ -26,18 +26,18 @@ public class ShockCord extends MassObject {
}
public void setMaterial(Material m) {
for (RocketComponent listener : configListeners) {
if (listener instanceof ShockCord) {
((ShockCord) listener).setMaterial(m);
}
}
if (m.getType() != Material.Type.LINE)
throw new BugException("Attempting to set non-linear material.");
if (material.equals(m))
return;
this.material = m;
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof ShockCord) {
((ShockCord) listener).setMaterial(m);
}
}
}
@ -46,17 +46,17 @@ public class ShockCord extends MassObject {
}
public void setCordLength(double length) {
length = MathUtil.max(length, 0);
if (MathUtil.equals(length, this.length))
return;
this.cordLength = length;
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof ShockCord) {
((ShockCord) listener).setCordLength(length);
}
}
length = MathUtil.max(length, 0);
if (MathUtil.equals(length, this.length))
return;
this.cordLength = length;
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
}

View File

@ -35,6 +35,12 @@ public class Sleeve extends RingComponent {
@Override
public void setOuterRadius(double r) {
for (RocketComponent listener : configListeners) {
if (listener instanceof Sleeve) {
((Sleeve) listener).setOuterRadius(r);
}
}
if (MathUtil.equals(getOuterRadius(), r))
return;
@ -42,12 +48,6 @@ public class Sleeve extends RingComponent {
if (thickness > r)
thickness = r;
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof Sleeve) {
((Sleeve) listener).setOuterRadius(r);
}
}
}
@ -68,17 +68,17 @@ public class Sleeve extends RingComponent {
@Override
public void setInnerRadius(double r) {
r = Math.max(r, 0);
if (MathUtil.equals(innerRadius, r))
return;
innerRadius = r;
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof Sleeve) {
((Sleeve) listener).setInnerRadius(r);
}
}
r = Math.max(r, 0);
if (MathUtil.equals(innerRadius, r))
return;
innerRadius = r;
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
}
@Override
@ -88,17 +88,17 @@ public class Sleeve extends RingComponent {
@Override
public void setThickness(double t) {
t = Math.max(t, 0);
if (MathUtil.equals(thickness, t))
return;
thickness = t;
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof Sleeve) {
((Sleeve) listener).setThickness(t);
}
}
t = Math.max(t, 0);
if (MathUtil.equals(thickness, t))
return;
thickness = t;
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
}

View File

@ -31,17 +31,17 @@ public class Streamer extends RecoveryDevice {
}
public void setStripLength(double stripLength) {
if (MathUtil.equals(this.stripLength, stripLength))
return;
this.stripLength = stripLength;
clearPreset();
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof Streamer) {
((Streamer) listener).setStripLength(stripLength);
}
}
if (MathUtil.equals(this.stripLength, stripLength))
return;
this.stripLength = stripLength;
clearPreset();
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
}
public double getStripWidth() {
@ -49,29 +49,29 @@ public class Streamer extends RecoveryDevice {
}
public void setStripWidth(double stripWidth) {
for (RocketComponent listener : configListeners) {
if (listener instanceof Streamer) {
((Streamer) listener).setStripWidth(stripWidth);
}
}
if (MathUtil.equals(this.stripWidth, stripWidth))
return;
this.stripWidth = stripWidth;
this.length = stripWidth;
clearPreset();
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof Streamer) {
((Streamer) listener).setStripWidth(stripWidth);
}
}
}
@Override
public void setLength(double length) {
setStripWidth(length);
for (RocketComponent listener : configListeners) {
if (listener instanceof Streamer) {
((Streamer) listener).setStripWidth(length);
}
}
setStripWidth(length);
}
@ -82,6 +82,12 @@ public class Streamer extends RecoveryDevice {
}
public void setAspectRatio(double ratio) {
for (RocketComponent listener : configListeners) {
if (listener instanceof Streamer) {
((Streamer) listener).setAspectRatio(ratio);
}
}
if (MathUtil.equals(getAspectRatio(), ratio))
return;
@ -90,12 +96,6 @@ public class Streamer extends RecoveryDevice {
stripWidth = MathUtil.safeSqrt(area / ratio);
stripLength = ratio * stripWidth;
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof Streamer) {
((Streamer) listener).setAspectRatio(ratio);
}
}
}
@ -105,6 +105,12 @@ public class Streamer extends RecoveryDevice {
}
public void setArea(double area) {
for (RocketComponent listener : configListeners) {
if (listener instanceof Streamer) {
((Streamer) listener).setArea(area);
}
}
if (MathUtil.equals(getArea(), area))
return;
@ -112,12 +118,6 @@ public class Streamer extends RecoveryDevice {
stripWidth = MathUtil.safeSqrt(area / ratio);
stripLength = ratio * stripWidth;
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof Streamer) {
((Streamer) listener).setArea(area);
}
}
}

View File

@ -46,16 +46,17 @@ public abstract class StructuralComponent extends InternalComponent {
if (mat.getType() != Material.Type.BULK) {
throw new IllegalArgumentException("Attempted to set non-bulk material "+mat);
}
if (mat.equals(material))
return;
this.material = mat;
clearPreset();
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof StructuralComponent) {
((StructuralComponent) listener).setMaterial(mat);
}
}
if (mat.equals(material))
return;
this.material = mat;
clearPreset();
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
}
}

View File

@ -112,18 +112,18 @@ public abstract class SymmetricComponent extends BodyComponent implements BoxBou
* allowed, and will result in setting the thickness to the maximum radius.
*/
public void setThickness(double thickness) {
for (RocketComponent listener : configListeners) {
if (listener instanceof SymmetricComponent) {
((SymmetricComponent) listener).setThickness(thickness);
}
}
if ((this.thickness == thickness) && !filled)
return;
this.thickness = MathUtil.clamp(thickness, 0, Math.max(getForeRadius(), getAftRadius()));
filled = false;
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
clearPreset();
for (RocketComponent listener : configListeners) {
if (listener instanceof SymmetricComponent) {
((SymmetricComponent) listener).setThickness(thickness);
}
}
}
@ -145,17 +145,17 @@ public abstract class SymmetricComponent extends BodyComponent implements BoxBou
* the wall thickness will have no effect.
*/
public void setFilled(boolean filled) {
if (this.filled == filled)
return;
this.filled = filled;
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
clearPreset();
for (RocketComponent listener : configListeners) {
if (listener instanceof SymmetricComponent) {
((SymmetricComponent) listener).setFilled(filled);
}
}
if (this.filled == filled)
return;
this.filled = filled;
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
clearPreset();
}

View File

@ -52,6 +52,12 @@ public abstract class ThicknessRingComponent extends RingComponent {
@Override
public void setOuterRadius(double r) {
for (RocketComponent listener : configListeners) {
if (listener instanceof ThicknessRingComponent) {
((ThicknessRingComponent) listener).setOuterRadius(r);
}
}
r = Math.max(r,0);
if (MathUtil.equals(outerRadius, r) && !isOuterRadiusAutomatic())
return;
@ -65,12 +71,6 @@ public abstract class ThicknessRingComponent extends RingComponent {
clearPreset();
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof ThicknessRingComponent) {
((ThicknessRingComponent) listener).setOuterRadius(r);
}
}
}
@ -81,6 +81,12 @@ public abstract class ThicknessRingComponent extends RingComponent {
}
@Override
public void setThickness(double thickness) {
for (RocketComponent listener : configListeners) {
if (listener instanceof ThicknessRingComponent) {
((ThicknessRingComponent) listener).setThickness(thickness);
}
}
double outer = getOuterRadius();
thickness = MathUtil.clamp(thickness, 0, outer);
@ -92,12 +98,6 @@ public abstract class ThicknessRingComponent extends RingComponent {
clearPreset();
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof ThicknessRingComponent) {
((ThicknessRingComponent) listener).setThickness(thickness);
}
}
}
@ -107,14 +107,14 @@ public abstract class ThicknessRingComponent extends RingComponent {
}
@Override
public void setInnerRadius(double r) {
r = Math.max(r,0);
setThickness(getOuterRadius() - r);
for (RocketComponent listener : configListeners) {
if (listener instanceof ThicknessRingComponent) {
((ThicknessRingComponent) listener).setInnerRadius(r);
}
}
r = Math.max(r,0);
setThickness(getOuterRadius() - r);
}

View File

@ -103,6 +103,12 @@ public class Transition extends SymmetricComponent implements InsideColorCompone
}
public void setForeRadius(double radius) {
for (RocketComponent listener : configListeners) {
if (listener instanceof Transition) {
((Transition) listener).setForeRadius(radius);
}
}
if ((this.foreRadius == radius) && (autoForeRadius == false))
return;
@ -114,12 +120,6 @@ public class Transition extends SymmetricComponent implements InsideColorCompone
clearPreset();
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof Transition) {
((Transition) listener).setForeRadius(radius);
}
}
}
@Override
@ -128,6 +128,12 @@ public class Transition extends SymmetricComponent implements InsideColorCompone
}
public void setForeRadiusAutomatic(boolean auto) {
for (RocketComponent listener : configListeners) {
if (listener instanceof Transition) {
((Transition) listener).setForeRadiusAutomatic(auto);
}
}
if (autoForeRadius == auto)
return;
@ -135,12 +141,6 @@ public class Transition extends SymmetricComponent implements InsideColorCompone
clearPreset();
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof Transition) {
((Transition) listener).setForeRadiusAutomatic(auto);
}
}
}
@ -171,6 +171,12 @@ public class Transition extends SymmetricComponent implements InsideColorCompone
}
public void setAftRadius(double radius) {
for (RocketComponent listener : configListeners) {
if (listener instanceof Transition) {
((Transition) listener).setAftRadius(radius);
}
}
if ((this.aftRadius == radius) && (autoAftRadius2 == false))
return;
@ -182,12 +188,6 @@ public class Transition extends SymmetricComponent implements InsideColorCompone
clearPreset();
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof Transition) {
((Transition) listener).setAftRadius(radius);
}
}
}
@Override
@ -196,6 +196,12 @@ public class Transition extends SymmetricComponent implements InsideColorCompone
}
public void setAftRadiusAutomatic(boolean auto) {
for (RocketComponent listener : configListeners) {
if (listener instanceof Transition) {
((Transition) listener).setAftRadiusAutomatic(auto);
}
}
if (autoAftRadius2 == auto)
return;
@ -203,12 +209,6 @@ public class Transition extends SymmetricComponent implements InsideColorCompone
clearPreset();
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof Transition) {
((Transition) listener).setAftRadiusAutomatic(auto);
}
}
}
@ -248,6 +248,12 @@ public class Transition extends SymmetricComponent implements InsideColorCompone
}
public void setType(Shape type) {
for (RocketComponent listener : configListeners) {
if (listener instanceof Transition) {
((Transition) listener).setType(type);
}
}
if (type == null) {
throw new IllegalArgumentException("setType called with null argument");
}
@ -257,12 +263,6 @@ public class Transition extends SymmetricComponent implements InsideColorCompone
this.clipped = type.isClippable();
this.shapeParameter = type.defaultParameter();
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof Transition) {
((Transition) listener).setType(type);
}
}
}
public double getShapeParameter() {
@ -270,16 +270,16 @@ public class Transition extends SymmetricComponent implements InsideColorCompone
}
public void setShapeParameter(double n) {
if (shapeParameter == n)
return;
this.shapeParameter = MathUtil.clamp(n, type.minParameter(), type.maxParameter());
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof Transition) {
((Transition) listener).setShapeParameter(n);
}
}
if (shapeParameter == n)
return;
this.shapeParameter = MathUtil.clamp(n, type.minParameter(), type.maxParameter());
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
}
public boolean isClipped() {
@ -289,16 +289,16 @@ public class Transition extends SymmetricComponent implements InsideColorCompone
}
public void setClipped(boolean c) {
if (clipped == c)
return;
clipped = c;
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof Transition) {
((Transition) listener).setClipped(c);
}
}
if (clipped == c)
return;
clipped = c;
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
}
public boolean isClippedEnabled() {
@ -321,17 +321,17 @@ public class Transition extends SymmetricComponent implements InsideColorCompone
}
public void setForeShoulderRadius(double foreShoulderRadius) {
if (MathUtil.equals(this.foreShoulderRadius, foreShoulderRadius))
return;
this.foreShoulderRadius = foreShoulderRadius;
clearPreset();
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof Transition) {
((Transition) listener).setForeShoulderRadius(foreShoulderRadius);
}
}
if (MathUtil.equals(this.foreShoulderRadius, foreShoulderRadius))
return;
this.foreShoulderRadius = foreShoulderRadius;
clearPreset();
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
}
public double getForeShoulderThickness() {
@ -339,16 +339,16 @@ public class Transition extends SymmetricComponent implements InsideColorCompone
}
public void setForeShoulderThickness(double foreShoulderThickness) {
if (MathUtil.equals(this.foreShoulderThickness, foreShoulderThickness))
return;
this.foreShoulderThickness = foreShoulderThickness;
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof Transition) {
((Transition) listener).setForeShoulderThickness(foreShoulderThickness);
}
}
if (MathUtil.equals(this.foreShoulderThickness, foreShoulderThickness))
return;
this.foreShoulderThickness = foreShoulderThickness;
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
}
public double getForeShoulderLength() {
@ -356,16 +356,16 @@ public class Transition extends SymmetricComponent implements InsideColorCompone
}
public void setForeShoulderLength(double foreShoulderLength) {
if (MathUtil.equals(this.foreShoulderLength, foreShoulderLength))
return;
this.foreShoulderLength = foreShoulderLength;
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof Transition) {
((Transition) listener).setForeShoulderLength(foreShoulderLength);
}
}
if (MathUtil.equals(this.foreShoulderLength, foreShoulderLength))
return;
this.foreShoulderLength = foreShoulderLength;
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
}
public boolean isForeShoulderCapped() {
@ -373,16 +373,16 @@ public class Transition extends SymmetricComponent implements InsideColorCompone
}
public void setForeShoulderCapped(boolean capped) {
if (this.foreShoulderCapped == capped)
return;
this.foreShoulderCapped = capped;
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof Transition) {
((Transition) listener).setForeShoulderCapped(capped);
}
}
if (this.foreShoulderCapped == capped)
return;
this.foreShoulderCapped = capped;
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
}
@ -393,17 +393,17 @@ public class Transition extends SymmetricComponent implements InsideColorCompone
}
public void setAftShoulderRadius(double aftShoulderRadius) {
if (MathUtil.equals(this.aftShoulderRadius, aftShoulderRadius))
return;
this.aftShoulderRadius = aftShoulderRadius;
clearPreset();
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof Transition) {
((Transition) listener).setAftShoulderRadius(aftShoulderRadius);
}
}
if (MathUtil.equals(this.aftShoulderRadius, aftShoulderRadius))
return;
this.aftShoulderRadius = aftShoulderRadius;
clearPreset();
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
}
public double getAftShoulderThickness() {
@ -411,16 +411,16 @@ public class Transition extends SymmetricComponent implements InsideColorCompone
}
public void setAftShoulderThickness(double aftShoulderThickness) {
if (MathUtil.equals(this.aftShoulderThickness, aftShoulderThickness))
return;
this.aftShoulderThickness = aftShoulderThickness;
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof Transition) {
((Transition) listener).setAftShoulderThickness(aftShoulderThickness);
}
}
if (MathUtil.equals(this.aftShoulderThickness, aftShoulderThickness))
return;
this.aftShoulderThickness = aftShoulderThickness;
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
}
public double getAftShoulderLength() {
@ -428,16 +428,16 @@ public class Transition extends SymmetricComponent implements InsideColorCompone
}
public void setAftShoulderLength(double aftShoulderLength) {
if (MathUtil.equals(this.aftShoulderLength, aftShoulderLength))
return;
this.aftShoulderLength = aftShoulderLength;
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof Transition) {
((Transition) listener).setAftShoulderLength(aftShoulderLength);
}
}
if (MathUtil.equals(this.aftShoulderLength, aftShoulderLength))
return;
this.aftShoulderLength = aftShoulderLength;
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
}
public boolean isAftShoulderCapped() {
@ -445,16 +445,16 @@ public class Transition extends SymmetricComponent implements InsideColorCompone
}
public void setAftShoulderCapped(boolean capped) {
if (this.aftShoulderCapped == capped)
return;
this.aftShoulderCapped = capped;
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof Transition) {
((Transition) listener).setAftShoulderCapped(capped);
}
}
if (this.aftShoulderCapped == capped)
return;
this.aftShoulderCapped = capped;
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
}

View File

@ -57,6 +57,12 @@ public class TrapezoidFinSet extends FinSet {
public void setFinShape(double rootChord, double tipChord, double sweep, double height,
double thickness) {
for (RocketComponent listener : configListeners) {
if (listener instanceof TrapezoidFinSet) {
((TrapezoidFinSet) listener).setFinShape(rootChord, tipChord, sweep, height, thickness);
}
}
if (this.length == rootChord && this.tipChord == tipChord && this.sweep == sweep &&
this.height == height && this.thickness == thickness)
return;
@ -67,12 +73,6 @@ public class TrapezoidFinSet extends FinSet {
this.thickness = thickness;
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof TrapezoidFinSet) {
((TrapezoidFinSet) listener).setFinShape(rootChord, tipChord, sweep, height, thickness);
}
}
}
public double getRootChord() {
@ -80,18 +80,18 @@ public class TrapezoidFinSet extends FinSet {
}
public void setRootChord(double r) {
for (RocketComponent listener : configListeners) {
if (listener instanceof TrapezoidFinSet) {
((TrapezoidFinSet) listener).setRootChord(r);
}
}
if (length == r)
return;
length = Math.max(r, 0);
updateTabPosition();
fireComponentChangeEvent(ComponentChangeEvent.AEROMASS_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof TrapezoidFinSet) {
((TrapezoidFinSet) listener).setRootChord(r);
}
}
}
public double getTipChord() {
@ -99,16 +99,16 @@ public class TrapezoidFinSet extends FinSet {
}
public void setTipChord(double r) {
if (tipChord == r)
return;
tipChord = Math.max(r, 0);
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof TrapezoidFinSet) {
((TrapezoidFinSet) listener).setTipChord(r);
}
}
if (tipChord == r)
return;
tipChord = Math.max(r, 0);
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
}
/**
@ -122,16 +122,16 @@ public class TrapezoidFinSet extends FinSet {
* Set the sweep length.
*/
public void setSweep(double r) {
if (sweep == r)
return;
sweep = r;
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof TrapezoidFinSet) {
((TrapezoidFinSet) listener).setSweep(r);
}
}
if (sweep == r)
return;
sweep = r;
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
}
/**
@ -154,6 +154,12 @@ public class TrapezoidFinSet extends FinSet {
* and the angle itself is not stored.
*/
public void setSweepAngle(double r) {
for (RocketComponent listener : configListeners) {
if (listener instanceof TrapezoidFinSet) {
((TrapezoidFinSet) listener).setSweepAngle(r);
}
}
if (r > MAX_SWEEP_ANGLE)
r = MAX_SWEEP_ANGLE;
if (r < -MAX_SWEEP_ANGLE)
@ -162,12 +168,6 @@ public class TrapezoidFinSet extends FinSet {
if (Double.isNaN(mySweep) || Double.isInfinite(mySweep))
return;
setSweep(mySweep);
for (RocketComponent listener : configListeners) {
if (listener instanceof TrapezoidFinSet) {
((TrapezoidFinSet) listener).setSweepAngle(r);
}
}
}
public double getHeight() {
@ -175,16 +175,16 @@ public class TrapezoidFinSet extends FinSet {
}
public void setHeight(double r) {
if (height == r)
return;
height = Math.max(r, 0);
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof TrapezoidFinSet) {
((TrapezoidFinSet) listener).setHeight(r);
}
}
if (height == r)
return;
height = Math.max(r, 0);
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
}

View File

@ -61,16 +61,16 @@ public class TubeFinSet extends ExternalComponent implements AxialPositionable,
}
public void setLength(double length) {
if (MathUtil.equals(this.length, length))
return;
this.length = length;
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof TubeFinSet) {
((TubeFinSet) listener).setLength(length);
}
}
if (MathUtil.equals(this.length, length))
return;
this.length = length;
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
}
@ -122,6 +122,12 @@ public class TubeFinSet extends ExternalComponent implements AxialPositionable,
* @param radius the outside radius in standard units
*/
public void setOuterRadius(double radius) {
for (RocketComponent listener : configListeners) {
if (listener instanceof TubeFinSet) {
((TubeFinSet) listener).setOuterRadius(radius);
}
}
if ((this.outerRadius == radius) && (autoRadius == false))
return;
@ -132,30 +138,24 @@ public class TubeFinSet extends ExternalComponent implements AxialPositionable,
this.thickness = this.outerRadius;
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
clearPreset();
for (RocketComponent listener : configListeners) {
if (listener instanceof TubeFinSet) {
((TubeFinSet) listener).setOuterRadius(radius);
}
}
}
/**
* Sets whether the radius is selected automatically or not.
*/
public void setOuterRadiusAutomatic(boolean auto) {
for (RocketComponent listener : configListeners) {
if (listener instanceof TubeFinSet) {
((TubeFinSet) listener).setOuterRadiusAutomatic(auto);
}
}
if (autoRadius == auto)
return;
autoRadius = auto;
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
clearPreset();
for (RocketComponent listener : configListeners) {
if (listener instanceof TubeFinSet) {
((TubeFinSet) listener).setOuterRadiusAutomatic(auto);
}
}
}
public double getInnerRadius() {
@ -163,13 +163,13 @@ public class TubeFinSet extends ExternalComponent implements AxialPositionable,
}
public void setInnerRadius(double r) {
setThickness(getOuterRadius() - r);
for (RocketComponent listener : configListeners) {
if (listener instanceof TubeFinSet) {
((TubeFinSet) listener).setInnerRadius(r);
}
}
setThickness(getOuterRadius() - r);
}
/**
@ -185,17 +185,17 @@ public class TubeFinSet extends ExternalComponent implements AxialPositionable,
* allowed, and will result in setting the thickness to the maximum radius.
*/
public void setThickness(double thickness) {
if ((this.thickness == thickness))
return;
this.thickness = MathUtil.clamp(thickness, 0, getOuterRadius());
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
clearPreset();
for (RocketComponent listener : configListeners) {
if (listener instanceof TubeFinSet) {
((TubeFinSet) listener).setThickness(thickness);
}
}
if ((this.thickness == thickness))
return;
this.thickness = MathUtil.clamp(thickness, 0, getOuterRadius());
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
clearPreset();
}
@ -217,6 +217,12 @@ public class TubeFinSet extends ExternalComponent implements AxialPositionable,
* @param n The number of fins, greater of equal to one.
*/
public void setFinCount(int n) {
for (RocketComponent listener : configListeners) {
if (listener instanceof TubeFinSet) {
((TubeFinSet) listener).setFinCount(n);
}
}
if (fins == n)
return;
if (n < 1)
@ -226,12 +232,6 @@ public class TubeFinSet extends ExternalComponent implements AxialPositionable,
fins = n;
finRotation = Transformation.rotate_x(2 * Math.PI / fins);
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof TubeFinSet) {
((TubeFinSet) listener).setFinCount(n);
}
}
}
/**
@ -251,13 +251,13 @@ public class TubeFinSet extends ExternalComponent implements AxialPositionable,
* @param r The base rotation amount.
*/
public void setBaseRotation(double r) {
setAngleOffset(r);
for (RocketComponent listener : configListeners) {
if (listener instanceof TubeFinSet) {
((TubeFinSet) listener).setBaseRotation(r);
}
}
setAngleOffset(r);
}
public Transformation getBaseRotationTransformation() {
@ -397,13 +397,13 @@ public class TubeFinSet extends ExternalComponent implements AxialPositionable,
@Override
public void setInstanceCount(int newCount) {
setFinCount(newCount);
for (RocketComponent listener : configListeners) {
if (listener instanceof TubeFinSet) {
((TubeFinSet) listener).setInstanceCount(newCount);
}
}
setFinCount(newCount);
}
@Override
@ -425,6 +425,12 @@ public class TubeFinSet extends ExternalComponent implements AxialPositionable,
@Override
public void setAngleOffset(double angleRadians) {
for (RocketComponent listener : configListeners) {
if (listener instanceof TubeFinSet) {
((TubeFinSet) listener).setAngleOffset(angleRadians);
}
}
final double reducedAngle = MathUtil.reducePi(angleRadians);
if (MathUtil.equals(reducedAngle, firstFinOffsetRadians))
return;
@ -437,12 +443,6 @@ public class TubeFinSet extends ExternalComponent implements AxialPositionable,
}
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof TubeFinSet) {
((TubeFinSet) listener).setAngleOffset(angleRadians);
}
}
}
@Override
@ -457,15 +457,15 @@ public class TubeFinSet extends ExternalComponent implements AxialPositionable,
@Override
public void setAngleMethod(AngleMethod newAngleMethod) {
mutex.verify();
this.angleMethod = newAngleMethod;
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
for (RocketComponent listener : configListeners) {
if (listener instanceof TubeFinSet) {
((TubeFinSet) listener).setAngleMethod(newAngleMethod);
}
}
mutex.verify();
this.angleMethod = newAngleMethod;
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
}
@Override

View File

@ -81,8 +81,6 @@ public abstract class FinSetConfig extends RocketComponentConfig {
public void run() {
//// Convert fin set
document.addUndoPosition(trans.get("FinSetConfig.Convertfinset"));
RocketComponent freeform =
FreeformFinSet.convertFinSet((FinSet) component);
List<RocketComponent> listeners = new ArrayList<>();
for (RocketComponent listener : component.getConfigListeners()) {
@ -91,6 +89,9 @@ public abstract class FinSetConfig extends RocketComponentConfig {
}
}
RocketComponent freeform =
FreeformFinSet.convertFinSet((FinSet) component);
ComponentConfigDialog.showDialog(freeform, listeners);
}
});