- Rocket total mass is split into 'dryMass' and 'propellantMass'
-- each mass type has a corresponding calculation method in MassCalculator
- Calculating Inertias and Center-of-Mass FOR MOTORS assume:
- time-invariant x-coordinate
- time-decreasing density
- mass correctly tracks propellant usage, as measured by thrustCurves
- elimated MassCalcType enum: was not actually solving a problem.
- simply use motorTime: 0 for launch Double.MAX_VALUE for burnout
- NO_MOTORS is represented by a configuration without attached motors
-- try: "rocket.setSelectedConfiguration( rocket.getEmptyConfiguration())"
- 'dry mass' vs 'total mass': 90% of the time, a caller wanted 'total mass'
- total_mass = dry_mass + propellant_mass
- mass @ simulation time wasn't represented by the enum, had existing overloads anyway
- get vs calculate methods:
-- gets revalidate the cache, then retreive specific information
-- calculate simple calculate the desired information, and ignore the cache.
--- I'm particularly confident about cache reliability:
particularly as it doesn't account for changing time during simulation.
- reduced / simplified debugging messages
- Cleaned up the ThrustCurveMotor api interface
-- Converted 'getTimePoints().length' -> 'getSampleSize()'
-- Unified ThrustCurveMotor gets to the form getXXXX(double motorTime)
-- Restricted access for several methods from public -> protected
- Updated ThrustCurveMotorTest.java
- Pulled JComboBoxModel<FlightConfiguration> into its own class: ConfigurationModel
-- removed Rocket.toConfigArray() --> getFlightConfigurationByIndex(int,bool)
-Refactored document.getDefaultConfiguration -> getSelected...
-- because that's what it does. Default is a different thing.
-minor: minor spelling errors and unused fields/functions
- Rocket.getSelectedConfiguration will now create a new
configuration if only the default config exists
-- added additional unit tests for this behavior in: FLightConfigurationTest
- added test for saving ver 1.08 files to OpenRocketSaverTest
- Converted : "private static final long serialVersionUID ..." declarations to:
"@SuppressWarnings("serial")"
- cleaned up some other random errors:
-- tightened excessive permission modifiers -- public ->
-- change some methods from 'public' to '/*package-local*/'
- Fixed bugs in the simulation event handling:
-- removed extraneous BURNOUT checks
-- added MotorClusterState.burnOut(..) update calls on BURNOUT event
-- added MotorClusterState.expend(..) update calls on EJECTION_CHARGE event
- MotorInstanceId -> MotorConfigurationId (to reflect actual usage)
-- removed name field (unnecessary)
- changed FlightConfiguration behavior to cache ALL motors, and return active motors as requested
-- updated corresponding active-motor-list updating through to the simulation layers
- *Adjusted event handling in BasicEventSimulationEngine*
-- combined redundant event-handling for IGNITION FlightEvent
-- adjusted parameters for throwing IGNITION FlightEvents
- Added validation method internal to FlightEvent class.
-- documents assumptions about classes are expected for what types of flight events.
- renamed MotorState -> MotorSimulation -> MotorClusterState
- renamed MotorState enums -> ThrustState
- Adjusted MotorConfigurations to be init-linked to a mount, and FCID
-- these are final member fields, and required for construction. And immutable.
- moved IgnitionEvent to motor package
- Adjusted MotorInstanceId to represent a motorCluster key
-- wraps a UUID, and uniquely keyed to its: mount, FCID
- fixed AxialStage methods isLaunchStage() and getPreviousStage()
- added methods to MotorMount interface to reduce extraneous, always-true casts
- various miscellaneous fixes to reflect method changes
- various test fixes
-- added test to verify 'getPreviousStage()' method
- Created MotorState as an enum describing discrete states a motor may be in
- moved ThrustCurveMotorState info back into MotorSimulation
-- MotorSimulation will be used by the simulation code.
-- tracks simulation-time info, such as event times, and current state ( <MotorState> )
- MotorConfiguration no longer have any knowledge about their simulation info
- moved functionality (BUT NOT STATE) into ThrustCurveMotor
-- can query about thrust(t), mass(t), cgx(t)
- Fixed Bug in MassCalculator
-- demonstrated by MassCalculatorTest.testBoosterTotalCM() et al.
-- errors: 1) under-counts instanced children
2) erroneously required component have children before instancing mass
-- N.B. This method is ripe for refactoring, to make it MUCH cleaner....
- Updated numbers on MassCalculator Unit Tests
- Added Test for motor configuration multiplicity (FlightConfigurationTest)
- Simulations now load the configuration ids corresponding to it's file entry.
- involved removing redundand flightconfig id fields
- FROM simulation conditions and simulation options
- TO "Simulation"
- Distilled some unit tests to use all rockets from the TestRocket class.
- Fixed a few warnings
Implemented unit tests for aerodynamic calculators:
- (new) SymmetricComponentCalcTest
- (new) FinSetCalcTest
- (fixed) BarrowmanCalculatorTest
-- seems like bad truth values
- Added debug statements to MassCalculator, enabled by a 'debug' flag
- Adjusted values in MassCalculatorTest
-- added additional unit test cases
- Fixed implementations in MassCalculator
- Implemented getPosition() and getX() in MotorConfiguration
- added motor to test rocket Estes Alpha 3 in TestRockets
# FlightConfigurations behave differently than the ...ParameterSet instance
- Rockets no longer have a defaultConfig, but have a selectedConfiguration
- therefore these function were completely re-implemented native to the Rocket class
- FlightConfigurationTest verifies this functionality
- simplified several function calls through the code base
- added convenience methods for getting the config[] to the UI
# expanded RocketTest to verify Rocket.copyWithOriginalID():
- rocket is cloned, so non-trivial members must be cloned as well.
- the default value is now simply an entry in the map
- size() returns only the number of overrides
- getIds() returns only the ids of overrides
- added ParemeterSetTest to test FlightConfigurableParameterSet
- removed (already defanged) event handling functions from MotorConfig
- removed (already defanged) event handling functions from DeploymentConfig
- removed (already defanged) event handling functions from IgnitionConfig
- FlightConfigurableParameter no longer extends ChangeSet
- fully parameterized DoubleModel to <T extends Enum<T> >
- fully parameterized EnumModel to <T extends Enum<T> >
- in FlightConfiguration:
-- adjusted functions to consistently refer to <x>ActiveMotors()
-- corresponding functions now act the same way
- removed '.release()' calls from FlightConfiguration
RailButtons can be loaded, and edited, but not really displayed.
- data entry has defined file parameters, but needs some debugging.
- added icons for component creation. The button just needs to be uncommented
- display works, but only for rotation = 0;
- requires a new type of shape drawing. Not inherently hard, just tedious.
AutoRadialOffset is a boolean flag on parallel stages
- when enabled, the radialOffset is automatically
- auto radius is based on the max radius of contained components
- Launch Lugs correctly position themselves
(used to default to the centerline of the rocket)
added LaunchLugTest class
- Booster Sets automatically adjust radial distance
- based on own, and others' body radius.
- Refactored shiftCoordinates(...) => getInstanceLocations()
- MassCalculator class:
Debug toggle will print debug-level output to stderr
fixed / reimplemented:
getCG(...) -> getCM( FlightConfiguration, MassCalcType);
-> getRotationalInertia( FlightConfiguration, MassCalcType);
-> getLongitudinalInertia( FlightConfiguration, MassCalcType);
- MassData class:
can now add MassData classes
Instanced componets w/children:
take into account component mass...
propellantMass field is vague: no indication whether it's include in the inertia or not.
longitudinalInertia => rollMOI (?)
rotationalInertia => yaw / pitch MOI (?)
assorted other fixes
- added unit test classes:
... .masscalc.MassCalculatorTest;
... .masscalc.MassDataTest;