lose embedded source jars from upstream branch
[debian/openrocket] / core / src / net / sf / openrocket / rocketcomponent / Parachute.java
1 package net.sf.openrocket.rocketcomponent;
2
3 import net.sf.openrocket.l10n.Translator;
4 import net.sf.openrocket.material.Material;
5 import net.sf.openrocket.startup.Application;
6 import net.sf.openrocket.util.MathUtil;
7
8 public class Parachute extends RecoveryDevice {
9         private static final Translator trans = Application.getTranslator();
10         
11         public static final double DEFAULT_CD = 0.8;
12         
13         private double diameter;
14         
15         private Material lineMaterial;
16         private int lineCount = 6;
17         private double lineLength = 0.3;
18         
19         
20         public Parachute() {
21                 this.diameter = 0.3;
22                 this.lineMaterial = Application.getPreferences().getDefaultComponentMaterial(Parachute.class, Material.Type.LINE);
23                 this.lineLength = 0.3;
24         }
25         
26         
27         public double getDiameter() {
28                 return diameter;
29         }
30         
31         public void setDiameter(double d) {
32                 if (MathUtil.equals(this.diameter, d))
33                         return;
34                 this.diameter = d;
35                 fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
36         }
37         
38         
39         public final Material getLineMaterial() {
40                 return lineMaterial;
41         }
42         
43         public final void setLineMaterial(Material mat) {
44                 if (mat.getType() != Material.Type.LINE) {
45                         throw new IllegalArgumentException("Attempted to set non-line material " + mat);
46                 }
47                 if (mat.equals(lineMaterial))
48                         return;
49                 this.lineMaterial = mat;
50                 if (getLineCount() != 0)
51                         fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
52                 else
53                         fireComponentChangeEvent(ComponentChangeEvent.NONFUNCTIONAL_CHANGE);
54         }
55         
56         
57         public final int getLineCount() {
58                 return lineCount;
59         }
60         
61         public final void setLineCount(int n) {
62                 if (this.lineCount == n)
63                         return;
64                 this.lineCount = n;
65                 fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
66         }
67         
68         public final double getLineLength() {
69                 return lineLength;
70         }
71         
72         public final void setLineLength(double length) {
73                 if (MathUtil.equals(this.lineLength, length))
74                         return;
75                 this.lineLength = length;
76                 if (getLineCount() != 0)
77                         fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
78                 else
79                         fireComponentChangeEvent(ComponentChangeEvent.NONFUNCTIONAL_CHANGE);
80         }
81         
82         
83         @Override
84         public double getComponentCD(double mach) {
85                 return DEFAULT_CD; // TODO: HIGH:  Better parachute CD estimate?
86         }
87         
88         @Override
89         public double getArea() {
90                 return Math.PI * MathUtil.pow2(diameter / 2);
91         }
92         
93         public void setArea(double area) {
94                 if (MathUtil.equals(getArea(), area))
95                         return;
96                 diameter = MathUtil.safeSqrt(area / Math.PI) * 2;
97                 fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
98         }
99         
100         @Override
101         public double getComponentMass() {
102                 return super.getComponentMass() +
103                                 getLineCount() * getLineLength() * getLineMaterial().getDensity();
104         }
105         
106         @Override
107         public String getComponentName() {
108                 //// Parachute
109                 return trans.get("Parachute.Parachute");
110         }
111         
112         @Override
113         public boolean allowsChildren() {
114                 return false;
115         }
116         
117         @Override
118         public boolean isCompatible(Class<? extends RocketComponent> type) {
119                 return false;
120         }
121         
122 }