Map wind rotation
Note: we'd like to generate a realistic course layout, that can vary from race to race (but not within a race, for now.) The generated layout must be sent through the API in the format given by the race.xml section of the AC35 Streaming Data Interface Specification. The AC35 Protocol (sections 31.4 and 31.5) specifies the requirements for a course:
* First leg of the course (from start line to first mark) must be a reaching leg
* Next legs are windward/leeward, and boats complete either two or three laps of this section
* Final leg to finish line may be a reaching leg
* A boat should take around 25 minutes to complete the course in the wind conditions at the start of the race (AC35 protocol, section 31.5)
You should assume that the windward/leeward marks and start/finish lines are always compounds of two marks.
Acceptance criteria:
* The layout must be sent over the API in a race.xml message, plus boat location messages for the marks as required, before any other boat location messages are sent.
* Each mark must be defined using boat "SourceID"s (see definition of race.xml) so their positions can be adjusted later.
* The course must meet the requirements given in the AC35 Protocol.
* The course limits should be set to clear all marks by at least several boat-lengths.
* The entire race area within the limits must be on the water.
See merge request !22
- more than one visualiser can now connect to the mock.
- Created class ConnectionAcceptor that will accept and allocate to each socket
- Issue of sockets connecting after the race starts then disconnecting will use a socket slot.
#story[1010]
-Added checkboxes to display name, abbreviation, and speed in annotation.
-Changed single titlepane to an accordion.
-Moved all annotation controls to separate titlepane in accordion.
-Added buttons to save and load saved annotation settings.
#story[26]
-XMLReader class for generic XML Reading Created
- RaceXML Reader class made specifically for reading races
- RaceController COnstants now replced with XML file
#implement
- Changed starting Boats into ObservableList from array
- stopped checkPosition in Race abstract class from updating the table as everytime as it is checked by a listener
- Changed array methods .length to .size() and [i] to .get() to reflect the type change.
#refactor #story[9]
-Added Controller abstract class that all JavaFX controllers are to be a child of.
-Added MainController in case in the future we need a menu.
-Added mainpane.fxml as a base pane that we can mount the future menu on.
-Added RaceController so where the race will be made and displayed.
-Added racepane.fxml which includes a Canvas and a tableview
-Added loadPane() function to the mainApp which will swap the pane the app is currently on.
#story[9]
- Changed Race to an abstract class
- Protected and privated certain variables
- Wrote Javadocs for the classes and functions
- Moved generate race from RandomisedRace and ConstantVelocityRace to the abstract Race class
- Added string checking exception for Scanner for whether to run in 1 minute or 5 minutes
#pair[fwy13, cbt24]
- Changed it from launching the program with args setting to with Scanner.
- Changed field 'factor' to 'timescale' in Race class
#story [5] #pair[fwy13, cbt24]