@ -20,6 +20,7 @@ import javafx.scene.layout.StackPane;
import javafx.util.Callback ;
import network.Messages.Enums.RaceStatusEnum ;
import shared.model.Leg ;
import visualiser.app.App ;
import visualiser.gameController.ControllerClient ;
import visualiser.gameController.Keys.ControlKey ;
import visualiser.gameController.Keys.KeyFactory ;
@ -28,6 +29,7 @@ import visualiser.network.ServerConnection;
import java.io.IOException ;
import java.net.URL ;
import java.util.Optional ;
import java.util.ResourceBundle ;
import java.util.logging.Level ;
import java.util.logging.Logger ;
@ -52,7 +54,7 @@ public class RaceController extends Controller {
private ControllerClient controllerClient ;
private boolean isHost ;
/ * *
* The canvas that draws the race .
@ -123,16 +125,34 @@ public class RaceController extends Controller {
Logger . getGlobal ( ) . log ( Level . WARNING , "RaceController was interrupted on thread: " + Thread . currentThread ( ) + "while sending: " + controlKey , e ) ;
}
}
if ( event . getCode ( ) = = KeyCode . ESCAPE ) {
race . setVisible ( false ) ;
if ( event . getCode ( ) = = KeyCode . ESCAPE ) {
try {
parent . endEvent ( ) ;
if ( isHost ) {
Alert alert = new Alert ( Alert . AlertType . CONFIRMATION ) ;
alert . setTitle ( "Exit Race" ) ;
alert . setContentText ( "Do you wish to quit the race? You are the host" ) ;
Optional < ButtonType > result = alert . showAndWait ( ) ;
if ( result . get ( ) = = ButtonType . OK ) {
parent . endEvent ( ) ;
race . setVisible ( false ) ;
App . app . loadStart ( App . getStage ( ) ) ;
}
} else {
Alert alert = new Alert ( Alert . AlertType . CONFIRMATION ) ;
alert . setTitle ( "Exit Race" ) ;
alert . setContentText ( "Do you wish to quit the race?" ) ;
Optional < ButtonType > result = alert . showAndWait ( ) ;
if ( result . get ( ) = = ButtonType . OK ) {
race . setVisible ( false ) ;
App . app . loadStart ( App . getStage ( ) ) ;
}
}
} catch ( IOException e ) {
e . printStackTrace ( ) ;
}
parent . enterTitle ( ) ;
}
} ) ;
} ) ;
}
@ -371,10 +391,11 @@ public class RaceController extends Controller {
* @param visualiserRace Object modelling the race .
* @param controllerClient Socket Client that manipulates the controller .
* /
public void startRace ( VisualiserRaceEvent visualiserRace , ControllerClient controllerClient ) {
public void startRace ( VisualiserRaceEvent visualiserRace , ControllerClient controllerClient , Boolean isHost ) {
this . visualiserRace = visualiserRace ;
this . controllerClient = controllerClient ;
this . isHost = isHost ;
initialiseRace ( ) ;
@ -438,7 +459,12 @@ public class RaceController extends Controller {
//Return to main screen if we lose connection.
if ( ! visualiserRace . getServerConnection ( ) . isAlive ( ) ) {
race . setVisible ( false ) ;
parent . enterTitle ( ) ;
//parent.enterTitle();
try {
App . app . loadStart ( App . getStage ( ) ) ;
} catch ( IOException e ) {
e . printStackTrace ( ) ;
}
//TODO currently this doesn't work correctly - the title screen remains visible after clicking join game
//TODO we should display an error to the user
//TODO also need to "reset" any state (race, connections, etc...).