diff --git a/racevisionGame/src/main/java/mock/app/Event.java b/racevisionGame/src/main/java/mock/app/Event.java index 6b3a0641..93f33ab5 100644 --- a/racevisionGame/src/main/java/mock/app/Event.java +++ b/racevisionGame/src/main/java/mock/app/Event.java @@ -71,6 +71,8 @@ public class Event { private Thread connectionThread; + private int mapIndex; + @@ -84,8 +86,10 @@ public class Event { // System.out.println(XMLUtilities.validateXML(this.getClass().getClassLoader().getResource("mock/mockXML/iMapLayout.xml").toString() // , this.getClass().getClassLoader().getResource("mock/mockXML/schema/raceSchema.xsd"))); - + this.mapIndex = mapIndex; String raceXMLFile; + String boatsXMLFile = "mock/mockXML/boatTest.xml"; + String regattaXMLFile = "mock/mockXML/regattaTest.xml"; switch (mapIndex){ case 0:raceXMLFile = "mock/mockXML/raceSixPlayers.xml"; break; @@ -95,11 +99,15 @@ public class Event { break; case 3: raceXMLFile = "mock/mockXML/mMapLayout.xml"; break; + case 4: + raceXMLFile = "mock/mockXML/raceTutorial.xml"; + boatsXMLFile = "mock/mockXML/boatTutorial.xml"; + regattaXMLFile = "mock/mockXML/regattaTutorial.xml"; + break; default: raceXMLFile = "mock/mockXML/raceSixPlayers.xml"; } - String boatsXMLFile = "mock/mockXML/boatTest.xml"; - String regattaXMLFile = "mock/mockXML/regattaTest.xml"; + if (singlePlayer) { raceXMLFile = "mock/mockXML/raceSinglePlayer.xml"; @@ -111,7 +119,9 @@ public class Event { //this.raceXML = RaceXMLCreator.alterRaceToWind(raceXMLFile, 90); this.raceXML = XMLReader.readXMLFileToString(raceXMLFile, StandardCharsets.UTF_8); this.raceXML = Event.setRaceXMLAtCurrentTimeToNow(XMLReader.readXMLFileToString(raceXMLFile, StandardCharsets.UTF_8)); - + if(mapIndex==4){ + this.raceXML = Event.setRaceXMLAtCurrentTimeToNow(XMLReader.readXMLFileToString(raceXMLFile, StandardCharsets.UTF_8), 1000, 5000); + } this.boatXML = XMLReader.readXMLFileToString(boatsXMLFile, StandardCharsets.UTF_8); this.regattaXML = XMLReader.readXMLFileToString(regattaXMLFile, StandardCharsets.UTF_8); @@ -194,9 +204,15 @@ public class Event { * @return String containing edited xml */ public static String setRaceXMLAtCurrentTimeToNow(String raceXML) { + return setRaceXMLAtCurrentTimeToNow(raceXML, Constants.RacePreStartTime, Constants.RacePreparatoryTime); + } + public static String setRaceXMLAtCurrentTimeToNow(String raceXML, long racePreStartTime, long racePreparatoryTime){ //The start time is current time + 4 minutes. prestart is 3 minutes, and we add another minute. - long millisecondsToAdd = Constants.RacePreStartTime + Constants.RacePreparatoryTime; + + long millisecondsToAdd = racePreStartTime + racePreparatoryTime; + + long secondsToAdd = millisecondsToAdd / 1000; //Scale the time using our time scalar. secondsToAdd = secondsToAdd / Constants.RaceTimeScale; diff --git a/racevisionGame/src/main/java/mock/xml/RaceXMLCreator.java b/racevisionGame/src/main/java/mock/xml/RaceXMLCreator.java index b168862f..0e538925 100644 --- a/racevisionGame/src/main/java/mock/xml/RaceXMLCreator.java +++ b/racevisionGame/src/main/java/mock/xml/RaceXMLCreator.java @@ -74,7 +74,7 @@ public class RaceXMLCreator { * @throws SAXException error in schema file * @throws ParserConfigurationException error in parsing the schema file */ - public static String alterRaceToWind(String s, double degrees) throws XMLReaderException, InvalidRaceDataException, JAXBException, IOException, SAXException, ParserConfigurationException { + public static String alterRaceToWind(String s, double degrees, boolean tutorial) throws XMLReaderException, InvalidRaceDataException, JAXBException, IOException, SAXException, ParserConfigurationException { RaceXMLReader reader = new RaceXMLReader(s, XMLFileType.ResourcePath); XMLRace race = XMLUtilities.xmlToClass( @@ -82,7 +82,11 @@ public class RaceXMLCreator { RaceXMLCreator.class.getClassLoader().getResource("mock/mockXML/schema/raceSchema.xsd"), XMLRace.class); - setRaceXMLAtCurrentTimeToNow(race); + if(tutorial){ + setRaceXMLAtCurrentTimeToNow(race, 1000l, 5000l); + } else { + setRaceXMLAtCurrentTimeToNow(race); + } double raceOriginalBearing = getLineAngle(getLeewardGate(reader).getMark1Position(), getWindwardGate(reader).getMark1Position()); @@ -93,6 +97,7 @@ public class RaceXMLCreator { return XMLUtilities.classToXML(race); } + /** * Rotate the features in a race such as the boundary, and the marks. * @param race the race to alter @@ -180,14 +185,11 @@ public class RaceXMLCreator { } - /** - * Sets the xml description of the race to show the race was created now, and starts in 4 minutes - * @param raceXML The race.xml contents. - */ - public static void setRaceXMLAtCurrentTimeToNow(XMLRace raceXML) { + + public static void setRaceXMLAtCurrentTimeToNow(XMLRace raceXML, long racePrestartTime, long racePreparatoryTime){ //The start time is current time + 4 minutes. prestart is 3 minutes, and we add another minute. - long millisecondsToAdd = Constants.RacePreStartTime + Constants.RacePreparatoryTime; + long millisecondsToAdd = racePrestartTime + racePreparatoryTime; long secondsToAdd = millisecondsToAdd / 1000; //Scale the time using our time scalar. secondsToAdd = secondsToAdd / Constants.RaceTimeScale; @@ -198,4 +200,13 @@ public class RaceXMLCreator { raceXML.getRaceStartTime().setTime(dateFormat.format(creationTime.plusSeconds(secondsToAdd))); } + /** + * Sets the xml description of the race to show the race was created now, and starts in 4 minutes + * @param raceXML The race.xml contents. + */ + public static void setRaceXMLAtCurrentTimeToNow(XMLRace raceXML) { + setRaceXMLAtCurrentTimeToNow(raceXML, Constants.RacePreStartTime, Constants.RacePreparatoryTime); + + } + } diff --git a/racevisionGame/src/main/java/visualiser/Controllers/HostController.java b/racevisionGame/src/main/java/visualiser/Controllers/HostController.java index 9da04634..cc850fad 100644 --- a/racevisionGame/src/main/java/visualiser/Controllers/HostController.java +++ b/racevisionGame/src/main/java/visualiser/Controllers/HostController.java @@ -137,9 +137,9 @@ public class HostController extends Controller { } public void setGameType(int gameType){ - this.gameType = gameType; + this.currentMapIndex = gameType; } - public int getGameType(){ return this.gameType; } + public int getGameType(){ return this.currentMapIndex; } } diff --git a/racevisionGame/src/main/java/visualiser/Controllers/RaceController.java b/racevisionGame/src/main/java/visualiser/Controllers/RaceController.java index fe519224..35f8fa76 100644 --- a/racevisionGame/src/main/java/visualiser/Controllers/RaceController.java +++ b/racevisionGame/src/main/java/visualiser/Controllers/RaceController.java @@ -468,7 +468,7 @@ public class RaceController extends Controller { //Check if the game is a tutorial - if (parent.getGameType()==2){ + if (parent.getGameType()==4){ isTutorial = true; tutorialText.setVisible(true); tutorialStates = new ArrayList<>(Arrays.asList(TutorialState.values())); diff --git a/racevisionGame/src/main/java/visualiser/Controllers/StartController.java b/racevisionGame/src/main/java/visualiser/Controllers/StartController.java index 6d073ed8..a616ea68 100644 --- a/racevisionGame/src/main/java/visualiser/Controllers/StartController.java +++ b/racevisionGame/src/main/java/visualiser/Controllers/StartController.java @@ -215,29 +215,32 @@ public class StartController extends Controller { * Countdown timer until race starts. */ private void countdownTimer() { - new AnimationTimer() { - @Override - public void handle(long arg0) { + System.out.println(parent.getGameType()); - //Get the current race status. - RaceStatusEnum raceStatus = visualiserRaceEvent.getVisualiserRaceState().getRaceStatusEnum(); + new AnimationTimer() { + @Override + public void handle(long arg0) { - //If the race has reached the preparatory phase, or has started... - if (raceStatus == RaceStatusEnum.WARNING - || raceStatus == RaceStatusEnum.PREPARATORY - || raceStatus == RaceStatusEnum.STARTED) { - //Stop this timer. - stop(); + //Get the current race status. + RaceStatusEnum raceStatus = visualiserRaceEvent.getVisualiserRaceState().getRaceStatusEnum(); - //Hide this, and display the race controller. - startWrapper.setVisible(false); - //start.setVisible(false);//TODO is this needed? + //If the race has reached the preparatory phase, or has started... + if (raceStatus == RaceStatusEnum.WARNING + || raceStatus == RaceStatusEnum.PREPARATORY + || raceStatus == RaceStatusEnum.STARTED) { + //Stop this timer. + stop(); - parent.beginRace(visualiserRaceEvent, controllerClient, isHost); + //Hide this, and display the race controller. + startWrapper.setVisible(false); + //start.setVisible(false);//TODO is this needed? + parent.beginRace(visualiserRaceEvent, controllerClient, isHost); + + } } - } - }.start(); + }.start(); + } diff --git a/racevisionGame/src/main/java/visualiser/Controllers/TitleController.java b/racevisionGame/src/main/java/visualiser/Controllers/TitleController.java index 99a7d890..6b172974 100644 --- a/racevisionGame/src/main/java/visualiser/Controllers/TitleController.java +++ b/racevisionGame/src/main/java/visualiser/Controllers/TitleController.java @@ -141,7 +141,7 @@ public class TitleController extends Controller { public void tutorialStartPressed() throws IOException { titleWrapper.setVisible(false); System.out.println("Start the tutorial!"); - parent.setGameType(2); + parent.setGameType(4); parent.beginGame(); }