New server creation view created. Added templates for custom races. Updated xml generator to remove all hard coded values. Updated XMLParser to parse custom race files. No unit tests exists currently.
#implement #story[1275]
@@ -97,7 +97,7 @@ public class MainServerThread implements Runnable, ClientConnectionDelegate {
|
|||||||
|
|
||||||
startAdvertisingServer();
|
startAdvertisingServer();
|
||||||
|
|
||||||
PolarTable.parsePolarFile(getClass().getResourceAsStream("/config/acc_polars.csv"));
|
PolarTable.parsePolarFile(getClass().getResourceAsStream("/server_config/acc_polars.csv"));
|
||||||
GameState.addMessageEventListener(this::broadcastMessage);
|
GameState.addMessageEventListener(this::broadcastMessage);
|
||||||
terminated = false;
|
terminated = false;
|
||||||
thread = new Thread(this, "MainServer");
|
thread = new Thread(this, "MainServer");
|
||||||
|
|||||||
@@ -13,8 +13,6 @@ import seng302.gameServer.messages.XMLMessage;
|
|||||||
import seng302.gameServer.messages.XMLMessageSubType;
|
import seng302.gameServer.messages.XMLMessageSubType;
|
||||||
import seng302.model.Player;
|
import seng302.model.Player;
|
||||||
import seng302.model.ServerYacht;
|
import seng302.model.ServerYacht;
|
||||||
import seng302.model.stream.xml.generator.RaceXMLTemplate;
|
|
||||||
import seng302.model.stream.xml.generator.RegattaXMLTemplate;
|
|
||||||
import seng302.model.token.Token;
|
import seng302.model.token.Token;
|
||||||
import seng302.utilities.XMLGenerator;
|
import seng302.utilities.XMLGenerator;
|
||||||
|
|
||||||
@@ -97,8 +95,8 @@ public class MessageFactory {
|
|||||||
public static XMLMessage getRaceXML() {
|
public static XMLMessage getRaceXML() {
|
||||||
List<ServerYacht> yachts = new ArrayList<>(GameState.getYachts().values());
|
List<ServerYacht> yachts = new ArrayList<>(GameState.getYachts().values());
|
||||||
List<Token> tokens = GameState.getTokensInPlay();
|
List<Token> tokens = GameState.getTokensInPlay();
|
||||||
RaceXMLTemplate raceXMLTemplate = new RaceXMLTemplate(yachts, tokens);
|
// RaceXMLTemplate raceXMLTemplate = new RaceXMLTemplate(yachts, tokens);
|
||||||
xmlGenerator.setRaceTemplate(raceXMLTemplate);
|
// xmlGenerator.setRaceTemplate(raceXMLTemplate);
|
||||||
|
|
||||||
XMLMessage raceXMLMessage = new XMLMessage(
|
XMLMessage raceXMLMessage = new XMLMessage(
|
||||||
xmlGenerator.getRaceAsXml(),
|
xmlGenerator.getRaceAsXml(),
|
||||||
@@ -120,8 +118,8 @@ public class MessageFactory {
|
|||||||
public static XMLMessage getBoatXML() {
|
public static XMLMessage getBoatXML() {
|
||||||
List<ServerYacht> yachts = new ArrayList<>(GameState.getYachts().values());
|
List<ServerYacht> yachts = new ArrayList<>(GameState.getYachts().values());
|
||||||
List<Token> tokens = GameState.getTokensInPlay();
|
List<Token> tokens = GameState.getTokensInPlay();
|
||||||
RaceXMLTemplate raceXMLTemplate = new RaceXMLTemplate(yachts, tokens);
|
// RaceXMLTemplate raceXMLTemplate = new RaceXMLTemplate(yachts, tokens);
|
||||||
xmlGenerator.setRaceTemplate(raceXMLTemplate);
|
// xmlGenerator.setRaceTemplate(raceXMLTemplate);
|
||||||
|
|
||||||
return new XMLMessage(
|
return new XMLMessage(
|
||||||
xmlGenerator.getBoatsAsXml(),
|
xmlGenerator.getBoatsAsXml(),
|
||||||
|
|||||||
@@ -1,19 +1,15 @@
|
|||||||
package seng302.gameServer;
|
package seng302.gameServer;
|
||||||
|
|
||||||
|
|
||||||
import java.io.BufferedReader;
|
|
||||||
import java.io.ByteArrayOutputStream;
|
import java.io.ByteArrayOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.io.InputStreamReader;
|
|
||||||
import java.io.OutputStream;
|
import java.io.OutputStream;
|
||||||
import java.net.Socket;
|
import java.net.Socket;
|
||||||
import java.net.SocketException;
|
import java.net.SocketException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.concurrent.ThreadLocalRandom;
|
|
||||||
import java.util.stream.Collectors;
|
|
||||||
import java.util.zip.CRC32;
|
import java.util.zip.CRC32;
|
||||||
import java.util.zip.Checksum;
|
import java.util.zip.Checksum;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
@@ -31,7 +27,6 @@ import seng302.model.Player;
|
|||||||
import seng302.model.ServerYacht;
|
import seng302.model.ServerYacht;
|
||||||
import seng302.model.stream.packets.PacketType;
|
import seng302.model.stream.packets.PacketType;
|
||||||
import seng302.model.stream.packets.StreamPacket;
|
import seng302.model.stream.packets.StreamPacket;
|
||||||
import seng302.model.stream.xml.generator.RaceXMLTemplate;
|
|
||||||
import seng302.utilities.XMLGenerator;
|
import seng302.utilities.XMLGenerator;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -100,30 +95,8 @@ public class ServerToClientThread implements Runnable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void setUpPlayer(){
|
private void setUpPlayer(){
|
||||||
BufferedReader fn;
|
String fName = "Player " + GameState.getNumberOfPlayers().toString();
|
||||||
String fName = "";
|
|
||||||
BufferedReader ln;
|
|
||||||
String lName = "";
|
String lName = "";
|
||||||
|
|
||||||
fn = new BufferedReader(
|
|
||||||
new InputStreamReader(
|
|
||||||
ServerToClientThread.class.getResourceAsStream(
|
|
||||||
"/server_config/CSV_Database_of_First_Names.csv"
|
|
||||||
)
|
|
||||||
)
|
|
||||||
);
|
|
||||||
List<String> all = fn.lines().collect(Collectors.toList());
|
|
||||||
fName = all.get(ThreadLocalRandom.current().nextInt(0, all.size()));
|
|
||||||
ln = new BufferedReader(
|
|
||||||
new InputStreamReader(
|
|
||||||
ServerToClientThread.class.getResourceAsStream(
|
|
||||||
"/server_config/CSV_Database_of_Last_Names.csv"
|
|
||||||
)
|
|
||||||
)
|
|
||||||
);
|
|
||||||
all = ln.lines().collect(Collectors.toList());
|
|
||||||
lName = all.get(ThreadLocalRandom.current().nextInt(0, all.size()));
|
|
||||||
|
|
||||||
ServerYacht yacht = new ServerYacht(
|
ServerYacht yacht = new ServerYacht(
|
||||||
"Yacht", sourceId, sourceId.toString(), fName, fName + " " + lName, "NZ"
|
"Yacht", sourceId, sourceId.toString(), fName, fName + " " + lName, "NZ"
|
||||||
);
|
);
|
||||||
@@ -233,9 +206,9 @@ public class ServerToClientThread implements Runnable {
|
|||||||
|
|
||||||
public void sendSetupMessages() {
|
public void sendSetupMessages() {
|
||||||
xmlGenerator = new XMLGenerator();
|
xmlGenerator = new XMLGenerator();
|
||||||
RaceXMLTemplate race = new RaceXMLTemplate(new ArrayList<>(GameState.getYachts().values()), new ArrayList<>());
|
// RaceXMLTemplate race = new RaceXMLTemplate(new ArrayList<>(GameState.getYachts().values()), new ArrayList<>());
|
||||||
|
|
||||||
xmlGenerator.setRaceTemplate(race);
|
// xmlGenerator.setRaceTemplate(race);
|
||||||
|
|
||||||
XMLMessage xmlMessage;
|
XMLMessage xmlMessage;
|
||||||
xmlMessage = new XMLMessage(xmlGenerator.getRegattaAsXml(), XMLMessageSubType.REGATTA,
|
xmlMessage = new XMLMessage(xmlGenerator.getRegattaAsXml(), XMLMessageSubType.REGATTA,
|
||||||
|
|||||||
@@ -15,4 +15,9 @@ public class Limit extends GeoPoint {
|
|||||||
public Integer getSeqID() {
|
public Integer getSeqID() {
|
||||||
return seqID;
|
return seqID;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString(){
|
||||||
|
return "Limit = {seqID=" + seqID + ", lat=" + getLat() + ", lng=" + getLng() + "}";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
package seng302.model.mark;
|
package seng302.model.mark;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import seng302.gameServer.messages.RoundingSide;
|
import seng302.gameServer.messages.RoundingSide;
|
||||||
import seng302.model.GeoPoint;
|
import seng302.model.GeoPoint;
|
||||||
@@ -10,13 +10,13 @@ public class CompoundMark {
|
|||||||
|
|
||||||
private int compoundMarkId;
|
private int compoundMarkId;
|
||||||
private String name;
|
private String name;
|
||||||
private List<Mark> marks = new ArrayList<>();
|
private List<Mark> marks;
|
||||||
private GeoPoint midPoint;
|
private GeoPoint midPoint;
|
||||||
|
|
||||||
public CompoundMark(int markID, String name, List<Mark> marks) {
|
public CompoundMark(int markID, String name, List<Mark> marks) {
|
||||||
this.compoundMarkId = markID;
|
this.compoundMarkId = markID;
|
||||||
this.name = name;
|
this.name = name;
|
||||||
this.marks.addAll(marks);
|
this.marks = Collections.unmodifiableList(marks);
|
||||||
if (marks.size() > 1) {
|
if (marks.size() > 1) {
|
||||||
this.midPoint = GeoUtility.getDirtyMidPoint(marks.get(0), marks.get(1));
|
this.midPoint = GeoUtility.getDirtyMidPoint(marks.get(0), marks.get(1));
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -32,4 +32,10 @@ public class Corner {
|
|||||||
public Integer getZoneSize() {
|
public Integer getZoneSize() {
|
||||||
return zoneSize;
|
return zoneSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "Corner = {seqID=" + seqID + ", compoundMarkID=" + compoundMarkID + ", rounding="
|
||||||
|
+ rounding +", zoneSize=" + zoneSize + "}";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -2,6 +2,12 @@ package seng302.model.mark;
|
|||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.StringReader;
|
import java.io.StringReader;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
import javax.xml.parsers.DocumentBuilder;
|
import javax.xml.parsers.DocumentBuilder;
|
||||||
import javax.xml.parsers.DocumentBuilderFactory;
|
import javax.xml.parsers.DocumentBuilderFactory;
|
||||||
import javax.xml.parsers.ParserConfigurationException;
|
import javax.xml.parsers.ParserConfigurationException;
|
||||||
@@ -11,13 +17,9 @@ import org.w3c.dom.Document;
|
|||||||
import org.xml.sax.InputSource;
|
import org.xml.sax.InputSource;
|
||||||
import org.xml.sax.SAXException;
|
import org.xml.sax.SAXException;
|
||||||
import seng302.gameServer.messages.RoundingSide;
|
import seng302.gameServer.messages.RoundingSide;
|
||||||
import seng302.model.ServerYacht;
|
|
||||||
import seng302.model.stream.xml.generator.RaceXMLTemplate;
|
|
||||||
import seng302.model.stream.xml.parser.RaceXMLData;
|
import seng302.model.stream.xml.parser.RaceXMLData;
|
||||||
import seng302.model.token.Token;
|
|
||||||
import seng302.utilities.XMLGenerator;
|
import seng302.utilities.XMLGenerator;
|
||||||
import seng302.utilities.XMLParser;
|
import seng302.utilities.XMLParser;
|
||||||
import java.util.*;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class to hold the order of the marks in the race.
|
* Class to hold the order of the marks in the race.
|
||||||
@@ -127,10 +129,11 @@ public class MarkOrder {
|
|||||||
private void loadRaceProperties(){
|
private void loadRaceProperties(){
|
||||||
XMLGenerator generator = new XMLGenerator();
|
XMLGenerator generator = new XMLGenerator();
|
||||||
|
|
||||||
// TODO: 29/08/17 wmu16 - This is terrible, having to make a template just to receive constant data
|
// // TODO: 29/08/17 wmu16 - This is terrible, having to make a template just to receive constant data
|
||||||
generator.setRaceTemplate(new RaceXMLTemplate(
|
// generator.setRaceTemplate(new RaceXMLTemplate(
|
||||||
new ArrayList<>(),
|
// new ArrayList<>(),
|
||||||
new ArrayList<>()));
|
// new ArrayList<>())
|
||||||
|
// );
|
||||||
|
|
||||||
String raceXML = generator.getRaceAsXml();
|
String raceXML = generator.getRaceAsXml();
|
||||||
|
|
||||||
|
|||||||
@@ -1,10 +1,12 @@
|
|||||||
package seng302.model.stream.xml.generator;
|
package seng302.model.stream.xml.generator;
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import seng302.model.Limit;
|
||||||
import seng302.model.ServerYacht;
|
import seng302.model.ServerYacht;
|
||||||
|
import seng302.model.mark.CompoundMark;
|
||||||
|
import seng302.model.mark.Corner;
|
||||||
import seng302.model.token.Token;
|
import seng302.model.token.Token;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -15,10 +17,17 @@ public class RaceXMLTemplate {
|
|||||||
private List<ServerYacht> yachts;
|
private List<ServerYacht> yachts;
|
||||||
private LocalDateTime startTime;
|
private LocalDateTime startTime;
|
||||||
private List<Token> tokens;
|
private List<Token> tokens;
|
||||||
|
private List<Corner> roundings;
|
||||||
|
private List<Limit> courseLimit;
|
||||||
|
private List<CompoundMark> course;
|
||||||
|
|
||||||
public RaceXMLTemplate(List<ServerYacht> yachts, List<Token> tokens) {
|
public RaceXMLTemplate(List<ServerYacht> yachts, List<Token> tokens, List<Corner> roundings,
|
||||||
|
List<Limit> limit, List<CompoundMark> course) {
|
||||||
this.yachts = yachts;
|
this.yachts = yachts;
|
||||||
this.tokens = tokens;
|
this.tokens = tokens;
|
||||||
|
this.roundings = roundings;
|
||||||
|
this.courseLimit = limit;
|
||||||
|
this.course = course;
|
||||||
startTime = LocalDateTime.now();
|
startTime = LocalDateTime.now();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -39,6 +48,18 @@ public class RaceXMLTemplate {
|
|||||||
return Collections.unmodifiableList(tokens);
|
return Collections.unmodifiableList(tokens);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<CompoundMark> getCompoundMarks() {
|
||||||
|
return Collections.unmodifiableList(course);
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Limit> getCourseLimit() {
|
||||||
|
return Collections.unmodifiableList(courseLimit);
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Corner> getRoundings() {
|
||||||
|
return Collections.unmodifiableList(roundings);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the time until the race starts
|
* Set the time until the race starts
|
||||||
* @param seconds The time in seconds until the race starts
|
* @param seconds The time in seconds until the race starts
|
||||||
|
|||||||
@@ -1,19 +1,27 @@
|
|||||||
package seng302.utilities;
|
package seng302.utilities;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import javafx.scene.paint.Color;
|
import javafx.scene.paint.Color;
|
||||||
|
import javafx.util.Pair;
|
||||||
|
import javax.xml.parsers.DocumentBuilder;
|
||||||
|
import javax.xml.parsers.DocumentBuilderFactory;
|
||||||
|
import javax.xml.parsers.ParserConfigurationException;
|
||||||
import org.w3c.dom.Document;
|
import org.w3c.dom.Document;
|
||||||
import org.w3c.dom.Element;
|
import org.w3c.dom.Element;
|
||||||
import org.w3c.dom.Node;
|
import org.w3c.dom.Node;
|
||||||
import org.w3c.dom.NodeList;
|
import org.w3c.dom.NodeList;
|
||||||
|
import org.xml.sax.SAXException;
|
||||||
import seng302.model.ClientYacht;
|
import seng302.model.ClientYacht;
|
||||||
import seng302.model.Limit;
|
import seng302.model.Limit;
|
||||||
import seng302.model.mark.CompoundMark;
|
import seng302.model.mark.CompoundMark;
|
||||||
import seng302.model.mark.Corner;
|
import seng302.model.mark.Corner;
|
||||||
import seng302.model.mark.Mark;
|
import seng302.model.mark.Mark;
|
||||||
|
import seng302.model.stream.xml.generator.RaceXMLTemplate;
|
||||||
|
import seng302.model.stream.xml.generator.RegattaXMLTemplate;
|
||||||
import seng302.model.stream.xml.parser.RaceXMLData;
|
import seng302.model.stream.xml.parser.RaceXMLData;
|
||||||
import seng302.model.stream.xml.parser.RegattaXMLData;
|
import seng302.model.stream.xml.parser.RegattaXMLData;
|
||||||
import seng302.model.token.Token;
|
import seng302.model.token.Token;
|
||||||
@@ -219,13 +227,11 @@ public class XMLParser {
|
|||||||
for (int i = 0; i < limitList.getLength(); i++) {
|
for (int i = 0; i < limitList.getLength(); i++) {
|
||||||
Node limitNode = limitList.item(i);
|
Node limitNode = limitList.item(i);
|
||||||
if (limitNode.getNodeName().equals("Limit")) {
|
if (limitNode.getNodeName().equals("Limit")) {
|
||||||
courseLimit.add(
|
courseLimit.add(new Limit(
|
||||||
new Limit(
|
XMLParser.getNodeAttributeInt(limitNode, "SeqID"),
|
||||||
XMLParser.getNodeAttributeInt(limitNode, "SeqID"),
|
XMLParser.getNodeAttributeDouble(limitNode, "Lat"),
|
||||||
XMLParser.getNodeAttributeDouble(limitNode, "Lat"),
|
XMLParser.getNodeAttributeDouble(limitNode, "Lon")
|
||||||
XMLParser.getNodeAttributeDouble(limitNode, "Lon")
|
));
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return courseLimit;
|
return courseLimit;
|
||||||
@@ -279,10 +285,11 @@ public class XMLParser {
|
|||||||
for (int i = 0; i < cMarkList.getLength(); i++) {
|
for (int i = 0; i < cMarkList.getLength(); i++) {
|
||||||
Node cMarkNode = cMarkList.item(i);
|
Node cMarkNode = cMarkList.item(i);
|
||||||
if (cMarkNode.getNodeName().equals("CompoundMark")) {
|
if (cMarkNode.getNodeName().equals("CompoundMark")) {
|
||||||
|
String name = XMLParser.getNodeAttributeString(cMarkNode, "Name");
|
||||||
|
name = (name == null || name.equals("")) ? "Mark " + i+1: name;
|
||||||
cMark = new CompoundMark(
|
cMark = new CompoundMark(
|
||||||
XMLParser.getNodeAttributeInt(cMarkNode, "CompoundMarkID"),
|
XMLParser.getNodeAttributeInt(cMarkNode, "CompoundMarkID"),
|
||||||
XMLParser.getNodeAttributeString(cMarkNode, "Name"),
|
name, createMarks(cMarkNode)
|
||||||
createMarks(cMarkNode)
|
|
||||||
);
|
);
|
||||||
allMarks.add(cMark);
|
allMarks.add(cMark);
|
||||||
}
|
}
|
||||||
@@ -303,14 +310,157 @@ public class XMLParser {
|
|||||||
Node markNode = childMarks.item(i);
|
Node markNode = childMarks.item(i);
|
||||||
if (markNode.getNodeName().equals("Mark")) {
|
if (markNode.getNodeName().equals("Mark")) {
|
||||||
Integer seqID = XMLParser.getNodeAttributeInt(markNode, "SeqID");
|
Integer seqID = XMLParser.getNodeAttributeInt(markNode, "SeqID");
|
||||||
|
seqID = (seqID == null) ? i+1 : seqID;
|
||||||
|
|
||||||
Integer sourceID = XMLParser.getNodeAttributeInt(markNode, "SourceID");
|
Integer sourceID = XMLParser.getNodeAttributeInt(markNode, "SourceID");
|
||||||
|
sourceID = (sourceID == null) ? i+1 : sourceID;
|
||||||
|
|
||||||
String markName = XMLParser.getNodeAttributeString(markNode, "Name");
|
String markName = XMLParser.getNodeAttributeString(markNode, "Name");
|
||||||
|
markName = (markName == null || markName.equals("")) ? cMarkName + " " + i+1: markName;
|
||||||
|
|
||||||
Double targetLat = XMLParser.getNodeAttributeDouble(markNode, "TargetLat");
|
Double targetLat = XMLParser.getNodeAttributeDouble(markNode, "TargetLat");
|
||||||
Double targetLng = XMLParser.getNodeAttributeDouble(markNode, "TargetLng");
|
Double targetLng = XMLParser.getNodeAttributeDouble(markNode, "TargetLng");
|
||||||
|
|
||||||
Mark mark = new Mark(markName, seqID, targetLat, targetLng, sourceID);
|
Mark mark = new Mark(markName, seqID, targetLat, targetLng, sourceID);
|
||||||
subMarks.add(mark);
|
subMarks.add(mark);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return subMarks;
|
return subMarks;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static Pair<String, String> parseRaceDef(String url, String serverName, int repitions) {
|
||||||
|
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
|
||||||
|
DocumentBuilder db;
|
||||||
|
Document doc = null;
|
||||||
|
try {
|
||||||
|
db = dbf.newDocumentBuilder();
|
||||||
|
doc = db.parse(XMLParser.class.getResourceAsStream(url));
|
||||||
|
} catch (ParserConfigurationException | IOException | SAXException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
Element docEle = doc.getDocumentElement();
|
||||||
|
RegattaXMLTemplate regattaXMLTemplate = new RegattaXMLTemplate(
|
||||||
|
serverName, XMLParser.getElementString(docEle, "CourseName"),
|
||||||
|
XMLParser.getElementDouble(docEle, "CentralLat"),
|
||||||
|
XMLParser.getElementDouble(docEle, "CentralLng")
|
||||||
|
);
|
||||||
|
XMLGenerator xmlGenerator = new XMLGenerator();
|
||||||
|
xmlGenerator.setRegattaTemplate(regattaXMLTemplate);
|
||||||
|
System.out.println(xmlGenerator.getRegattaAsXml());
|
||||||
|
// List<Corner> markOrder = XMLParser.extractMarkOrderRaceDef(docEle, repitions);
|
||||||
|
// for (Corner c : markOrder) {
|
||||||
|
// System.out.println(c);
|
||||||
|
// }
|
||||||
|
// List<Limit> limits = XMLParser.extractCourseLimitRaceDef(docEle);
|
||||||
|
// for (Limit l : limits) {
|
||||||
|
// System.out.println(l);
|
||||||
|
// }
|
||||||
|
// List<CompoundMark> course = XMLParser.extractCompoundMarkRaceDef(docEle);
|
||||||
|
// System.out.println(course.size());
|
||||||
|
// for (CompoundMark compoundMark : course) {
|
||||||
|
// System.out.println(compoundMark);
|
||||||
|
// }
|
||||||
|
RaceXMLTemplate raceXMLTemplate = new RaceXMLTemplate(new ArrayList<>(), new ArrayList<>(),
|
||||||
|
XMLParser.extractMarkOrderRaceDef(docEle, repitions),
|
||||||
|
XMLParser.extractCourseLimitRaceDef(docEle),
|
||||||
|
XMLParser.extractCompoundMarksRaceDef(docEle)
|
||||||
|
);
|
||||||
|
xmlGenerator.setRaceTemplate(raceXMLTemplate);
|
||||||
|
System.out.println(xmlGenerator.getRaceAsXml());
|
||||||
|
return new Pair<>(null, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static List<Corner> extractMarkOrderRaceDef(Element docEle, int repitions){
|
||||||
|
List<Corner> compoundMarkSequence = new ArrayList<>();
|
||||||
|
NodeList cornerList = docEle.getElementsByTagName("Course").item(0).getChildNodes();
|
||||||
|
|
||||||
|
int seqId = 1;
|
||||||
|
final int zoneSize = 3;
|
||||||
|
|
||||||
|
for (int i=0; i<cornerList.getLength(); i++) {
|
||||||
|
Node segment = cornerList.item(i);
|
||||||
|
if (segment.getNodeName().equals("OpeningSegment") ||
|
||||||
|
segment.getNodeName().equals("ClosingSegment")) {
|
||||||
|
|
||||||
|
seqId = parseCourseSegment(segment, seqId, compoundMarkSequence);
|
||||||
|
|
||||||
|
} else if (segment.getNodeName().equals("RepeatingSegment")) {
|
||||||
|
for (int k = 0; k < repitions; k++) {
|
||||||
|
seqId = parseCourseSegment(segment, seqId, compoundMarkSequence);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return compoundMarkSequence;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Parses a segment of the course adding new Corners to the given list.
|
||||||
|
* @param segment Segment to parse
|
||||||
|
* @param seqID initial sequence ID
|
||||||
|
* @param course course to add corners to
|
||||||
|
* @return the last sequence id.
|
||||||
|
*/
|
||||||
|
private static int parseCourseSegment(Node segment, int seqID, List<Corner> course) {
|
||||||
|
NodeList segmentList = segment.getChildNodes();
|
||||||
|
for (int j = 0; j < segmentList.getLength(); j++) {
|
||||||
|
Node corner = segmentList.item(j);
|
||||||
|
if (corner.getNodeName().equals("Corner")) {
|
||||||
|
course.add(new Corner(
|
||||||
|
seqID++, XMLParser.getNodeAttributeInt(corner, "CompoundMarkID"),
|
||||||
|
XMLParser.getNodeAttributeString(corner, "Rounding"), 3
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return seqID;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static List<Limit> extractCourseLimitRaceDef(Element docEle) {
|
||||||
|
List<Limit> courseLimit = new ArrayList<>();
|
||||||
|
NodeList limitList = docEle.getElementsByTagName("CourseLimit").item(0).getChildNodes();
|
||||||
|
int seqId = 1;
|
||||||
|
for (int i = 0; i < limitList.getLength(); i++) {
|
||||||
|
Node limitNode = limitList.item(i);
|
||||||
|
if (limitNode.getNodeName().equals("Limit")) {
|
||||||
|
courseLimit.add(new Limit(
|
||||||
|
seqId++, XMLParser.getNodeAttributeDouble(limitNode, "Lat"),
|
||||||
|
XMLParser.getNodeAttributeDouble(limitNode, "Lng")
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return courseLimit;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static List<CompoundMark> extractCompoundMarksRaceDef(Element docEle){
|
||||||
|
List<CompoundMark> allMarks = new ArrayList<>();
|
||||||
|
NodeList cMarkList = docEle.getElementsByTagName("Marks").item(0).getChildNodes();
|
||||||
|
CompoundMark cMark;
|
||||||
|
int markCount = 200;
|
||||||
|
for (int i = 0; i < cMarkList.getLength(); i++) {
|
||||||
|
Node cMarkNode = cMarkList.item(i);
|
||||||
|
if (cMarkNode.getNodeName().equals("CompoundMark")) {
|
||||||
|
Integer id = XMLParser.getNodeAttributeInt(cMarkNode, "CompoundMarkID");
|
||||||
|
List<Mark> subMarks = createMarksRaceDef(cMarkNode, markCount,"Mark " + id);
|
||||||
|
markCount += subMarks.size();
|
||||||
|
allMarks.add(new CompoundMark(id, "Mark " + id, subMarks));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return allMarks;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static List<Mark> createMarksRaceDef(Node compoundMark, int markCount, String markName) {
|
||||||
|
List<Mark> subMarks = new ArrayList<>();
|
||||||
|
NodeList childMarks = compoundMark.getChildNodes();
|
||||||
|
int seqID = 1;
|
||||||
|
for (int i = 0; i < childMarks.getLength(); i++) {
|
||||||
|
Node markNode = childMarks.item(i);
|
||||||
|
if (markNode.getNodeName().equals("Mark")) {
|
||||||
|
Double targetLat = XMLParser.getNodeAttributeDouble(markNode, "Lat");
|
||||||
|
Double targetLng = XMLParser.getNodeAttributeDouble(markNode, "Lng");
|
||||||
|
Mark mark = new Mark(markName + " subMark " + seqID, seqID, targetLat, targetLng, markCount++);
|
||||||
|
subMarks.add(mark);
|
||||||
|
seqID += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return subMarks;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -1,18 +1,20 @@
|
|||||||
package seng302.visualiser.controllers.dialogs;
|
package seng302.visualiser.controllers.dialogs;
|
||||||
|
|
||||||
import com.jfoenix.controls.JFXButton;
|
import com.jfoenix.controls.JFXButton;
|
||||||
|
import com.jfoenix.controls.JFXCheckBox;
|
||||||
import com.jfoenix.controls.JFXSlider;
|
import com.jfoenix.controls.JFXSlider;
|
||||||
import com.jfoenix.controls.JFXTextField;
|
import com.jfoenix.controls.JFXTextField;
|
||||||
import com.jfoenix.validation.RequiredFieldValidator;
|
import com.jfoenix.validation.RequiredFieldValidator;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.util.ResourceBundle;
|
import java.util.ResourceBundle;
|
||||||
import javafx.application.Platform;
|
|
||||||
import javafx.fxml.FXML;
|
import javafx.fxml.FXML;
|
||||||
import javafx.fxml.Initializable;
|
import javafx.fxml.Initializable;
|
||||||
import javafx.scene.control.Label;
|
import javafx.scene.control.Label;
|
||||||
import javafx.scene.input.MouseEvent;
|
import javafx.scene.input.MouseEvent;
|
||||||
|
import javafx.scene.layout.AnchorPane;
|
||||||
import seng302.gameServer.ServerDescription;
|
import seng302.gameServer.ServerDescription;
|
||||||
import seng302.utilities.Sounds;
|
import seng302.utilities.Sounds;
|
||||||
|
import seng302.utilities.XMLParser;
|
||||||
import seng302.visualiser.controllers.ViewManager;
|
import seng302.visualiser.controllers.ViewManager;
|
||||||
import seng302.visualiser.validators.FieldLengthValidator;
|
import seng302.visualiser.validators.FieldLengthValidator;
|
||||||
import seng302.visualiser.validators.ValidationTools;
|
import seng302.visualiser.validators.ValidationTools;
|
||||||
@@ -28,13 +30,33 @@ public class ServerCreationController implements Initializable {
|
|||||||
private Label maxPlayersLabel;
|
private Label maxPlayersLabel;
|
||||||
@FXML
|
@FXML
|
||||||
private JFXButton submitBtn;
|
private JFXButton submitBtn;
|
||||||
|
@FXML
|
||||||
|
private JFXButton nextMapButton;
|
||||||
|
@FXML
|
||||||
|
private JFXButton lastMapButton;
|
||||||
|
@FXML
|
||||||
|
private Label mapNameLabel;
|
||||||
|
@FXML
|
||||||
|
private JFXSlider legsSlider;
|
||||||
|
@FXML
|
||||||
|
private Label legsSliderLabel;
|
||||||
|
@FXML
|
||||||
|
private JFXCheckBox pickupsCheckBox;
|
||||||
|
@FXML
|
||||||
|
private AnchorPane mapHolder;
|
||||||
|
|
||||||
//---------FXML END---------//
|
//---------FXML END---------//
|
||||||
|
|
||||||
public void initialize(URL location, ResourceBundle resources) {
|
public void initialize(URL location, ResourceBundle resources) {
|
||||||
|
legsSlider.setMax(10);
|
||||||
|
maxPlayersSlider.valueProperty().addListener(
|
||||||
|
(observable, oldValue, newValue) -> updateMaxPlayerLabel()
|
||||||
|
);
|
||||||
|
legsSlider.valueProperty().addListener(
|
||||||
|
(obs, oldVal, newVal) -> updateLegSliderLabel()
|
||||||
|
);
|
||||||
updateMaxPlayerLabel();
|
updateMaxPlayerLabel();
|
||||||
maxPlayersSlider.valueProperty().addListener((observable, oldValue, newValue) -> {
|
updateLegSliderLabel();
|
||||||
updateMaxPlayerLabel();
|
|
||||||
});
|
|
||||||
|
|
||||||
FieldLengthValidator fieldLengthValidator = new FieldLengthValidator(40);
|
FieldLengthValidator fieldLengthValidator = new FieldLengthValidator(40);
|
||||||
fieldLengthValidator.setMessage("Server name too long.");
|
fieldLengthValidator.setMessage("Server name too long.");
|
||||||
@@ -49,6 +71,17 @@ public class ServerCreationController implements Initializable {
|
|||||||
validateServerSettings();
|
validateServerSettings();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
nextMapButton.setOnMouseReleased(event -> {
|
||||||
|
Sounds.playButtonClick();
|
||||||
|
nextMap();
|
||||||
|
});
|
||||||
|
|
||||||
|
lastMapButton.setOnMouseReleased(event -> {
|
||||||
|
Sounds.playButtonClick();
|
||||||
|
lastMap();
|
||||||
|
});
|
||||||
|
|
||||||
|
XMLParser.parseRaceDef("/maps/default.xml", "test", 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -80,11 +113,27 @@ public class ServerCreationController implements Initializable {
|
|||||||
*/
|
*/
|
||||||
private void updateMaxPlayerLabel() {
|
private void updateMaxPlayerLabel() {
|
||||||
maxPlayersSlider.setValue(Math.floor(maxPlayersSlider.getValue()));
|
maxPlayersSlider.setValue(Math.floor(maxPlayersSlider.getValue()));
|
||||||
maxPlayersLabel.setText(String.format("YOU SELECTED: %.0f", maxPlayersSlider.getValue()));
|
maxPlayersLabel.setText(String.format("Max players: %.0f", maxPlayersSlider.getValue()));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void updateLegSliderLabel() {
|
||||||
|
legsSlider.setValue(Math.floor(legsSlider.getValue()));
|
||||||
|
legsSliderLabel.setText(
|
||||||
|
String.format("A section of the race will repeat %.0f times", legsSlider.getValue())
|
||||||
|
);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void playButtonHoverSound(MouseEvent mouseEvent) {
|
public void playButtonHoverSound(MouseEvent mouseEvent) {
|
||||||
Sounds.playHoverSound();
|
Sounds.playHoverSound();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void nextMap() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void lastMap() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,9 +0,0 @@
|
|||||||
<?xml version="1.0" ?>
|
|
||||||
|
|
||||||
<configurations>
|
|
||||||
<race-name>AC35</race-name>
|
|
||||||
<race-size>6</race-size>
|
|
||||||
<time-scale>10.0</time-scale>
|
|
||||||
<windDir-direction>135</windDir-direction>
|
|
||||||
</configurations>
|
|
||||||
|
|
||||||
@@ -1,80 +0,0 @@
|
|||||||
<?xml version="1.0" ?>
|
|
||||||
|
|
||||||
<markers>
|
|
||||||
<marks>
|
|
||||||
<gate>
|
|
||||||
<name type="start-line">Start</name>
|
|
||||||
<mark>
|
|
||||||
<name>Start1</name>
|
|
||||||
<latitude>57.6703330</latitude>
|
|
||||||
<longitude>11.8278330</longitude>
|
|
||||||
<id>122</id>
|
|
||||||
</mark>
|
|
||||||
<mark>
|
|
||||||
<name>Start2</name>
|
|
||||||
<latitude>57.6703330</latitude>
|
|
||||||
<longitude>11.8271333</longitude>
|
|
||||||
<id>123</id>
|
|
||||||
</mark>
|
|
||||||
</gate>
|
|
||||||
<mark>
|
|
||||||
<name>Mid Mark</name>
|
|
||||||
<latitude>57.6675700</latitude>
|
|
||||||
<longitude>11.8359880</longitude>
|
|
||||||
<id>131</id>
|
|
||||||
</mark>
|
|
||||||
<gate>
|
|
||||||
<name>Leeward Gate</name>
|
|
||||||
<mark>
|
|
||||||
<name>Leeward Gate1</name>
|
|
||||||
<latitude>57.6708220</latitude>
|
|
||||||
<longitude>11.8433900</longitude>
|
|
||||||
<id>124</id>
|
|
||||||
</mark>
|
|
||||||
<mark>
|
|
||||||
<name>Leeward Gate2</name>
|
|
||||||
<latitude>57.6711220</latitude>
|
|
||||||
<longitude>11.8436900</longitude>
|
|
||||||
<id>125</id>
|
|
||||||
</mark>
|
|
||||||
</gate>
|
|
||||||
<gate>
|
|
||||||
<name>Windward Gate</name>
|
|
||||||
<mark>
|
|
||||||
<name>Windward Gate1</name>
|
|
||||||
<latitude>57.6650170</latitude>
|
|
||||||
<longitude>11.8279170</longitude>
|
|
||||||
<id>126</id>
|
|
||||||
</mark>
|
|
||||||
<mark>
|
|
||||||
<name>Windward Gate2</name>
|
|
||||||
<latitude>57.6653170</latitude>
|
|
||||||
<longitude>11.8282170</longitude>
|
|
||||||
<id>127</id>
|
|
||||||
</mark>
|
|
||||||
</gate>
|
|
||||||
<gate type="finish-line">
|
|
||||||
<name>Finish</name>
|
|
||||||
<mark>
|
|
||||||
<name>Finish1</name>
|
|
||||||
<latitude>57.6715240</latitude>
|
|
||||||
<longitude>11.8444950</longitude>
|
|
||||||
<id>128</id>
|
|
||||||
</mark>
|
|
||||||
<mark>
|
|
||||||
<name>Finish2</name>
|
|
||||||
<latitude>57.6718240</latitude>
|
|
||||||
<longitude>11.8447950</longitude>
|
|
||||||
<id>129</id>
|
|
||||||
</mark>
|
|
||||||
</gate>
|
|
||||||
</marks>
|
|
||||||
<order>
|
|
||||||
<one>Start</one>
|
|
||||||
<two>Mid Mark</two>
|
|
||||||
<three>Leeward Gate</three>
|
|
||||||
<four>Windward Gate</four>
|
|
||||||
<five>Leeward Gate</five>
|
|
||||||
<six>Finish</six>
|
|
||||||
</order>
|
|
||||||
</markers>
|
|
||||||
@@ -1,72 +0,0 @@
|
|||||||
<?xml version="1.0" ?>
|
|
||||||
|
|
||||||
<course>
|
|
||||||
<marks>
|
|
||||||
<gate>
|
|
||||||
<name type="start-line">Start</name>
|
|
||||||
<mark>
|
|
||||||
<name>Start1</name>
|
|
||||||
<latitude>32.296577</latitude>
|
|
||||||
<longitude>-64.854304</longitude>
|
|
||||||
</mark>
|
|
||||||
<mark>
|
|
||||||
<name>Start2</name>
|
|
||||||
<latitude>32.293771</latitude>
|
|
||||||
<longitude>-64.855242</longitude>
|
|
||||||
</mark>
|
|
||||||
</gate>
|
|
||||||
<mark>
|
|
||||||
<name>Mid Mark</name>
|
|
||||||
<latitude>32.293039</latitude>
|
|
||||||
<longitude>-64.843983</longitude>
|
|
||||||
</mark>
|
|
||||||
<gate>
|
|
||||||
<name>Leeward Gate</name>
|
|
||||||
<mark>
|
|
||||||
<name>Leeward Gate1</name>
|
|
||||||
<latitude>32.284680</latitude>
|
|
||||||
<longitude>-64.850045</longitude>
|
|
||||||
</mark>
|
|
||||||
<mark>
|
|
||||||
<name>Leeward Gate2</name>
|
|
||||||
<latitude>32.280164</latitude>
|
|
||||||
<longitude>-64.847591</longitude>
|
|
||||||
</mark>
|
|
||||||
</gate>
|
|
||||||
<gate>
|
|
||||||
<name>Windward Gate</name>
|
|
||||||
<mark>
|
|
||||||
<name>Windward Gate1</name>
|
|
||||||
<latitude>32.309693</latitude>
|
|
||||||
<longitude>-64.835249</longitude>
|
|
||||||
</mark>
|
|
||||||
<mark>
|
|
||||||
<name>Windward Gate2</name>
|
|
||||||
<latitude>32.308046</latitude>
|
|
||||||
<longitude>-64.831785</longitude>
|
|
||||||
</mark>
|
|
||||||
</gate>
|
|
||||||
<gate type="finish-line">
|
|
||||||
<name>Finish</name>
|
|
||||||
<mark>
|
|
||||||
<name>Finish1</name>
|
|
||||||
<latitude>32.317379</latitude>
|
|
||||||
<longitude>-64.839291</longitude>
|
|
||||||
</mark>
|
|
||||||
<mark>
|
|
||||||
<name>Finish2</name>
|
|
||||||
<latitude>32.317257</latitude>
|
|
||||||
<longitude>-64.836260</longitude>
|
|
||||||
</mark>
|
|
||||||
</gate>
|
|
||||||
</marks>
|
|
||||||
<order>
|
|
||||||
<one>Start</one>
|
|
||||||
<two>Mid Mark</two>
|
|
||||||
<three>Leeward Gate</three>
|
|
||||||
<four>Windward Gate</four>
|
|
||||||
<five>Leeward Gate</five>
|
|
||||||
<six>Finish</six>
|
|
||||||
</order>
|
|
||||||
</course>
|
|
||||||
|
|
||||||
@@ -1,40 +0,0 @@
|
|||||||
<?xml version="1.0" ?>
|
|
||||||
|
|
||||||
<teams>
|
|
||||||
<team>
|
|
||||||
<name>Oracle Team USA</name>
|
|
||||||
<alias>USA</alias>
|
|
||||||
<currentVelocity>0.0</currentVelocity>
|
|
||||||
<id>102</id>
|
|
||||||
</team>
|
|
||||||
<team>
|
|
||||||
<name>Artemis Racing</name>
|
|
||||||
<alias>ART</alias>
|
|
||||||
<currentVelocity>0.0</currentVelocity>
|
|
||||||
<id>101</id>
|
|
||||||
</team>
|
|
||||||
<team>
|
|
||||||
<name>Emirates Team New Zealand</name>
|
|
||||||
<alias>NZL</alias>
|
|
||||||
<currentVelocity>0.0</currentVelocity>
|
|
||||||
<id>103</id>
|
|
||||||
</team>
|
|
||||||
<team>
|
|
||||||
<name>Land Rover BAR</name>
|
|
||||||
<alias>BAR</alias>
|
|
||||||
<currentVelocity>0.0</currentVelocity>
|
|
||||||
<id>104</id>
|
|
||||||
</team>
|
|
||||||
<team>
|
|
||||||
<name>SoftBank Team Japan</name>
|
|
||||||
<alias>JAP</alias>
|
|
||||||
<currentVelocity>0.0</currentVelocity>
|
|
||||||
<id>105</id>
|
|
||||||
</team>
|
|
||||||
<team>
|
|
||||||
<name>Groupama Team France</name>
|
|
||||||
<alias>FRC</alias>
|
|
||||||
<currentVelocity>0.0</currentVelocity>
|
|
||||||
<id>106</id>
|
|
||||||
</team>
|
|
||||||
</teams>
|
|
||||||
@@ -0,0 +1,62 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<RaceDefinition>
|
||||||
|
|
||||||
|
<CourseName> El Classico </CourseName>
|
||||||
|
|
||||||
|
<CentralLat> 57.6679590 </CentralLat>
|
||||||
|
<CentralLng> 11.8503233 </CentralLng>
|
||||||
|
|
||||||
|
<Marks>
|
||||||
|
<CompoundMark CompoundMarkID="1">
|
||||||
|
<Mark Lat="57.670603" Lng="11.828262"/>
|
||||||
|
<Mark Lat="57.669445" Lng="11.826413"/>
|
||||||
|
</CompoundMark>
|
||||||
|
<CompoundMark CompoundMarkID="2">
|
||||||
|
<Mark Lat="57.6675700" Lng="11.8359880"/>
|
||||||
|
</CompoundMark>
|
||||||
|
<CompoundMark CompoundMarkID="3">
|
||||||
|
<Mark Lat="57.6708220" Lng="11.8433900"/>
|
||||||
|
<Mark Lat="57.671629" Lng="11.840951"/>
|
||||||
|
</CompoundMark>
|
||||||
|
<CompoundMark CompoundMarkID="4">
|
||||||
|
<Mark Lat="57.664190" Lng="11.829576"/>
|
||||||
|
<Mark Lat="57.665316" Lng="11.827184"/>
|
||||||
|
</CompoundMark>
|
||||||
|
<CompoundMark CompoundMarkID="5">
|
||||||
|
<Mark Lat="57.672350" Lng="11.842535"/>
|
||||||
|
<Mark Lat="57.6715240" Lng="11.8444950"/>
|
||||||
|
</CompoundMark>
|
||||||
|
</Marks>
|
||||||
|
|
||||||
|
<Course>
|
||||||
|
<OpeningSegment>
|
||||||
|
<Corner CompoundMarkID="1" Rounding="PS"/>
|
||||||
|
<Corner CompoundMarkID="2" Rounding="P"/>
|
||||||
|
</OpeningSegment>
|
||||||
|
|
||||||
|
<RepeatingSegment>
|
||||||
|
<Corner CompoundMarkID="3" Rounding="SP"/>
|
||||||
|
<Corner CompoundMarkID="4" Rounding="PS"/>
|
||||||
|
</RepeatingSegment>
|
||||||
|
|
||||||
|
<ClosingSegment>
|
||||||
|
<Corner CompoundMarkID="5" Rounding="PS"/>
|
||||||
|
</ClosingSegment>
|
||||||
|
</Course>
|
||||||
|
|
||||||
|
<CourseLimit>
|
||||||
|
<Limit Lat="57.6739450" Lng="11.8417100" />
|
||||||
|
<Limit Lat="57.6709520" Lng="11.8485010" />
|
||||||
|
<Limit Lat="57.6690260" Lng="11.8472790" />
|
||||||
|
<Limit Lat="57.6693140" Lng="11.8457610" />
|
||||||
|
<Limit Lat="57.6665370" Lng="11.8432910" />
|
||||||
|
<Limit Lat="57.6641400" Lng="11.8385840" />
|
||||||
|
<Limit Lat="57.6629430" Lng="11.8332030" />
|
||||||
|
<Limit Lat="57.6629480" Lng="11.8249660" />
|
||||||
|
<Limit Lat="57.6686890" Lng="11.8250920" />
|
||||||
|
<Limit Lat="57.6692230" Lng="11.8231430" />
|
||||||
|
<Limit Lat="57.6725370" Lng="11.8272480" />
|
||||||
|
<Limit Lat="57.6708220" Lng="11.8321340" />
|
||||||
|
</CourseLimit>
|
||||||
|
|
||||||
|
</RaceDefinition>
|
||||||
@@ -0,0 +1,77 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<RaceDefinition>
|
||||||
|
|
||||||
|
<CourseName> HorseShoe </CourseName>
|
||||||
|
|
||||||
|
<CentralLat> -14.6457 </CentralLat>
|
||||||
|
<CentralLng> 47.612855 </CentralLng>
|
||||||
|
|
||||||
|
<Marks>
|
||||||
|
<CompoundMark CompoundMarkID="1">
|
||||||
|
<Mark Lat="-14.71412" Lng="47.5756"/>
|
||||||
|
<Mark Lat="-14.70814" Lng="47.58041"/>
|
||||||
|
</CompoundMark>
|
||||||
|
<CompoundMark CompoundMarkID="2">
|
||||||
|
<Mark Lat="-14.67194" Lng="47.53818" />
|
||||||
|
</CompoundMark>
|
||||||
|
<CompoundMark CompoundMarkID="3">
|
||||||
|
<Mark Lat="-14.61248" Lng="47.58556" />
|
||||||
|
</CompoundMark>
|
||||||
|
<CompoundMark CompoundMarkID="4">
|
||||||
|
<Mark Lat="-14.60584" Lng="47.63088"/>
|
||||||
|
<Mark Lat="-14.60617" Lng="47.6374" />
|
||||||
|
</CompoundMark>
|
||||||
|
<CompoundMark CompoundMarkID="5">
|
||||||
|
<Mark Lat="-14.64637" Lng="47.60307"/>
|
||||||
|
<Mark Lat="-14.6477" Lng="47.61165"/>
|
||||||
|
</CompoundMark>
|
||||||
|
<CompoundMark CompoundMarkID="6">
|
||||||
|
<Mark Lat="-14.63839" Lng="47.6762"/>
|
||||||
|
</CompoundMark>
|
||||||
|
<CompoundMark CompoundMarkID="7">
|
||||||
|
<Mark Lat="-14.68954" Lng="47.66349"/>
|
||||||
|
</CompoundMark>
|
||||||
|
<CompoundMark CompoundMarkID="8">
|
||||||
|
<Mark Lat="-14.7025" Lng="47.60238"/>
|
||||||
|
<Mark Lat="-14.71047" Lng="47.60307"/>
|
||||||
|
</CompoundMark>
|
||||||
|
</Marks>
|
||||||
|
|
||||||
|
<Course>
|
||||||
|
|
||||||
|
<OpeningSegment>
|
||||||
|
<Corner CompoundMarkID="1" Rounding="PS"/>
|
||||||
|
<Corner CompoundMarkID="2" Rounding="S"/>
|
||||||
|
<Corner CompoundMarkID="3" Rounding="S"/>
|
||||||
|
<Corner CompoundMarkID="4" Rounding="SP"/>
|
||||||
|
</OpeningSegment>
|
||||||
|
|
||||||
|
<RepeatingSegment>
|
||||||
|
<Corner CompoundMarkID="5" Rounding="SP"/>
|
||||||
|
<Corner CompoundMarkID="4" Rounding="PS"/>
|
||||||
|
</RepeatingSegment>
|
||||||
|
|
||||||
|
<ClosingSegment>
|
||||||
|
<Corner CompoundMarkID="6" Rounding="S"/>
|
||||||
|
<Corner CompoundMarkID="7" Rounding="S"/>
|
||||||
|
<Corner CompoundMarkID="8" Rounding="SP" />
|
||||||
|
</ClosingSegment>
|
||||||
|
|
||||||
|
</Course>
|
||||||
|
|
||||||
|
<CourseLimit>
|
||||||
|
<Limit Lat="-14.73371" Lng="47.58213" />
|
||||||
|
<Limit Lat="-14.6653" Lng="47.51003" />
|
||||||
|
<Limit Lat="-14.59022" Lng="47.57286" />
|
||||||
|
<Limit Lat="-14.58723" Lng="47.64358" />
|
||||||
|
<Limit Lat="-14.6261" Lng="47.71293" />
|
||||||
|
<Limit Lat="-14.70814" Lng="47.6762" />
|
||||||
|
<Limit Lat="-14.72773" Lng="47.59689" />
|
||||||
|
<Limit Lat="-14.68323" Lng="47.59449" />
|
||||||
|
<Limit Lat="-14.64969" Lng="47.65113" />
|
||||||
|
<Limit Lat="-14.66131" Lng="47.5986" />
|
||||||
|
<Limit Lat="-14.63441" Lng="47.58419" />
|
||||||
|
<Limit Lat="-14.68091" Lng="47.59174" />
|
||||||
|
</CourseLimit>
|
||||||
|
|
||||||
|
</RaceDefinition>
|
||||||
|
Before Width: | Height: | Size: 50 KiB |
|
Before Width: | Height: | Size: 44 KiB |
|
Before Width: | Height: | Size: 37 KiB |
|
Before Width: | Height: | Size: 52 KiB |
|
Before Width: | Height: | Size: 46 KiB |
|
Before Width: | Height: | Size: 51 KiB |
|
Before Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 54 KiB |
|
Before Width: | Height: | Size: 49 KiB |
|
Before Width: | Height: | Size: 8.9 KiB |
|
Before Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 202 KiB |
|
Before Width: | Height: | Size: 59 KiB |
@@ -1,171 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<BoatConfig>
|
|
||||||
<Modified>2015-08-28T17:32:59+0100</Modified>
|
|
||||||
<Version>12</Version>
|
|
||||||
<Snapshot>219</Snapshot>
|
|
||||||
<Settings>
|
|
||||||
<RaceBoatType Type="AC45"/>
|
|
||||||
<BoatDimension BoatLength="14.019" HullLength="13.449"/>
|
|
||||||
<ZoneSize MarkZoneSize="40.347" CourseZoneSize="53.796"/>
|
|
||||||
<ZoneLimits Limit1="200" Limit2="100" Limit3="53.796" Limit4="0" Limit5="-100"/>
|
|
||||||
</Settings>
|
|
||||||
<BoatShapes>
|
|
||||||
<BoatShape ShapeID="0">
|
|
||||||
<Vertices>
|
|
||||||
<Vtx Seq="3" Y="25" X="0"/>
|
|
||||||
</Vertices>
|
|
||||||
</BoatShape>
|
|
||||||
<BoatShape ShapeID="14">
|
|
||||||
<Vertices>
|
|
||||||
<Vtx Seq="1" Y="0" X="-1"/>
|
|
||||||
<Vtx Seq="2" Y="0.75" X="-1"/>
|
|
||||||
<Vtx Seq="3" Y="0.75" X="-0.25"/>
|
|
||||||
<Vtx Seq="4" Y="3.5" X="-0.25"/>
|
|
||||||
<Vtx Seq="5" Y="4.5" X="-1"/>
|
|
||||||
<Vtx Seq="6" Y="6.5" X="-1"/>
|
|
||||||
<Vtx Seq="7" Y="7" X="-0.5"/>
|
|
||||||
<Vtx Seq="8" Y="7" X="0.5"/>
|
|
||||||
<Vtx Seq="9" Y="6.5" X="1"/>
|
|
||||||
<Vtx Seq="10" Y="4.5" X="1"/>
|
|
||||||
<Vtx Seq="11" Y="3.5" X="0.25"/>
|
|
||||||
<Vtx Seq="12" Y="0.75" X="0.25"/>
|
|
||||||
<Vtx Seq="13" Y="0.75" X="1"/>
|
|
||||||
<Vtx Seq="14" Y="0" X="1"/>
|
|
||||||
</Vertices>
|
|
||||||
</BoatShape>
|
|
||||||
<BoatShape ShapeID="15">
|
|
||||||
<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="18">
|
|
||||||
<Vertices>
|
|
||||||
<Vtx Seq="1" Y="0" X="-1.04"/>
|
|
||||||
<Vtx Seq="2" Y="0.11" X="-1.18"/>
|
|
||||||
<Vtx Seq="3" Y="0.42" X="-1.28"/>
|
|
||||||
<Vtx Seq="4" Y="3.74" X="-1.29"/>
|
|
||||||
<Vtx Seq="5" Y="5.36" X="-1.21"/>
|
|
||||||
<Vtx Seq="6" Y="6.29" X="-1.08"/>
|
|
||||||
<Vtx Seq="7" Y="7.15" X="-0.84"/>
|
|
||||||
<Vtx Seq="8" Y="7.63" X="-0.62"/>
|
|
||||||
<Vtx Seq="9" Y="7.94" X="-0.34"/>
|
|
||||||
<Vtx Seq="10" Y="8.06" X="0"/>
|
|
||||||
<Vtx Seq="11" Y="7.94" X="0.34"/>
|
|
||||||
<Vtx Seq="12" Y="7.63" X="0.62"/>
|
|
||||||
<Vtx Seq="13" Y="7.15" X="0.84"/>
|
|
||||||
<Vtx Seq="14" Y="6.29" X="1.08"/>
|
|
||||||
<Vtx Seq="15" Y="5.36" X="1.21"/>
|
|
||||||
<Vtx Seq="16" Y="3.74" X="1.29"/>
|
|
||||||
<Vtx Seq="17" Y="0.42" X="1.28"/>
|
|
||||||
<Vtx Seq="18" Y="0.11" X="1.18"/>
|
|
||||||
<Vtx Seq="19" Y="0" X="1.04"/>
|
|
||||||
</Vertices>
|
|
||||||
</BoatShape>
|
|
||||||
<BoatShape ShapeID="24">
|
|
||||||
<Vertices>
|
|
||||||
<Vtx Seq="1" Y="0" X="-2.5"/>
|
|
||||||
<Vtx Seq="2" Y="7" X="-2.5"/>
|
|
||||||
<Vtx Seq="3" Y="12.6" X="-2.2"/>
|
|
||||||
<Vtx Seq="4" Y="12.6" X="2.2"/>
|
|
||||||
<Vtx Seq="5" Y="7" X="2.5"/>
|
|
||||||
<Vtx Seq="6" Y="0" X="2.5"/>
|
|
||||||
</Vertices>
|
|
||||||
</BoatShape>
|
|
||||||
<BoatShape ShapeID="34">
|
|
||||||
<Vertices>
|
|
||||||
<Vtx Seq="1" Y="0" X="-1.16"/>
|
|
||||||
<Vtx Seq="2" Y="5.51" X="-1.16"/>
|
|
||||||
<Vtx Seq="3" Y="5.846" X="-0.84"/>
|
|
||||||
<Vtx Seq="4" Y="5.846" X="0.84"/>
|
|
||||||
<Vtx Seq="5" Y="5.51" X="1.16"/>
|
|
||||||
<Vtx Seq="6" Y="0" X="1.16"/>
|
|
||||||
</Vertices>
|
|
||||||
</BoatShape>
|
|
||||||
<BoatShape ShapeID="35">
|
|
||||||
<Vertices>
|
|
||||||
<Vtx Seq="1" Y="0" X="-1.461"/>
|
|
||||||
<Vtx Seq="2" Y="6" X="-1.461"/>
|
|
||||||
<Vtx Seq="3" Y="7" X="-1.44"/>
|
|
||||||
<Vtx Seq="4" Y="8" X="-1.38"/>
|
|
||||||
<Vtx Seq="5" Y="9" X="-1.17"/>
|
|
||||||
<Vtx Seq="6" Y="10" X="-0.76"/>
|
|
||||||
<Vtx Seq="7" Y="10.6" X="-0.34"/>
|
|
||||||
<Vtx Seq="8" Y="10.61" X="0"/>
|
|
||||||
<Vtx Seq="9" Y="10.6" X="0.34"/>
|
|
||||||
<Vtx Seq="10" Y="10" X="0.76"/>
|
|
||||||
<Vtx Seq="11" Y="9" X="1.17"/>
|
|
||||||
<Vtx Seq="12" Y="8" X="1.38"/>
|
|
||||||
<Vtx Seq="13" Y="7" X="1.44"/>
|
|
||||||
<Vtx Seq="14" Y="6" X="1.461"/>
|
|
||||||
<Vtx Seq="15" Y="0" X="1.461"/>
|
|
||||||
</Vertices>
|
|
||||||
</BoatShape>
|
|
||||||
</BoatShapes>
|
|
||||||
<Boats>
|
|
||||||
<Boat Type="Yacht" SourceID="101" ShapeID="15" StoweName="USA" ShortName="ORACLE" ShorterName="USA" BoatName="ORACLE TEAM USA" HullNum="AC4515" Skipper="SPITHILL" Helmsman="SPITHILL" Country="USA" PeliID="101" RadioIP="172.20.2.101">
|
|
||||||
<GPSposition Z="1.78" Y="-0.331" X="-0.006"/>
|
|
||||||
<MastTop Z="21.496" Y="3.7" X="0"/>
|
|
||||||
<FlagPosition Z="0" Y="6.2" X="0"/>
|
|
||||||
</Boat>
|
|
||||||
<Boat Type="Yacht" SourceID="102" ShapeID="15" StoweName="SWE" ShortName="ARTEMIS" ShorterName="SWE" BoatName="ARTEMIS RACING" HullNum="AC4517" Skipper="OUTTERIDGE" Helmsman="OUTTERIDGE" Country="SWE" PeliID="102" RadioIP="172.20.2.102">
|
|
||||||
<GPSposition Z="1.727" Y="-0.359" X="-0.0121"/>
|
|
||||||
<MastTop Z="21.496" Y="3.7" X="0"/>
|
|
||||||
<FlagPosition Z="0" Y="6.2" X="0"/>
|
|
||||||
</Boat>
|
|
||||||
<Boat Type="Yacht" SourceID="103" ShapeID="15" StoweName="NZL" ShortName="ETNZ" ShorterName="NZL" BoatName="EMIRATES TEAM NZ" HullNum="AC4503" Skipper="ASHBY" Helmsman="BURLING" Country="NZL" PeliID="103" RadioIP="172.20.2.103">
|
|
||||||
<GPSposition Z="1.881" Y="-0.291" X="-0.003"/>
|
|
||||||
<MastTop Z="21.496" Y="3.7" X="0"/>
|
|
||||||
<FlagPosition Z="0" Y="6.2" X="0"/>
|
|
||||||
</Boat>
|
|
||||||
<Boat Type="Yacht" SourceID="104" ShapeID="15" StoweName="JPN" ShortName="JAPAN" ShorterName="JPN" BoatName="SOFTBANK TEAM JAPAN" HullNum="AC4504" Skipper="BARKER" Helmsman="BARKER" Country="JPN" PeliID="104" RadioIP="172.20.2.104">
|
|
||||||
<GPSposition Z="1.805" Y="-0.322" X="-0.003"/>
|
|
||||||
<MastTop Z="21.496" Y="3.7" X="0"/>
|
|
||||||
<FlagPosition Z="0" Y="6.2" X="0"/>
|
|
||||||
</Boat>
|
|
||||||
<Boat Type="Yacht" SourceID="105" ShapeID="15" StoweName="FRA" ShortName="FRANCE" ShorterName="FRA" BoatName="GROUPAMA TEAM FRANCE" HullNum="AC4505" Skipper="CAMMAS" Helmsman="CAMMAS" Country="FRA" PeliID="105" RadioIP="172.20.2.105">
|
|
||||||
<GPSposition Z="1.863" Y="-0.3" X="-0.003"/>
|
|
||||||
<MastTop Z="21.496" Y="3.7" X="0"/>
|
|
||||||
<FlagPosition Z="0" Y="6.2" X="0"/>
|
|
||||||
</Boat>
|
|
||||||
<Boat Type="Yacht" SourceID="106" ShapeID="15" StoweName="GBR" ShortName="GBR" ShorterName="GBR" BoatName="LAND ROVER BAR" HullNum="AC4516" Skipper="ANSLIE" Helmsman="ANSLIE" Country="GBR" PeliID="106" RadioIP="172.20.2.106">
|
|
||||||
<GPSposition Z="1.734" Y="-0.352" X="0"/>
|
|
||||||
<MastTop Z="21.496" Y="3.7" X="0"/>
|
|
||||||
<FlagPosition Z="0" Y="6.2" X="0"/>
|
|
||||||
</Boat>
|
|
||||||
</Boats>
|
|
||||||
</BoatConfig>
|
|
||||||
@@ -1,105 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<Race>
|
|
||||||
<CreationTimeDate>2015-08-29T13:12:40+02:00</CreationTimeDate>
|
|
||||||
<RaceStartTime Start="2015-08-29T13:10:00+02:00" Postpone="False"/>
|
|
||||||
<RaceID>15082901</RaceID>
|
|
||||||
<RaceType>Fleet</RaceType>
|
|
||||||
<Participants>
|
|
||||||
<Yacht SourceID="101"/>
|
|
||||||
<Yacht SourceID="102"/>
|
|
||||||
<Yacht SourceID="103"/>
|
|
||||||
<Yacht SourceID="104"/>
|
|
||||||
<Yacht SourceID="105"/>
|
|
||||||
<Yacht SourceID="106"/>
|
|
||||||
</Participants>
|
|
||||||
<Course>
|
|
||||||
<CompoundMark CompoundMarkID="1" Name="Mark0">
|
|
||||||
<Mark SeqID="1" Name="Start Line 1" TargetLat="57.6703330" TargetLng="11.8278330"
|
|
||||||
SourceID="122"/>
|
|
||||||
<Mark SeqID="2" Name="Start Line 2" TargetLat="57.6703330" TargetLng="11.8278330"
|
|
||||||
SourceID="123"/>
|
|
||||||
</CompoundMark>
|
|
||||||
<CompoundMark CompoundMarkID="2" Name="Mark1">
|
|
||||||
<Mark SeqID="1" Name="Mark1" TargetLat="57.6675700" TargetLng="11.8359880" SourceID="131"/>
|
|
||||||
</CompoundMark>
|
|
||||||
<CompoundMark CompoundMarkID="3" Name="Mark2">
|
|
||||||
<Mark SeqID="1" Name="Lee Gate 1" TargetLat="57.6708220" TargetLng="11.8433900"
|
|
||||||
SourceID="124"/>
|
|
||||||
<Mark SeqID="2" Name="Lee Gate 2" TargetLat="57.6708220" TargetLng="11.8433900"
|
|
||||||
SourceID="125"/>
|
|
||||||
</CompoundMark>
|
|
||||||
<CompoundMark CompoundMarkID="4" Name="Mark3">
|
|
||||||
<Mark SeqID="1" Name="Wind Gate 1" TargetLat="57.6650170" TargetLng="11.8279170"
|
|
||||||
SourceID="126"/>
|
|
||||||
<Mark SeqID="2" Name="Wind Gate 2" TargetLat="57.6650170" TargetLng="11.8279170"
|
|
||||||
SourceID="127"/>
|
|
||||||
</CompoundMark>
|
|
||||||
<CompoundMark CompoundMarkID="5" Name="Mark2">
|
|
||||||
<Mark SeqID="1" Name="Lee Gate 1" TargetLat="57.6708220" TargetLng="11.8433900"
|
|
||||||
SourceID="124"/>
|
|
||||||
<Mark SeqID="2" Name="Lee Gate 2" TargetLat="57.6708220" TargetLng="11.8433900"
|
|
||||||
SourceID="125"/>
|
|
||||||
</CompoundMark>
|
|
||||||
<CompoundMark CompoundMarkID="6" Name="Mark3">
|
|
||||||
<Mark SeqID="1" Name="Wind Gate 1" TargetLat="57.6650170" TargetLng="11.8279170"
|
|
||||||
SourceID="126"/>
|
|
||||||
<Mark SeqID="2" Name="Wind Gate 2" TargetLat="57.6650170" TargetLng="11.8279170"
|
|
||||||
SourceID="127"/>
|
|
||||||
</CompoundMark>
|
|
||||||
<CompoundMark CompoundMarkID="7" Name="Mark2">
|
|
||||||
<Mark SeqID="1" Name="Lee Gate 1" TargetLat="57.6708220" TargetLng="11.8433900"
|
|
||||||
SourceID="124"/>
|
|
||||||
<Mark SeqID="2" Name="Lee Gate 2" TargetLat="57.6708220" TargetLng="11.8433900"
|
|
||||||
SourceID="125"/>
|
|
||||||
</CompoundMark>
|
|
||||||
<CompoundMark CompoundMarkID="8" Name="Mark3">
|
|
||||||
<Mark SeqID="1" Name="Wind Gate 1" TargetLat="57.6650170" TargetLng="11.8279170"
|
|
||||||
SourceID="126"/>
|
|
||||||
<Mark SeqID="2" Name="Wind Gate 2" TargetLat="57.6650170" TargetLng="11.8279170"
|
|
||||||
SourceID="127"/>
|
|
||||||
</CompoundMark>
|
|
||||||
<CompoundMark CompoundMarkID="9" Name="Mark2">
|
|
||||||
<Mark SeqID="1" Name="Lee Gate 1" TargetLat="57.6708220" TargetLng="11.8433900"
|
|
||||||
SourceID="124"/>
|
|
||||||
<Mark SeqID="2" Name="Lee Gate 2" TargetLat="57.6708220" TargetLng="11.8433900"
|
|
||||||
SourceID="125"/>
|
|
||||||
</CompoundMark>
|
|
||||||
<CompoundMark CompoundMarkID="10" Name="Mark3">
|
|
||||||
<Mark SeqID="1" Name="Wind Gate 1" TargetLat="57.6650170" TargetLng="11.8279170"
|
|
||||||
SourceID="126"/>
|
|
||||||
<Mark SeqID="2" Name="Wind Gate 2" TargetLat="57.6650170" TargetLng="11.8279170"
|
|
||||||
SourceID="127"/>
|
|
||||||
</CompoundMark>
|
|
||||||
<CompoundMark CompoundMarkID="11" Name="Mark4">
|
|
||||||
<Mark SeqID="1" Name="Finish Line 1" TargetLat="57.6715240" TargetLng="11.8444950"
|
|
||||||
SourceID="128"/>
|
|
||||||
<Mark SeqID="2" Name="Finish Line 2" TargetLat="57.6715240" TargetLng="11.8444950"
|
|
||||||
SourceID="129"/>
|
|
||||||
</CompoundMark>
|
|
||||||
</Course>
|
|
||||||
<CompoundMarkSequence>
|
|
||||||
<Corner SeqID="1" CompoundMarkID="1" Rounding="PS" ZoneSize="3"/>
|
|
||||||
<Corner SeqID="2" CompoundMarkID="2" Rounding="Port" ZoneSize="3"/>
|
|
||||||
<Corner SeqID="3" CompoundMarkID="3" Rounding="SP" ZoneSize="3"/>
|
|
||||||
<Corner SeqID="4" CompoundMarkID="4" Rounding="PS" ZoneSize="3"/>
|
|
||||||
<Corner SeqID="5" CompoundMarkID="5" Rounding="SP" ZoneSize="3"/>
|
|
||||||
<Corner SeqID="6" CompoundMarkID="6" Rounding="PS" ZoneSize="3"/>
|
|
||||||
<Corner SeqID="7" CompoundMarkID="7" Rounding="SP" ZoneSize="3"/>
|
|
||||||
<Corner SeqID="8" CompoundMarkID="8" Rounding="PS" ZoneSize="3"/>
|
|
||||||
<Corner SeqID="9" CompoundMarkID="9" Rounding="SP" ZoneSize="3"/>
|
|
||||||
<Corner SeqID="10" CompoundMarkID="10" Rounding="PS" ZoneSize="3"/>
|
|
||||||
<Corner SeqID="11" CompoundMarkID="11" Rounding="PS" ZoneSize="3"/>
|
|
||||||
</CompoundMarkSequence>
|
|
||||||
<CourseLimit>
|
|
||||||
<Limit SeqID="1" Lat="57.6739450" Lon="11.8417100"/>
|
|
||||||
<Limit SeqID="2" Lat="57.6709520" Lon="11.8485010"/>
|
|
||||||
<Limit SeqID="3" Lat="57.6690260" Lon="11.8472790"/>
|
|
||||||
<Limit SeqID="4" Lat="57.6693140" Lon="11.8457610"/>
|
|
||||||
<Limit SeqID="5" Lat="57.6665370" Lon="11.8432910"/>
|
|
||||||
<Limit SeqID="6" Lat="57.6641400" Lon="11.8385840"/>
|
|
||||||
<Limit SeqID="7" Lat="57.6629430" Lon="11.8332030"/>
|
|
||||||
<Limit SeqID="8" Lat="57.6629480" Lon="11.8249660"/>
|
|
||||||
<Limit SeqID="9" Lat="57.6686890" Lon="11.8250920"/>
|
|
||||||
<Limit SeqID="10" Lat="57.6708220" Lon="11.8321340"/>
|
|
||||||
</CourseLimit>
|
|
||||||
</Race>
|
|
||||||
@@ -4,62 +4,39 @@
|
|||||||
<RaceStartTime Start="${raceStartTime}" Postpone="False" />
|
<RaceStartTime Start="${raceStartTime}" Postpone="False" />
|
||||||
<RaceID>15082901</RaceID>
|
<RaceID>15082901</RaceID>
|
||||||
<RaceType>Fleet</RaceType>
|
<RaceType>Fleet</RaceType>
|
||||||
|
|
||||||
<Participants>
|
<Participants>
|
||||||
<#list boats as boat>
|
<#list boats as boat>
|
||||||
<Yacht SourceID="${boat.sourceId}"/>
|
<Yacht SourceID="${boat.sourceId}"/>
|
||||||
</#list>
|
</#list>
|
||||||
</Participants>
|
</Participants>
|
||||||
|
|
||||||
<Tokens>
|
<Tokens>
|
||||||
<#list tokens as token>
|
<#list tokens as token>
|
||||||
<Token TokenType="${token.tokenType}" TargetLat="${token.lat?c}" TargetLng="${token.lng?c}"/>
|
<Token TokenType="${token.tokenType}" TargetLat="${token.lat?c}" TargetLng="${token.lng?c}"/>
|
||||||
</#list>
|
</#list>
|
||||||
</Tokens>
|
</Tokens>
|
||||||
|
|
||||||
<Course>
|
<Course>
|
||||||
<CompoundMark CompoundMarkID="1" Name="Mark0">
|
<#list compoundMarks as compoundMark>
|
||||||
<Mark SeqID="1" Name="Start Line 1" TargetLat="57.670603" TargetLng="11.828262" SourceID="122" />
|
<CompoundMark CompoundMarkID="${compoundMark.id?c}" Name="${compoundMark.name}">
|
||||||
<Mark SeqID="2" Name="Start Line 2" TargetLat="57.669445" TargetLng="11.826413" SourceID="123" />
|
<#list compoundMark.marks as mark>
|
||||||
</CompoundMark>
|
<Mark SeqID="${mark.seqID?c}" Name="${mark.name}" TargetLat="${mark.lat?c}" TargetLng="${mark.lng?c}" SourceID="${mark.sourceID?c}" />
|
||||||
<CompoundMark CompoundMarkID="2" Name="Mark1">
|
</#list>
|
||||||
<Mark SeqID="1" Name="Mark1" TargetLat="57.6675700" TargetLng="11.8359880" SourceID="131" />
|
</CompoundMark>
|
||||||
</CompoundMark>
|
</#list>
|
||||||
<CompoundMark CompoundMarkID="3" Name="Mark2">
|
|
||||||
<Mark SeqID="1" Name="Lee Gate 1" TargetLat="57.6708220" TargetLng="11.8433900" SourceID="124" />
|
|
||||||
<Mark SeqID="2" Name="Lee Gate 2" TargetLat="57.671629" TargetLng="11.840951" SourceID="125" />
|
|
||||||
</CompoundMark>
|
|
||||||
<CompoundMark CompoundMarkID="4" Name="Mark3">
|
|
||||||
<Mark SeqID="1" Name="Wind Gate 1" TargetLat="57.664190" TargetLng="11.829576" SourceID="126" />
|
|
||||||
<Mark SeqID="2" Name="Wind Gate 2" TargetLat="57.665316" TargetLng="11.827184" SourceID="127" />
|
|
||||||
</CompoundMark>
|
|
||||||
<CompoundMark CompoundMarkID="5" Name="Mark4">
|
|
||||||
<Mark SeqID="1" Name="Finish Line 1" TargetLat="57.672350" TargetLng="11.842535" SourceID="128" />
|
|
||||||
<Mark SeqID="2" Name="Finish Line 2" TargetLat="57.6715240" TargetLng="11.8444950" SourceID="129" />
|
|
||||||
</CompoundMark>
|
|
||||||
</Course>
|
</Course>
|
||||||
|
|
||||||
<CompoundMarkSequence>
|
<CompoundMarkSequence>
|
||||||
<Corner SeqID="1" CompoundMarkID="1" Rounding="PS" ZoneSize="3" />
|
<#list roundings as corner>
|
||||||
<Corner SeqID="2" CompoundMarkID="2" Rounding="Port" ZoneSize="3" />
|
<Corner SeqID="${corner.seqID?c}" CompoundMarkID="${corner.compoundMarkID?c}" Rounding="${corner.rounding}" ZoneSize="${corner.zoneSize?c}" />
|
||||||
<Corner SeqID="3" CompoundMarkID="3" Rounding="SP" ZoneSize="3" />
|
</#list>
|
||||||
<Corner SeqID="4" CompoundMarkID="4" Rounding="PS" ZoneSize="3" />
|
|
||||||
<Corner SeqID="5" CompoundMarkID="3" Rounding="SP" ZoneSize="3" />
|
|
||||||
<Corner SeqID="6" CompoundMarkID="4" Rounding="PS" ZoneSize="3" />
|
|
||||||
<Corner SeqID="7" CompoundMarkID="3" Rounding="SP" ZoneSize="3" />
|
|
||||||
<Corner SeqID="8" CompoundMarkID="4" Rounding="PS" ZoneSize="3" />
|
|
||||||
<Corner SeqID="9" CompoundMarkID="3" Rounding="SP" ZoneSize="3" />
|
|
||||||
<Corner SeqID="10" CompoundMarkID="4" Rounding="PS" ZoneSize="3" />
|
|
||||||
<Corner SeqID="11" CompoundMarkID="5" Rounding="PS" ZoneSize="3" />
|
|
||||||
</CompoundMarkSequence>
|
</CompoundMarkSequence>
|
||||||
|
|
||||||
<CourseLimit>
|
<CourseLimit>
|
||||||
<Limit SeqID="1" Lat="57.6739450" Lon="11.8417100" />
|
<#list courseLimit as limit>
|
||||||
<Limit SeqID="2" Lat="57.6709520" Lon="11.8485010" />
|
<Limit SeqID="${limit.seqID?c}" Lat="${limit.lat?c}" Lon="${limit.lng?c}" />
|
||||||
<Limit SeqID="3" Lat="57.6690260" Lon="11.8472790" />
|
</#list>
|
||||||
<Limit SeqID="4" Lat="57.6693140" Lon="11.8457610" />
|
|
||||||
<Limit SeqID="5" Lat="57.6665370" Lon="11.8432910" />
|
|
||||||
<Limit SeqID="6" Lat="57.6641400" Lon="11.8385840" />
|
|
||||||
<Limit SeqID="7" Lat="57.6629430" Lon="11.8332030" />
|
|
||||||
<Limit SeqID="8" Lat="57.6629480" Lon="11.8249660" />
|
|
||||||
<Limit SeqID="9" Lat="57.6686890" Lon="11.8250920" />
|
|
||||||
<Limit SeqID="10" Lat="57.6692230" Lon="11.8231430" />
|
|
||||||
<Limit SeqID="11" Lat="57.6725370" Lon="11.8272480" />
|
|
||||||
<Limit SeqID="12" Lat="57.6708220" Lon="11.8321340" />
|
|
||||||
</CourseLimit>
|
</CourseLimit>
|
||||||
|
|
||||||
</Race>
|
</Race>
|
||||||
@@ -1,69 +1,185 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
|
<?import javafx.scene.text.*?>
|
||||||
|
<?import com.jfoenix.controls.*?>
|
||||||
|
<?import java.lang.*?>
|
||||||
|
<?import javafx.geometry.*?>
|
||||||
|
<?import javafx.scene.control.*?>
|
||||||
|
<?import javafx.scene.layout.*?>
|
||||||
<?import com.jfoenix.controls.JFXButton?>
|
<?import com.jfoenix.controls.JFXButton?>
|
||||||
|
<?import com.jfoenix.controls.JFXCheckBox?>
|
||||||
<?import com.jfoenix.controls.JFXDialogLayout?>
|
<?import com.jfoenix.controls.JFXDialogLayout?>
|
||||||
<?import com.jfoenix.controls.JFXSlider?>
|
<?import com.jfoenix.controls.JFXSlider?>
|
||||||
|
<?import com.jfoenix.controls.JFXTextArea?>
|
||||||
<?import com.jfoenix.controls.JFXTextField?>
|
<?import com.jfoenix.controls.JFXTextField?>
|
||||||
<?import java.lang.String?>
|
|
||||||
<?import javafx.geometry.Insets?>
|
<?import javafx.geometry.Insets?>
|
||||||
<?import javafx.scene.control.Label?>
|
<?import javafx.scene.control.Label?>
|
||||||
<?import javafx.scene.layout.ColumnConstraints?>
|
<?import javafx.scene.layout.ColumnConstraints?>
|
||||||
<?import javafx.scene.layout.GridPane?>
|
<?import javafx.scene.layout.GridPane?>
|
||||||
|
<?import javafx.scene.layout.Pane?>
|
||||||
<?import javafx.scene.layout.RowConstraints?>
|
<?import javafx.scene.layout.RowConstraints?>
|
||||||
<?import javafx.scene.layout.VBox?>
|
<?import javafx.scene.layout.VBox?>
|
||||||
<JFXDialogLayout maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefWidth="550.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="seng302.visualiser.controllers.dialogs.ServerCreationController">
|
<?import javafx.scene.layout.AnchorPane?>
|
||||||
<children>
|
|
||||||
<GridPane>
|
<JFXDialogLayout maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="600.0" prefWidth="1000.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="seng302.visualiser.controllers.dialogs.ServerCreationController">
|
||||||
<columnConstraints>
|
<children>
|
||||||
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
<GridPane>
|
||||||
</columnConstraints>
|
<children>
|
||||||
<rowConstraints>
|
<JFXButton fx:id="submitBtn" onMouseEntered="#playButtonHoverSound" prefHeight="55.0" prefWidth="250.0" text="SUBMIT" GridPane.halignment="CENTER" GridPane.rowIndex="2" GridPane.valignment="CENTER">
|
||||||
<RowConstraints maxHeight="90.0" minHeight="90.0" prefHeight="90.0" vgrow="SOMETIMES" />
|
<font>
|
||||||
<RowConstraints maxHeight="100.0" minHeight="100.0" prefHeight="100.0" vgrow="SOMETIMES" />
|
<Font name="System Bold" size="13.0" />
|
||||||
<RowConstraints maxHeight="100.0" minHeight="100.0" prefHeight="100.0" vgrow="SOMETIMES" />
|
</font></JFXButton>
|
||||||
<RowConstraints maxHeight="100.0" minHeight="100.0" prefHeight="100.0" vgrow="SOMETIMES" />
|
<GridPane GridPane.rowIndex="1">
|
||||||
</rowConstraints>
|
|
||||||
<children>
|
|
||||||
<Label fx:id="hostDialogHeader" text="HOST A GAME SERVER" GridPane.halignment="CENTER" GridPane.valignment="CENTER" />
|
|
||||||
<JFXButton fx:id="submitBtn" onMouseEntered="#playButtonHoverSound" prefHeight="55.0" prefWidth="250.0" text="SUBMIT" GridPane.halignment="CENTER" GridPane.rowIndex="3" GridPane.valignment="CENTER" />
|
|
||||||
<JFXTextField fx:id="serverName" promptText="SERVER NAME" GridPane.rowIndex="1">
|
|
||||||
<GridPane.margin>
|
|
||||||
<Insets left="30.0" right="30.0" />
|
|
||||||
</GridPane.margin></JFXTextField>
|
|
||||||
<GridPane fx:id="maxPlayersGridPane" GridPane.rowIndex="2">
|
|
||||||
<columnConstraints>
|
<columnConstraints>
|
||||||
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" percentWidth="30.0" prefWidth="100.0" />
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
||||||
<ColumnConstraints hgrow="SOMETIMES" minWidth="100.0" prefWidth="100.0" />
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
||||||
</columnConstraints>
|
</columnConstraints>
|
||||||
<rowConstraints>
|
<rowConstraints>
|
||||||
<RowConstraints minHeight="10.0" percentHeight="60.0" prefHeight="10.0" vgrow="SOMETIMES" />
|
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
||||||
<RowConstraints minHeight="10.0" percentHeight="40.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
|
||||||
</rowConstraints>
|
</rowConstraints>
|
||||||
<children>
|
<children>
|
||||||
<Label fx:id="maxPlayersLabel" text="20" GridPane.columnIndex="1" GridPane.halignment="CENTER" GridPane.rowIndex="1" GridPane.valignment="TOP">
|
<GridPane>
|
||||||
<GridPane.margin>
|
<columnConstraints>
|
||||||
<Insets right="30.0" />
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
||||||
</GridPane.margin></Label>
|
</columnConstraints>
|
||||||
<Label fx:id="maxPlayerPromptLabel" text="MAX PLAYERS" GridPane.halignment="LEFT" GridPane.valignment="BOTTOM">
|
<rowConstraints>
|
||||||
<GridPane.margin>
|
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
||||||
<Insets left="30.0" top="20.0" />
|
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
||||||
</GridPane.margin>
|
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
||||||
</Label>
|
</rowConstraints>
|
||||||
<VBox alignment="BOTTOM_CENTER" prefHeight="200.0" prefWidth="100.0" GridPane.columnIndex="1" GridPane.halignment="CENTER" GridPane.valignment="CENTER">
|
<children>
|
||||||
<children>
|
<JFXTextField fx:id="serverName" promptText="SERVER NAME">
|
||||||
<JFXSlider fx:id="maxPlayersSlider" blockIncrement="1.0" majorTickUnit="2.0" max="20.0" min="1.0" minorTickCount="1" snapToTicks="true" styleClass="maxPlayers" value="11.0" />
|
<padding>
|
||||||
</children>
|
<Insets left="15.0" right="15.0" />
|
||||||
<GridPane.margin>
|
</padding>
|
||||||
<Insets bottom="10.0" right="30.0" />
|
<GridPane.margin>
|
||||||
</GridPane.margin>
|
<Insets left="35.0" right="35.0" />
|
||||||
</VBox>
|
</GridPane.margin>
|
||||||
|
</JFXTextField>
|
||||||
|
<GridPane fx:id="maxPlayersGridPane" GridPane.rowIndex="1">
|
||||||
|
<children>
|
||||||
|
<Label fx:id="maxPlayersLabel" text="20" GridPane.columnIndex="1" GridPane.halignment="CENTER" GridPane.rowIndex="1" GridPane.valignment="TOP">
|
||||||
|
<GridPane.margin>
|
||||||
|
<Insets right="30.0" />
|
||||||
|
</GridPane.margin>
|
||||||
|
</Label>
|
||||||
|
<Label fx:id="maxPlayerPromptLabel" text="MAX PLAYERS" GridPane.halignment="LEFT" GridPane.valignment="BOTTOM">
|
||||||
|
<GridPane.margin>
|
||||||
|
<Insets left="30.0" top="20.0" />
|
||||||
|
</GridPane.margin>
|
||||||
|
</Label>
|
||||||
|
<VBox alignment="BOTTOM_CENTER" prefHeight="200.0" prefWidth="100.0" GridPane.columnIndex="1" GridPane.halignment="CENTER" GridPane.valignment="CENTER">
|
||||||
|
<children>
|
||||||
|
<JFXSlider fx:id="maxPlayersSlider" blockIncrement="1.0" majorTickUnit="2.0" max="20.0" min="1.0" minorTickCount="1" snapToTicks="true" styleClass="maxPlayers" value="11.0" />
|
||||||
|
</children>
|
||||||
|
<GridPane.margin>
|
||||||
|
<Insets bottom="10.0" right="30.0" />
|
||||||
|
</GridPane.margin>
|
||||||
|
</VBox>
|
||||||
|
</children>
|
||||||
|
<columnConstraints>
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" percentWidth="30.0" prefWidth="100.0" />
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="100.0" prefWidth="100.0" />
|
||||||
|
</columnConstraints>
|
||||||
|
<rowConstraints>
|
||||||
|
<RowConstraints minHeight="10.0" percentHeight="60.0" prefHeight="10.0" vgrow="SOMETIMES" />
|
||||||
|
<RowConstraints minHeight="10.0" percentHeight="40.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
||||||
|
</rowConstraints>
|
||||||
|
</GridPane>
|
||||||
|
<GridPane fx:id="maxPlayersGridPane1" GridPane.rowIndex="2">
|
||||||
|
<children>
|
||||||
|
<Label fx:id="legsSliderLabel" text="20" GridPane.columnIndex="1" GridPane.halignment="CENTER" GridPane.rowIndex="1" GridPane.valignment="TOP">
|
||||||
|
<GridPane.margin>
|
||||||
|
<Insets right="30.0" />
|
||||||
|
</GridPane.margin>
|
||||||
|
</Label>
|
||||||
|
<VBox alignment="BOTTOM_CENTER" prefHeight="200.0" prefWidth="100.0" GridPane.columnIndex="1" GridPane.halignment="CENTER" GridPane.valignment="CENTER">
|
||||||
|
<children>
|
||||||
|
<JFXSlider fx:id="legsSlider" blockIncrement="1.0" majorTickUnit="2.0" max="20.0" min="1.0" minorTickCount="1" snapToTicks="true" styleClass="maxPlayers" value="11.0" />
|
||||||
|
</children>
|
||||||
|
<GridPane.margin>
|
||||||
|
<Insets bottom="10.0" right="30.0" />
|
||||||
|
</GridPane.margin>
|
||||||
|
</VBox>
|
||||||
|
<GridPane>
|
||||||
|
<children>
|
||||||
|
<Label alignment="CENTER" text="NUMBER OF" GridPane.halignment="CENTER" />
|
||||||
|
<Label alignment="CENTER" text="REPEATING LEGS" GridPane.halignment="CENTER" GridPane.rowIndex="1" />
|
||||||
|
</children>
|
||||||
|
<columnConstraints>
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
||||||
|
</columnConstraints>
|
||||||
|
<rowConstraints>
|
||||||
|
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
||||||
|
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
||||||
|
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
||||||
|
</rowConstraints>
|
||||||
|
</GridPane>
|
||||||
|
<JFXCheckBox fx:id="pickupsCheckBox" text="Enable Pickups" GridPane.rowIndex="1">
|
||||||
|
<GridPane.margin>
|
||||||
|
<Insets left="5.0" />
|
||||||
|
</GridPane.margin>
|
||||||
|
</JFXCheckBox>
|
||||||
|
</children>
|
||||||
|
<columnConstraints>
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" percentWidth="30.0" prefWidth="100.0" />
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="100.0" prefWidth="100.0" />
|
||||||
|
</columnConstraints>
|
||||||
|
<rowConstraints>
|
||||||
|
<RowConstraints minHeight="10.0" percentHeight="60.0" prefHeight="10.0" vgrow="SOMETIMES" />
|
||||||
|
<RowConstraints minHeight="10.0" percentHeight="40.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
||||||
|
</rowConstraints>
|
||||||
|
</GridPane>
|
||||||
|
</children>
|
||||||
|
</GridPane>
|
||||||
|
<GridPane GridPane.columnIndex="1">
|
||||||
|
<columnConstraints>
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" maxWidth="35.0" prefWidth="35.0" />
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" maxWidth="35.0" minWidth="35.0" prefWidth="35.0" />
|
||||||
|
</columnConstraints>
|
||||||
|
<rowConstraints>
|
||||||
|
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
||||||
|
</rowConstraints>
|
||||||
|
<children>
|
||||||
|
<JFXButton fx:id="lastMapButton" maxHeight="300.0" minHeight="300.0" prefHeight="300.0" prefWidth="35.0" style="-fx-border-color: lightgrey;" text="<" textFill="#5b5b5b" GridPane.halignment="CENTER" GridPane.valignment="CENTER">
|
||||||
|
<font>
|
||||||
|
<Font name="System Bold" size="13.0" />
|
||||||
|
</font></JFXButton>
|
||||||
|
<JFXButton fx:id="nextMapButton" maxHeight="300.0" minHeight="300.0" minWidth="35.0" prefHeight="300.0" style="-fx-border-color: lightgrey;" text=">" textFill="#5b5b5b" GridPane.columnIndex="2" GridPane.valignment="CENTER">
|
||||||
|
<font>
|
||||||
|
<Font name="System Bold" size="13.0" />
|
||||||
|
</font></JFXButton>
|
||||||
|
<GridPane GridPane.columnIndex="1">
|
||||||
|
<columnConstraints>
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
||||||
|
</columnConstraints>
|
||||||
|
<rowConstraints>
|
||||||
|
<RowConstraints maxHeight="25.0" minHeight="25.0" prefHeight="25.0" vgrow="SOMETIMES" />
|
||||||
|
<RowConstraints maxHeight="342.0" minHeight="10.0" prefHeight="336.0" vgrow="SOMETIMES" />
|
||||||
|
</rowConstraints>
|
||||||
|
<children>
|
||||||
|
<Label fx:id="mapNameLabel" text="MAP NAME" GridPane.halignment="CENTER" />
|
||||||
|
<AnchorPane fx:id="mapHolder" prefHeight="200.0" prefWidth="200.0" GridPane.rowIndex="1" />
|
||||||
|
</children>
|
||||||
|
</GridPane>
|
||||||
|
</children>
|
||||||
|
</GridPane>
|
||||||
</children>
|
</children>
|
||||||
</GridPane>
|
</GridPane>
|
||||||
</children>
|
<Label fx:id="hostDialogHeader" text="HOST A GAME SERVER" GridPane.halignment="CENTER">
|
||||||
</GridPane>
|
<font>
|
||||||
</children>
|
<Font size="20.0" />
|
||||||
<stylesheets>
|
</font></Label>
|
||||||
<String fx:value="/css/dialogs/ServerCreation.css" />
|
</children>
|
||||||
<String fx:value="/css/Master.css"/>
|
<columnConstraints>
|
||||||
</stylesheets>
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
||||||
|
</columnConstraints>
|
||||||
|
<rowConstraints>
|
||||||
|
<RowConstraints maxHeight="100.0" minHeight="100.0" prefHeight="100.0" vgrow="SOMETIMES" />
|
||||||
|
<RowConstraints maxHeight="511.0" minHeight="90.0" prefHeight="370.0" vgrow="SOMETIMES" />
|
||||||
|
<RowConstraints maxHeight="102.0" minHeight="100.0" prefHeight="100.0" vgrow="SOMETIMES" />
|
||||||
|
</rowConstraints>
|
||||||
|
</GridPane>
|
||||||
|
</children>
|
||||||
</JFXDialogLayout>
|
</JFXDialogLayout>
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
package seng302.model;
|
package seng302.model;
|
||||||
|
|
||||||
|
import static seng302.gameServer.GameState.checkCollision;
|
||||||
|
|
||||||
import org.junit.Assert;
|
import org.junit.Assert;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import seng302.gameServer.GameState;
|
import seng302.gameServer.GameState;
|
||||||
import seng302.utilities.GeoUtility;
|
import seng302.utilities.GeoUtility;
|
||||||
|
|
||||||
import static seng302.gameServer.GameState.checkCollision;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test update function in Yacht.java to make sure yacht will not be collide each other within 25.0
|
* Test update function in Yacht.java to make sure yacht will not be collide each other within 25.0
|
||||||
* meters.
|
* meters.
|
||||||
@@ -24,7 +24,7 @@ public class UpdateYachtTest {
|
|||||||
new GameState("");
|
new GameState("");
|
||||||
GameState.addYacht(1, yacht1);
|
GameState.addYacht(1, yacht1);
|
||||||
GameState.addYacht(2, yacht2);
|
GameState.addYacht(2, yacht2);
|
||||||
PolarTable.parsePolarFile(getClass().getResourceAsStream("/config/acc_polars.csv"));
|
PolarTable.parsePolarFile(getClass().getResourceAsStream("/server_config/acc_polars.csv"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|||||||