[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:
parent
117c0c76ca
commit
e8a2fbf449
@ -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
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -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
|
||||
|
@ -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) {
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -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
|
||||
|
@ -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 );
|
||||
}
|
||||
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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() {
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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();
|
||||
}
|
||||
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
}
|
||||
});
|
||||
|
Loading…
x
Reference in New Issue
Block a user