Began on tests for Race class.

- Made really good progress using Mockito and calling .handle() on animation timers

#story[881]
main
Erika Savell 9 years ago
parent fd036c1835
commit 892bfd9676

@ -54,7 +54,7 @@ public class Race implements Runnable {
* Countdown timer until race starts. * Countdown timer until race starts.
*/ */
private AnimationTimer countdownTimer = new AnimationTimer() { protected AnimationTimer countdownTimer = new AnimationTimer() {
long currentTime = System.currentTimeMillis(); long currentTime = System.currentTimeMillis();
long timeLeft; long timeLeft;
@Override @Override

@ -1,146 +1,104 @@
//package seng302.Model; package seng302.Model;
//
//import javafx.scene.paint.Color; import javafx.scene.paint.Color;
//import org.junit.BeforeClass; import org.junit.BeforeClass;
//import org.junit.Ignore; import org.junit.Ignore;
//import org.junit.Test; import org.junit.Test;
//import org.mockito.Mockito; import org.mockito.Mockito;
//import org.xml.sax.SAXException; import org.xml.sax.SAXException;
//import seng302.DataInput.RaceDataSource; import seng302.DataInput.BoatDataSource;
//import seng302.DataInput.RaceXMLReader; import seng302.DataInput.BoatXMLReader;
//import seng302.MockOutput; import seng302.DataInput.RaceDataSource;
// import seng302.DataInput.RaceXMLReader;
//import javax.xml.parsers.ParserConfigurationException; import seng302.Exceptions.StreamedCourseXMLException;
//import java.io.IOException; import seng302.MockOutput;
//import java.util.ArrayList;
//import java.util.List; import javax.xml.parsers.ParserConfigurationException;
// import java.io.IOException;
//import static org.junit.Assert.assertEquals; import java.text.ParseException;
//import static org.junit.Assert.assertTrue; import java.util.ArrayList;
//import static org.junit.Assert.fail; import java.util.List;
//import static org.mockito.Matchers.any;
//import static org.mockito.Mockito.atLeast; import static org.junit.Assert.assertEquals;
//import static org.mockito.Mockito.verify; import static org.junit.Assert.assertTrue;
// import static org.junit.Assert.fail;
///** import static org.mockito.Matchers.*;
// * Created by esa46 on 15/03/17. import static org.mockito.Mockito.*;
// */
//public class RaceTest{ /**
// * Created by esa46 on 15/03/17.
// private static MockOutput mockOutput; */
// SharedModel.Leg START_LEG = new SharedModel.Leg("Start", new SharedModel.Marker(new SharedModel.GPSCoordinate(0, 0)), new SharedModel.Marker(new SharedModel.GPSCoordinate(1, 1)), 0); public class RaceTest{
// SharedModel.Leg FINISH_LEG = new SharedModel.Leg("Finish", new SharedModel.Marker(new SharedModel.GPSCoordinate(1, 1)), new SharedModel.Marker(new SharedModel.GPSCoordinate(2, 2)), 0);
// @Test
//// @Override public void countdownTimerSendsBoatLocations() {
//// public void start(Stage primaryStage) throws Exception{}
//// try {
//// public static void main(String[] args) { MockOutput mockOutput = Mockito.mock(MockOutput.class);
//// launch(args); BoatDataSource boatDataSource = new BoatXMLReader("mockXML/boatTest.xml");
//// } RaceDataSource raceDataSource = new RaceXMLReader("mockXML/raceTest.xml", boatDataSource);
// Race testRace = new Race(raceDataSource, mockOutput);
// testRace.initialiseBoats();
//// @BeforeClass testRace.countdownTimer.handle(1);
//// public static void initJFX() { verify(mockOutput, atLeast(boatDataSource.getBoats().size())).parseBoatLocation(anyInt(), anyDouble(), anyDouble(), anyDouble(), anyDouble());
//// Thread t = new Thread("JavaFX Init Thread") {
//// public void run() { } catch (ParserConfigurationException | IOException | SAXException | ParseException | StreamedCourseXMLException e) {
//// Application.launch(TestApp.class, new String[0]); e.printStackTrace();
//// } fail();
//// }; }
//// t.setDaemon(true); }
//// t.start();
//// } @Test
// public void countdownTimerSendsRaceStatusMessages() {
// @BeforeClass
// public static void setUp() { try {
// try { MockOutput mockOutput = Mockito.mock(MockOutput.class);
// mockOutput = new MockOutput(); RaceDataSource dataSource = new RaceXMLReader("mockXML/raceTest.xml", new BoatXMLReader("mockXML/boatTest.xml"));
// } catch(IOException e) { Race testRace = new Race(dataSource, mockOutput);
// fail(); testRace.initialiseBoats();
// } testRace.countdownTimer.handle(1);
// } verify(mockOutput, atLeast(1)).parseRaceStatus(any());
//
// @Ignore } catch (ParserConfigurationException | IOException | SAXException | ParseException | StreamedCourseXMLException e) {
// @Test e.printStackTrace();
// public void boatLocationMessagesAreGenerated() { fail();
// try { }
// RaceDataSource raceDataSource = new RaceXMLReader("raceXML/bermuda_AC35.xml"); }
//
// MockOutput mockOutput = Mockito.mock(MockOutput.class);
// Race race = new Race(raceDataSource, 100, mockOutput);
// new Thread((race)).start();
//
// try {
// Thread.sleep(5000);
// } catch (InterruptedException e) {
// fail();
// }
// verify(mockOutput, atLeast(400)).parseBoatLocation(any());
//
// } catch (IOException e) {
// fail();
// } catch (SAXException e) {
// fail();
// } catch (ParserConfigurationException e) {
// fail();
// }
// }
//
// @Test
// public void timerCanBeDisabled() {
// SharedModel.BoatInRace boat1 = new SharedModel.BoatInRace("Test 1", 10000, Color.ALICEBLUE, "t1", 1);
// SharedModel.BoatInRace boat2 = new SharedModel.BoatInRace("Test 2", 10000, Color.BURLYWOOD, "t2", 2);
// List<SharedModel.BoatInRace> boats = new ArrayList<>();
// boats.add(boat1);
// boats.add(boat2);
//
// ArrayList<SharedModel.Leg> legs = new ArrayList<>();
// legs.add(START_LEG);
// legs.add(FINISH_LEG);
//
//
// Race race = new Race(boats, legs, 5, mockOutput);
// race.setDnfChance(0);
// long timeStarted = System.currentTimeMillis();
// race.run();
// assertTrue(System.currentTimeMillis() - timeStarted < 4000);
// }
//
// @Test // @Test
// public void checkPositionUpdatesNumberFinishedBoats() { // public void checkPositionUpdatesNumberFinishedBoats() {
// //
// SharedModel.BoatInRace finishedBoat = new SharedModel.BoatInRace("Test", 1000, Color.ALICEBLUE, "tt", 1); // Boat finishedBoat = new Boat(1000, "Name", "Country");
// finishedBoat.setDistanceTravelledInLeg(500); // finishedBoat.setDistanceTravelledInLeg(500);
// //
// finishedBoat.setCurrentLeg(FINISH_LEG); // finishedBoat.setCurrentLeg(FINISH_LEG);
// //
// ArrayList<SharedModel.BoatInRace> boats = new ArrayList<>(); // ArrayList<Boat> boats = new ArrayList<>();
// boats.add(finishedBoat); // boats.add(finishedBoat);
// //
// ArrayList<SharedModel.Leg> legs = new ArrayList<>(); // ArrayList<Leg> legs = new ArrayList<>();
// legs.add(FINISH_LEG); // legs.add(FINISH_LEG);
// //
// Race race = new Race(boats, legs, 5, mockOutput); // Race race = new Race(boats, legs, 5, mockOutput);
// race.setDnfChance(0);
// assertEquals(race.boatsFinished, 0); // assertEquals(race.boatsFinished, 0);
// //
// race.checkPosition(finishedBoat, 100000); // race.checkPosition(finishedBoat, 100000);
// assertEquals(race.boatsFinished, 1); // assertEquals(race.boatsFinished, 1);
// assertEquals(finishedBoat.getTimeFinished(), 100000); // assertEquals(finishedBoat.getTimeFinished(), 100000);
//
// } // }
//
// @Test // @Test
// public void checkPositionDoesntUpdateNumberFinishedBoats() { // public void checkPositionDoesntUpdateNumberFinishedBoats() {
// //
// SharedModel.BoatInRace unFinishedBoat = new SharedModel.BoatInRace("Test", 10, Color.ALICEBLUE, "tt", 1); // Boat unFinishedBoat = new Boat("Test", 10, Color.ALICEBLUE, "tt", 1);
// unFinishedBoat.setDistanceTravelledInLeg(0); // unFinishedBoat.setDistanceTravelledInLeg(0);
// //
// unFinishedBoat.setCurrentLeg(FINISH_LEG); // unFinishedBoat.setCurrentLeg(FINISH_LEG);
// //
// ArrayList<SharedModel.BoatInRace> boats = new ArrayList<>(); // ArrayList<Boat> boats = new ArrayList<>();
// boats.add(unFinishedBoat); // boats.add(unFinishedBoat);
// //
// ArrayList<SharedModel.Leg> legs = new ArrayList<>(); // ArrayList<Leg> legs = new ArrayList<>();
// legs.add(FINISH_LEG); // legs.add(FINISH_LEG);
// //
// //
@ -155,9 +113,9 @@
// @Test // @Test
// public void distanceTravelledBeforeUpdatingLegIsRetained() { // public void distanceTravelledBeforeUpdatingLegIsRetained() {
// //
// ArrayList<SharedModel.BoatInRace> boats = new ArrayList<>(); // ArrayList<Boat> boats = new ArrayList<>();
// //
// ArrayList<SharedModel.Leg> legs = new ArrayList<>(); // ArrayList<Leg> legs = new ArrayList<>();
// //
// legs.add(START_LEG); // legs.add(START_LEG);
// legs.add(FINISH_LEG); // legs.add(FINISH_LEG);
@ -165,7 +123,7 @@
// Race race = new Race(boats, legs, 1, mockOutput); // Race race = new Race(boats, legs, 1, mockOutput);
// race.setDnfChance(0); // race.setDnfChance(0);
// //
// SharedModel.BoatInRace unFinishedBoat = new SharedModel.BoatInRace("Test", 10, Color.ALICEBLUE, "tt", 4); // Boat unFinishedBoat = new Boat("Test", 10, Color.ALICEBLUE, "tt", 4);
// unFinishedBoat.setDistanceTravelledInLeg(100); // unFinishedBoat.setDistanceTravelledInLeg(100);
// unFinishedBoat.setCurrentLeg(START_LEG); // unFinishedBoat.setCurrentLeg(START_LEG);
// //
@ -179,9 +137,9 @@
// @Test // @Test
// public void timerDelaysByHalfSecond() throws InterruptedException { // public void timerDelaysByHalfSecond() throws InterruptedException {
// //
// ArrayList<SharedModel.BoatInRace> boats = new ArrayList<>(); // ArrayList<Boat> boats = new ArrayList<>();
// //
// ArrayList<SharedModel.Leg> legs = new ArrayList<>(); // ArrayList<Leg> legs = new ArrayList<>();
// legs.add(START_LEG); // legs.add(START_LEG);
// //
// Race race = new Race(boats, legs, 1, mockOutput); // Race race = new Race(boats, legs, 1, mockOutput);
@ -207,17 +165,17 @@
// float vel2 = (float) 1.999; // float vel2 = (float) 1.999;
// float vel3 = (float) 32.5; // float vel3 = (float) 32.5;
// float vel4 = 500; // float vel4 = 500;
// SharedModel.BoatInRace boat1 = new SharedModel.BoatInRace("test", vel1, Color.ALICEBLUE, "tt",1); // Boat boat1 = new Boat("test", vel1, Color.ALICEBLUE, "tt",1);
// SharedModel.BoatInRace boat2 = new SharedModel.BoatInRace("test", vel2, Color.ALICEBLUE, "tt", 2); // Boat boat2 = new Boat("test", vel2, Color.ALICEBLUE, "tt", 2);
// SharedModel.BoatInRace boat3 = new SharedModel.BoatInRace("test", vel3, Color.ALICEBLUE, "tt", 3); // Boat boat3 = new Boat("test", vel3, Color.ALICEBLUE, "tt", 3);
// SharedModel.BoatInRace boat4 = new SharedModel.BoatInRace("test", vel4, Color.ALICEBLUE, "tt", 4); // Boat boat4 = new Boat("test", vel4, Color.ALICEBLUE, "tt", 4);
// ArrayList<SharedModel.BoatInRace> boats = new ArrayList<>(); // ArrayList<Boat> boats = new ArrayList<>();
// boats.add(boat1); // boats.add(boat1);
// boats.add(boat2); // boats.add(boat2);
// boats.add(boat3); // boats.add(boat3);
// boats.add(boat4); // boats.add(boat4);
// //
// ArrayList<SharedModel.Leg> legs = new ArrayList<>(); // ArrayList<Leg> legs = new ArrayList<>();
// legs.add(START_LEG); // legs.add(START_LEG);
// //
// //
@ -232,9 +190,9 @@
// } // }
// @Test // @Test
// public void doNotFinishCorrectly() { // public void doNotFinishCorrectly() {
// ArrayList<SharedModel.BoatInRace> boats = new ArrayList<>(); // ArrayList<Boat> boats = new ArrayList<>();
// //
// ArrayList<SharedModel.Leg> legs = new ArrayList<>(); // ArrayList<Leg> legs = new ArrayList<>();
// legs.add(START_LEG); // legs.add(START_LEG);
// //
// Race race = new Race(boats, legs, 1, mockOutput); // Race race = new Race(boats, legs, 1, mockOutput);
@ -245,7 +203,7 @@
// race.setDnfChance(0); // race.setDnfChance(0);
// assertTrue(!race.doNotFinish()); // assertTrue(!race.doNotFinish());
// } // }
//
//
//
//} }

@ -1,96 +0,0 @@
//package seng302.Model;/**
// * Created by Gondr on 26/03/2017.
// */
//
//import org.junit.Ignore;
//import org.junit.Test;
//import seng302.DataInput.RaceXMLReader;
//
//
//import java.util.List;
//
//import static org.junit.Assert.*;
//
//public class RaceXMLTest {
// RaceXMLReader raceXMLReader;
//
// @Test
// public void canFindFile() {
// try {
// RaceXMLReader raceXMLReader = new RaceXMLReader("raceXML/bermuda_AC35.xml", false);
// } catch (Exception e) {
// fail("Cannot find raceXML/bermuda_AC35.xml in the resources folder");
// }
// }
//
// @Ignore
// @Test
// public void canReadBoats() {
// try {
// RaceXMLReader raceXMLReader = new RaceXMLReader("raceXML/bermuda_AC35.xml", false);
// raceXMLReader.readBoats();
// List<Boat> boats = raceXMLReader.getBoats();
// assertTrue(boats.size() == 6);
// //test boat 1
// assertEquals(boats.get(0).getName(), "ORACLE TEAM USA");
// assertTrue(boats.get(0).getVelocity() == 20);
// //test boat 2
// assertEquals(boats.get(1).getName(), "Land Rover BAR");
// assertTrue(boats.get(1).getVelocity() == 30);
// assertEquals(boats.get(1).getCountry(), "GBR");
// //test boat 3
// assertEquals(boats.get(2).getName(), "SoftBank Team Japan");
// assertTrue(boats.get(2).getVelocity() == 25);
// assertEquals(boats.get(2).getCountry(), "JPN");
// //test boat 4
// assertEquals(boats.get(3).getName(), "Groupama Team France");
// assertTrue(boats.get(3).getVelocity() == 20);
// assertEquals(boats.get(3).getCountry(), "FRA");
// //test boat 5
// assertEquals(boats.get(4).getName(), "Artemis Racing");
// assertTrue(boats.get(4).getVelocity() == 29);
// assertEquals(boats.get(4).getCountry(), "SWE");
// //test boat 6
// assertEquals(boats.get(5).getName(), "Emirates Team New Zealand");
// assertTrue(boats.get(5).getVelocity() == 62);
// assertEquals(boats.get(5).getCountry(), "NZL");
// } catch (Exception e) {
// fail("Boat Unreadable");
// }
// }
//
// @Test
// public void canReadLegs() {
// try {
// RaceXMLReader raceXMLReader = new RaceXMLReader("raceXML/bermuda_AC35.xml", false);
// raceXMLReader.readLegs();
// assertTrue(raceXMLReader.getLegs().size() == 5);
// } catch (Exception e) {
// fail("Legs Unreadable");
// }
// }
//
// @Test
// public void canReadCourse() {
// try {
// RaceXMLReader raceXMLReader = new RaceXMLReader("raceXML/bermuda_AC35.xml", false);
// raceXMLReader.readCourse();
// assertTrue(raceXMLReader.getMapTopLeft() != null);
// assertTrue(raceXMLReader.getMapBottomRight() != null);
// assertTrue(raceXMLReader.getFinishPt1() != null);
// assertTrue(raceXMLReader.getFinishPt2() != null);
// assertTrue(raceXMLReader.getStartPt1() != null);
// assertTrue(raceXMLReader.getStartPt2() != null);
// assertTrue(raceXMLReader.getLeewardPt1() != null);
// assertTrue(raceXMLReader.getLeewardPt2() != null);
// assertTrue(raceXMLReader.getWindwardPt1() != null);
// assertTrue(raceXMLReader.getWindwardPt2() != null);
// assertTrue(raceXMLReader.getMark() != null);
// assertTrue(raceXMLReader.getBoundary().size() == 11);
// } catch (Exception e) {
// e.printStackTrace();
// fail("Course Unreadable");
// }
// }
//
//}

@ -0,0 +1,55 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<BoatConfig>
<Boats>
<!--Mark Boats-->
<Boat Type="Mark" BoatName="PRO" SourceID="101" >
<GPSposition X= "-64.854304" Y="32.296577" Z="0"/>
</Boat>
<Boat Type="Mark" BoatName="PIN" SourceID="102" >
<GPSposition X= "-64.855242" Y="32.293771" Z="0"/>
</Boat>
<Boat Type="Mark" BoatName="Marker1" SourceID="103" >
<GPSposition X= "-64.843983" Y="32.293039" Z="0"/>
</Boat>
<Boat Type="Mark" BoatName="WGL" SourceID="104" >
<GPSposition X= "-64.850045" Y="32.28468" Z="0"/>
</Boat>
<Boat Type="Mark" BoatName="WGR" SourceID="105" >
<GPSposition X= "-64.847591" Y="32.280164" Z="0"/>
</Boat>
<Boat Type="Mark" BoatName="LGL" SourceID="106" >
<GPSposition X= "-64.835249" Y="32.309693" Z="0"/>
</Boat>
<Boat Type="Mark" BoatName="LGR" SourceID="107" >
<GPSposition X= "-64.831785" Y="32.308046" Z="0"/>
</Boat>
<Boat Type="Mark" BoatName="FL" SourceID="108" >
<GPSposition X= "-64.839291" Y="32.317379" Z="0"/>
</Boat>
<Boat Type="Mark" BoatName="FR" SourceID="109" >
<GPSposition X= "-64.83626" Y="32.317257" Z="0"/>
</Boat>
<!--Participants-->
<Boat BoatName="Team ORACLE USA" HullNum="RG01" ShapeID="0" ShortName="USA" SourceID="121" StoweName="USA" Type="Yacht">
<GPSposition X="-64.854304" Y="32.296577" Z="0"/>
</Boat>
<Boat BoatName="Land Rover BAR" HullNum="RG01" ShapeID="0" ShortName="GBR" SourceID="122" StoweName="GBR" Type="Yacht">
<GPSposition X="-64.854304" Y="32.296577" Z="0"/>
</Boat>
<Boat BoatName="SoftBank Team Japan" HullNum="RG01" ShapeID="0" ShortName="JPN" SourceID="123" StoweName="JPN" Type="Yacht">
<GPSposition X="-64.854304" Y="32.296577" Z="0"/>
</Boat>
<Boat BoatName="Groupama Team France" HullNum="RG01" ShapeID="0" ShortName="FRA" SourceID="124" StoweName="FRA" Type="Yacht">
<GPSposition X="-64.854304" Y="32.296577" Z="0"/>
</Boat>
<Boat BoatName="Artemis Racing" HullNum="RG01" ShapeID="0" ShortName="SWE" SourceID="125" StoweName="SWE" Type="Yacht">
<GPSposition X="-64.854304" Y="32.296577" Z="0"/>
</Boat>
<Boat BoatName="Emirates Team New Zealand" HullNum="RG01" ShapeID="0" ShortName="NZL" SourceID="126" StoweName="NZL" Type="Yacht">
<GPSposition X="-64.854304" Y="32.296577" Z="0"/>
</Boat>
</Boats>
</BoatConfig>

@ -1,251 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<BoatConfig>
<Modified>2012-05-17T07:49:40+0200</Modified>
<Version>12</Version>
<Settings>
<RaceBoatType Type="AC45"/>
<BoatDimension BoatLength="14.019" HullLength="13.449"/>
<ZoneSize MarkZoneSize="40.347" CourseZoneSize="40.347"/>
<ZoneLimits Limit1="200" Limit2="100" Limit3="40.347" Limit4="0" Limit5="-100"/>
</Settings>
<BoatShapes>
<BoatShape ShapeID="0">
<Vertices>
<Vtx Seq="1" Y="0" X="-2.659"/>
<Vtx Seq="2" Y="18.359" X="-2.659"/>
<Vtx Seq="3" Y="18.359" X="2.659"/>
<Vtx Seq="4" Y="0" X="2.659"/>
</Vertices>
</BoatShape>
<BoatShape ShapeID="1">
<Vertices>
<Vtx Seq="1" Y="0" X="-1.278"/>
<Vtx Seq="2" Y="8.876" X="-1.278"/>
<Vtx Seq="3" Y="8.876" X="1.278"/>
<Vtx Seq="4" Y="0" X="1.278"/>
</Vertices>
</BoatShape>
<BoatShape ShapeID="2">
<Vertices>
<Vtx Seq="1" Y="0" X="-1.1"/>
<Vtx Seq="2" Y="8.3" X="-1.1"/>
<Vtx Seq="3" Y="8.3" X="1.1"/>
<Vtx Seq="4" Y="0" X="1.1"/>
</Vertices>
</BoatShape>
<BoatShape ShapeID="3">
<Vertices>
<Vtx Seq="1" Y="0" X="-0.75"/>
<Vtx Seq="2" Y="3" X="-0.75"/>
<Vtx Seq="3" Y="3" X="0.75"/>
<Vtx Seq="4" Y="0" X="0.75"/>
</Vertices>
</BoatShape>
<BoatShape ShapeID="4">
<Vertices>
<Vtx Seq="1" Y="0" X="-3.46"/>
<Vtx Seq="2" Y="13.449" X="-3.46"/>
<Vtx Seq="3" Y="14.019" X="0"/>
<Vtx Seq="4" Y="13.449" X="3.46"/>
<Vtx Seq="5" Y="0" X="3.46"/>
</Vertices>
<Catamaran>
<Vtx Seq="1" Y="1.769" X="-2.752"/>
<Vtx Seq="2" Y="0" X="-2.813"/>
<Vtx Seq="3" Y="0" X="-3.34"/>
<Vtx Seq="4" Y="5.351" X="-3.46"/>
<Vtx Seq="5" Y="10.544" X="-3.387"/>
<Vtx Seq="6" Y="13.449" X="-3.075"/>
<Vtx Seq="7" Y="10.851" X="-2.793"/>
<Vtx Seq="8" Y="6.669" X="-2.699"/>
<Vtx Seq="9" Y="6.669" X="2.699"/>
<Vtx Seq="10" Y="10.851" X="2.793"/>
<Vtx Seq="11" Y="13.449" X="3.075"/>
<Vtx Seq="12" Y="10.544" X="3.387"/>
<Vtx Seq="13" Y="5.351" X="3.46"/>
<Vtx Seq="14" Y="0" X="3.34"/>
<Vtx Seq="15" Y="0" X="2.813"/>
<Vtx Seq="16" Y="1.769" X="2.752"/>
</Catamaran>
<Bowsprit>
<Vtx Seq="1" Y="6.669" X="-0.2"/>
<Vtx Seq="2" Y="11.377" X="-0.2"/>
<Vtx Seq="3" Y="14.019" X="0"/>
<Vtx Seq="4" Y="11.377" X="0.2"/>
<Vtx Seq="5" Y="6.669" X="0.2"/>
</Bowsprit>
<Trampoline>
<Vtx Seq="1" Y="2" X="-2.699"/>
<Vtx Seq="2" Y="6.438" X="-2.699"/>
<Vtx Seq="3" Y="6.438" X="2.699"/>
<Vtx Seq="4" Y="2" X="2.699"/>
</Trampoline>
</BoatShape>
<BoatShape ShapeID="5"/>
</BoatShapes>
<Boats>
<Boat Type="RC" SourceID="121" ShapeID="0" HullNum="RG01" StoweName="PRO" ShortName="PRO"
BoatName="Regardless">
<GPSposition Z="6.840" Y="7.800" X="0.000"/>
<FlagPosition Z="0.000" Y="7.800" X="0.000"/>
</Boat>
<Boat Type="Mark" SourceID="122" ShapeID="1" HullNum="LC05" StoweName="CON" ShortName="Constellation"
BoatName="Constellation">
<GPSposition Z="5.334" Y="3.804" X="0.000"/>
<FlagPosition Z="0.000" Y="3.426" X="0.000"/>
</Boat>
<Boat Type="Mark" SourceID="123" ShapeID="1" HullNum="LC04" StoweName="MIS" ShortName="Mischief"
BoatName="Mischief">
<GPSposition Z="5.334" Y="3.804" X="0.000"/>
<FlagPosition Z="0.000" Y="3.426" X="0.000"/>
</Boat>
<Boat Type="Mark" SourceID="124" ShapeID="1" HullNum="LC03" ShortName="Atalanta" BoatName="Atalanta">
<GPSposition Z="5.334" Y="3.804" X="0.000"/>
<FlagPosition Z="0.000" Y="3.426" X="0.000"/>
</Boat>
<Boat SourceID="125" ShapeID="1" StoweName="VOL" HullNum="LC01" ShortName="Volunteer"
BoatName="Volunteer">
<GPSposition Z="5.334" Y="3.804" X="0.000"/>
<FlagPosition Z="0.000" Y="3.426" X="0.000"/>
</Boat>
<Boat Type="Mark" SourceID="126" ShapeID="1" HullNum="LC13" StoweName="MS2" ShortName="Defender"
BoatName="Defender">
<GPSposition Z="5.334" Y="3.804" X="0.000"/>
<FlagPosition Z="0.000" Y="3.426" X="0.000"/>
</Boat>
<Boat Type="Mark" SourceID="128" ShapeID="1" HullNum="LC01" ShortName="Shamrock" BoatName="Shamrock">
<GPSposition Z="5.334" Y="3.804" X="0.000"/>
<FlagPosition Z="0.000" Y="3.426" X="0.000"/>
</Boat>
<Boat Type="Yacht" SourceID="101" ShapeID="4" HullNum="AC4501" StoweName="KOR" ShortName="TEAM KOREA"
BoatName="TEAM KOREA" Country="KOR">
<GPSposition Z="1.738" Y="0.625" X="0.001"/>
<MastTop Z="21.496" Y="4.233" X="0.000"/>
</Boat>
</Boats>
</BoatConfig>

@ -0,0 +1,57 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<Race>
<RaceID>5326</RaceID>
<RaceType>FLEET</RaceType>
<CreationTimeDate>2017-04-19T15:30:00+1200</CreationTimeDate>
<RaceStartTime Postpone="false" Time="2017-04-19T15:33:00+1200"/>
<Participants>
<Yacht SourceID="121"/>
<Yacht SourceID="122"/>
<Yacht SourceID="123"/>
<Yacht SourceID="124"/>
<Yacht SourceID="125"/>
<Yacht SourceID="126"/>
</Participants>
<CompoundMarkSequence>
<Corner CompoundMarkID="1" SeqID="1"/>
<Corner CompoundMarkID="2" SeqID="2"/>
<Corner CompoundMarkID="4" SeqID="3"/>
<Corner CompoundMarkID="3" SeqID="4"/>
<Corner CompoundMarkID="4" SeqID="5"/>
<Corner CompoundMarkID="5" SeqID="6"/>
</CompoundMarkSequence>
<Course>
<CompoundMark CompoundMarkID="1" Name="Start Line">
<Mark SeqId="1" Name="PRO" TargetLat="32.296577" TargetLng="-64.854304" SourceID="101"/>
<Mark SeqId="2" Name="PIN" TargetLat="32.293771" TargetLng="-64.855242" SourceID="102"/>
</CompoundMark>
<CompoundMark CompoundMarkID="2" Name="Marker 1">
<Mark Name="Marker1" TargetLat="32.293039" TargetLng="-64.843983" SourceID="103"/>
</CompoundMark>
<CompoundMark CompoundMarkID="3" Name="Windward Gate">
<Mark Name="WGL" SeqId="1" TargetLat="32.28468" TargetLng="-64.850045" SourceID="104"/>
<Mark Name="WGR" SeqId="2" TargetLat="32.280164" TargetLng="-64.847591" SourceID="105"/>
</CompoundMark>
<CompoundMark CompoundMarkID="4" Name="Leeward Gate">
<Mark Name="LGL" SeqId="1" TargetLat="32.309693" TargetLng="-64.835249" SourceID="106"/>
<Mark Name="LGR" SeqId="2" TargetLat="32.308046" TargetLng="-64.831785" SourceID="107"/>
</CompoundMark>
<CompoundMark CompoundMarkID="5" Name="Finish Line">
<Mark Name="FL" SeqId="1" TargetLat="32.317379" TargetLng="-64.839291" SourceID="108"/>
<Mark Name="FR" SeqId="2" TargetLat="32.317257" TargetLng="-64.83626" SourceID="109"/>
</CompoundMark>
</Course>
<CourseLimit>
<Limit Lat="32.313922" Lon="-64.837168" SeqID="1"/>
<Limit Lat="32.317379" Lon="-64.839291" SeqID="2"/>
<Limit Lat="32.317911" Lon="-64.836996" SeqID="3"/>
<Limit Lat="32.317257" Lon="-64.83626" SeqID="4"/>
<Limit Lat="32.304273" Lon="-64.822834" SeqID="5"/>
<Limit Lat="32.279097" Lon="-64.841545" SeqID="6"/>
<Limit Lat="32.279604" Lon="-64.849871" SeqID="7"/>
<Limit Lat="32.289545" Lon="-64.854162" SeqID="8"/>
<Limit Lat="32.290198" Lon="-64.858711" SeqID="9"/>
<Limit Lat="32.297164" Lon="-64.856394" SeqID="10"/>
<Limit Lat="32.296148" Lon="-64.849184" SeqID="11"/>
</CourseLimit>
</Race>

@ -1,20 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<RegattaConfig> <RegattaConfig>
<RegattaID>3</RegattaID> <RegattaID>3</RegattaID>
<RegattaName>New Zealand Test</RegattaName> <RegattaName>New Zealand Test</RegattaName>
<CourseName>North Head</CourseName> <CourseName>North Head</CourseName>
<CentralLatitude>-36.82791529</CentralLatitude> <CentralLatitude>-36.82791529</CentralLatitude>
<CentralLongitude>174.81218919</CentralLongitude> <CentralLongitude>174.81218919</CentralLongitude>
<CentralAltitude>0.00</CentralAltitude> <CentralAltitude>0.00</CentralAltitude>
<UtcOffset>12</UtcOffset> <UtcOffset>12</UtcOffset>
<MagneticVariation>14.1</MagneticVariation> <MagneticVariation>14.1</MagneticVariation>
</RegattaConfig> </RegattaConfig>
Loading…
Cancel
Save