
Feature roadmap for OpenRocket 1.0
----------------------------------


Must-have:


Maybe:




Postponed:
----------


Memory usage:

- Store data as floats instead of doubles
- Reduce memory leakage when closing windows
- Make simulation data immutable, don't store copies in undo/redo
- Profile memory usage during operation (send data to server?)
- Warn user when 90% of memory is used, offer to send info to server


Logging:

- Implement a central logging system
  - takes messages with different priorities
  - converts them into LogLine's that are passed to log handlers
  - printing log handler and storing log handler
  - bug reports to contain last ~50 log lines
- LogLine
  - contains TraceException for log position information
  - contains sequential number
- log storing handler stores separately debug and info/warn levels
- remove all System.out/err writing, replace with logging


Motor support:

- Combine duplicates into one display in the selection dialog
  - A single manufacturer/designation can contain multiple thrust curves
  - Delays are combined
  - Type is selected based on any not-unknown type
  - Hybrid type always includes P delay
  - Default delay selected based on heuristics
  - Store recently used motors, use in default selection
- Integration with thrustcurve.org (syncing?)
- Reading thrust curves from external directory
- Plot motor thrust curve
- Water rocket modelling


Optimization:

- Automatic general rocket optimizer (for altitude, velocity, duration etc)
  that allows changing any rocket parameters for optimization
- Analysis of various motors for the rocket.  Search all motors by
  diameter, impulse range, manufacturer, simulate them and present the
  results.


Running:

- Windows executable wrapper (launch4j)
- Allow only one instance of OpenRocket running (RMI communication)
- Running/simulating from command line


UI issues:

- Easy/intuitive zooming of plots
- Only schedule rocket figure update instead of each time updating it
- Importing flight data (file/altimeter)
- Saving as SVG
- Implement setDefaults() method for RocketComponent
- BUG: Inner tube cluster rotation, edit with spinner arrows, slider wrong
- NAR/CNES/etc competition validity checking
- Print support
- Drag and drop of components / other table items
- Ctrl+scroll wheel to zoom in/out
- Move components by dragging on the figure
- Progress bar during startup


Simulation:

- Landing scatter plots
- Simulate other branches
- Remove need for 5m launch rod in real-time simulations (reduces apogee)
  A simulation listener that checks when sufficient velocity has been reached?
- [BUG] Take single-fin cant yaw effect into account


Structural analysis:

- Run a simulation with each step doing a component analysis
- Compute the force between different components:
  - between body components (pushing against and pulling apart)
  - inner tubes and the parent body tubes
  - lateral forces on fins
  - individual fin normal forces?
- Take into account acceleration, drag, gravity
- Plot forces against time


Component support:

- Screw weights for nose cones / transitions
- Support for external pods
- Support for tube fins


File support:

- Reading (and writing) .RKT format


Refactoring tasks:

- Move startup class to src14 directory, remove reflection
- Remove database etc. initialization from class initialization,
  create separate set of test motors
- Extract event rules and data saving from Simulator into listeners
- How to handle different simulation situations elegantly
  (launch rod, free flight, recovery)
- Change SimulationStatus to include methods for obtaining basic
  position (maybe even change to an interface, implements Cloneable)
- Modularize calculators, simulators, atmospheric conditions, etc.
- Change Motor (immutable) to be a factory of MotorInstance (stateful)



Done:
-----
- Search field in motor selection dialog
- Motor selection/editing from Edit configurations dialog
- Change FreeformFinSet to throw checked exceptions
- Fix engine block icons
- Exporting flight data
- Split cluster into separate components
- Create application icon and take into use
- Error dialog for uncaught exceptions
- Check where plot data ends (all rest NaN)
- Example rocket designs (hybrid w/ dual deployment, staged rocket)
- Better error/warning dialogs when reading/writing files
- Store custom materials
- Read more thrust curve formats
- Showing events in plots
- Table boolean selecting by clicking label
- Test automatic exception reporting (for 0.9.3)
- Draw remaining event icons (for 0.9.3)
- Update "About" dialog with icon and source info
In 0.9.4:
- Through-the-wall fins
- Make ThicknessRingComponent implement RadialParent and allow
  attaching components to a TubeCoupler  (for 0.9.4)
- Save file as oldest OpenRocket format possible  (for 0.9.4)
- Non-exception bug handling
- JTree text is cropped unnecessarily
- Allow editing user-defined materials
- [BUG] All configuration dialogs too high
- Simulation plot dialog forces dialog one button row too high (All/None)
- Add styrofoam and depron materials
- Inform user about software updates
In 0.9.5:
- Add label to motor panel to tell current number of stages
In 0.9.6:
- Take into account all fins in interference effects
- Two-fin rocket stable at large number of roll angles?!
- Add slight randomness to yaw moment
- Update simulation time step filtering from exponential MA to
  exponential growth until time step is reached (t1 = 1.5*t0)
- Limit time step during while on launch rod
- Re-investigate 15% reduction of three-fin CNa
In 1.0.0:
- BUG: Simulation table max. acceleration takes into account parachute deceleration
- Go through thrust curves and select best ones
- Updated splash screen
- BUG: Invalid fin points possible when removing points
