Merge branch 'splitIntoTwoModules' of https://eng-git.canterbury.ac.nz/seng302-2017/team-7 into splitIntoTwoModules

This commit is contained in:
Fan-Wu Yang
2017-05-04 13:07:13 +12:00
15 changed files with 133 additions and 28 deletions
@@ -6,6 +6,7 @@ import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.TextField;
import javafx.scene.layout.AnchorPane;
import seng302.RaceConnection;
@@ -31,16 +32,21 @@ public class ConnectionController extends Controller {
@FXML
private Button connectButton;
private List<RaceConnection> connections;
@FXML
private TextField urlField;
@FXML
private TextField portField;
private ObservableList<RaceConnection> connections;
@Override
public void initialize(URL location, ResourceBundle resources) {
// TODO - replace with config file
connections = new ArrayList<>();
connections = FXCollections.observableArrayList();
connections.add(new RaceConnection("livedata.americascup.com", 4941));
connections.add(new RaceConnection("localhost", 4942));
connectionTable.setItems(FXCollections.observableArrayList(connections));
connectionTable.setItems(connections);
hostnameColumn.setCellValueFactory(cellData -> cellData.getValue().hostnameProperty());
statusColumn.setCellValueFactory(cellData -> cellData.getValue().statusProperty());
@@ -60,6 +66,10 @@ public class ConnectionController extends Controller {
}
}
public AnchorPane startWrapper(){
return connectionWrapper;
}
/**
* Connects to host currently selected in table. Button enabled only if host is ready.
*/
@@ -71,4 +81,19 @@ public class ConnectionController extends Controller {
parent.enterLobby(socket);
} catch (IOException e) { /* Never reached */ }
}
/**
* adds a new connection
*/
public void addConnection(){
String hostName = urlField.getText();
String portString = portField.getText();
try{
int port = Integer.parseInt(portString);
connections.add(new RaceConnection(hostName, port));
}catch(NumberFormatException e){
System.err.println("Port number entered is not a number");
}
}
}
@@ -43,5 +43,10 @@ public class MainController extends Controller {
AnchorPane.setBottomAnchor(startController.startWrapper(), 0.0);
AnchorPane.setLeftAnchor(startController.startWrapper(), 0.0);
AnchorPane.setRightAnchor(startController.startWrapper(), 0.0);
AnchorPane.setTopAnchor(connectionController.startWrapper(), 0.0);
AnchorPane.setBottomAnchor(connectionController.startWrapper(), 0.0);
AnchorPane.setLeftAnchor(connectionController.startWrapper(), 0.0);
AnchorPane.setRightAnchor(connectionController.startWrapper(), 0.0);
}
}
@@ -6,8 +6,10 @@ import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.scene.Node;
import javafx.scene.control.*;
import javafx.scene.layout.GridPane;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
import seng302.Mock.StreamedRace;
import seng302.Model.*;
@@ -129,7 +131,7 @@ public class RaceController extends Controller {
raceMap.drawRaceMap();
raceMap.setVisible(true);
canvasBase.getChildren().add(raceMap);
canvasBase.getChildren().add(0, raceMap);
race.setVisible(true);
//Initialize save annotation array, fps listener, and annotation listeners
@@ -22,10 +22,8 @@ import java.net.Socket;
import java.net.URL;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.List;
import java.util.Observable;
import java.util.Observer;
import java.util.ResourceBundle;
import java.time.format.DateTimeFormatter;
import java.util.*;
/**
* Created by esa46 on 6/04/17.
@@ -35,6 +33,7 @@ public class StartController extends Controller implements Observer {
@FXML private GridPane start;
@FXML private AnchorPane startWrapper;
@FXML private Label raceTitleLabel;
@FXML private Label raceStartLabel;
@FXML private TableView<Boat> boatNameTable;
@FXML private TableColumn<Boat, String> boatNameColumn;
@@ -43,7 +42,7 @@ public class StartController extends Controller implements Observer {
@FXML private Label timer;
@FXML private int PRERACE_TIME = 10;
@FXML Button fifteenMinButton;
//@FXML Button fifteenMinButton;
private RaceClock raceClock;
@@ -56,12 +55,13 @@ public class StartController extends Controller implements Observer {
* Begins the race with a scale factor of 1
*/
public void startRaceNoScaling() {
startRace(1);
//startRace(1);
countdownTimer(1);
}
private void startRace(int raceScale){
fifteenMinButton.setDisable(true);
countdownTimer(raceScale);
//fifteenMinButton.setDisable(true);
//countdownTimer(raceScale);
}
@Override
@@ -103,15 +103,15 @@ public class StartController extends Controller implements Observer {
long currentTime = System.currentTimeMillis();
long startTime = currentTime + (PRERACE_TIME/scaleFactor);
DateFormat timerFormat = new SimpleDateFormat("'Race Clock:' -HH:mm:ss");
@Override
public void handle(long arg0) {
timeLeft = startTime - currentTime;
if (timeLeft <= 0) {
if (visualiserInput.getRaceStatus().getRaceStatus()==2) {
updateTime("Race is starting...");
stop();
parent.beginRace(visualiserInput);
startWrapper.setVisible(false);
start.setVisible(false);
} else {
updateTime(timerFormat.format(currentTime));
@@ -122,7 +122,7 @@ public class StartController extends Controller implements Observer {
}.start();
}
protected void setRaceClock() {
private void setRaceClock() {
raceClock = new RaceClock(raceData.getZonedDateTime());
timeZoneTime.textProperty().bind(raceClock.timeStringProperty());
@@ -138,6 +138,20 @@ public class StartController extends Controller implements Observer {
}.start();
}
private void setStartingTime() {
String dateFormat = "'Starting time:' HH:mm dd/MM/YYYY";
Platform.runLater(()-> {
long utcTime = visualiserInput.getRaceStatus().getExpectedStartTime();
raceStartLabel.setText(DateTimeFormatter.ofPattern(dateFormat).format(raceClock.getLocalTime(utcTime)));
});
}
private void setCurrentTime() {
Platform.runLater(()->
raceClock.setTime(raceClock.getLocalTime(visualiserInput.getRaceStatus().getCurrentTime()))
);
}
@Override
public void update(Observable o, Object arg) {
if(o instanceof StreamedCourse) {
@@ -148,7 +162,12 @@ public class StartController extends Controller implements Observer {
Platform.runLater(() -> raceTitleLabel.setText(((StreamedCourse)o).getRegattaName()));
}
if (((StreamedCourse) o).hasReadCourse()) {
Platform.runLater(() -> setRaceClock());
Platform.runLater(() -> {
setRaceClock();
while(visualiserInput.getRaceStatus() == null);
setStartingTime();
setCurrentTime();
});
}
}
}
@@ -166,4 +185,5 @@ public class StartController extends Controller implements Observer {
e.printStackTrace();
}
}
}
@@ -58,6 +58,10 @@ public class StreamedRace extends Race {
int legNumber = boatStatusMessage.getLegNumber();
if (legNumber >= 1 && legNumber < legs.size()) {
boat.setCurrentLeg(legs.get(legNumber));
}
if (boatStatus == BoatStatus.DNF) {
boat.setDnf(true);
} else if (boatStatus == BoatStatus.FINISHED || legNumber > raceData.getLegs().size()) {
@@ -84,7 +88,7 @@ public class StreamedRace extends Race {
double lon = boatLocationMessage.getLongitudeDouble();
boat.setCurrentPosition(new GPSCoordinate(lat, lon));
boat.setHeading(boatLocationMessage.getHeadingDegrees());
boat.setVelocity(boatLocationMessage.getBoatSpeed() * MMPS_TO_KN);
boat.setVelocity(boatLocationMessage.getBoatSOG() * MMPS_TO_KN);
}
}
@@ -247,7 +247,7 @@ public abstract class Race implements Runnable {
for(Boat boat: startingBoats) {
if(boat != null) {
boat.setPosition(Integer.toString(startingBoats.indexOf(boat) + 1));
if (boat.getCurrentLeg().getName().equals("DNF") || boat.getCurrentLeg().getLegNumber() == 0)
if (boat.isDnf() || !boat.isStarted() || boat.getCurrentLeg().getLegNumber() < 0)
boat.setPosition("-");
}
}