package visualiser.Controllers; import javafx.fxml.FXML; import javafx.scene.control.Button; import javafx.scene.control.TextField; import javafx.scene.image.Image; import javafx.scene.image.ImageView; import javafx.scene.layout.AnchorPane; import javafx.scene.layout.GridPane; import javafx.stage.Stage; import javafx.scene.media.AudioClip; import mock.app.Event; import org.xml.sax.SAXException; import mock.exceptions.EventConstructionException; import shared.exceptions.InvalidBoatDataException; import shared.exceptions.InvalidRaceDataException; import shared.exceptions.InvalidRegattaDataException; import shared.exceptions.XMLReaderException; import javax.xml.bind.JAXBException; import javax.xml.parsers.ParserConfigurationException; import java.io.IOException; import java.net.Socket; import java.net.URL; import java.util.ArrayList; import java.util.Arrays; import java.util.ResourceBundle; import java.util.logging.Level; import java.util.logging.Logger; /** * Controller for Hosting a game. */ public class HostController extends Controller { @FXML TextField gameNameField; @FXML TextField hostNameField; @FXML AnchorPane hostWrapper; @FXML Button previousButton; @FXML Button nextButton; @FXML ImageView mapImage; private Event game; private ArrayList listOfMaps; private int currentMapIndex = 0; @Override public void initialize(URL location, ResourceBundle resources){ Image ac35Map = new Image(getClass().getClassLoader().getResourceAsStream("images/AC35_Racecourse_MAP.png")); Image oMap = new Image(getClass().getClassLoader().getResourceAsStream("images/oMapLayout.png")); Image iMap = new Image(getClass().getClassLoader().getResourceAsStream("images/iMapLayout.png")); Image mMap = new Image(getClass().getClassLoader().getResourceAsStream("images/mMapLayout.png")); listOfMaps = new ArrayList(Arrays.asList(ac35Map, oMap, iMap, mMap)); mapImage.setImage(listOfMaps.get(currentMapIndex)); } /** * Hosts a game * @throws IOException if socket cannot be connected to */ public void hostGamePressed() throws IOException{ try { this.game = new Event(false, currentMapIndex); connectSocket("localhost", 4942); } catch (EventConstructionException e) { Logger.getGlobal().log(Level.SEVERE, "Could not create Event.", e); throw new RuntimeException(e); } } public void endEvent() throws IOException { game.endEvent(); } /** * Connect to a socket * @param address address of the server * @param port port that the server is run off */ public void connectSocket(String address, int port) { try{ Socket socket = new Socket(address, port); hostWrapper.setVisible(false); parent.enterLobby(socket, true); } catch (IOException e) { /* Never reached */ } } public AnchorPane startWrapper(){ return hostWrapper; } /** * Hosts a game. */ public void hostGame(){ mapImage.fitWidthProperty().bind(((Stage) mapImage.getScene().getWindow()).widthProperty().multiply(0.6)); hostWrapper.setVisible(true); } /** * Menu button pressed. Prompt alert then return to menu */ public void menuBtnPressed(){ AudioClip sound = new AudioClip(this.getClass().getResource("/visualiser/sounds/buttonpress.wav").toExternalForm()); sound.play(); hostWrapper.setVisible(false); parent.enterTitle(); } public void nextImage(){ increaseIndex(); mapImage.setImage(listOfMaps.get(currentMapIndex)); } public void previousImage(){ decreaseIndex(); mapImage.setImage(listOfMaps.get(currentMapIndex)); } private void increaseIndex(){ currentMapIndex = (currentMapIndex + 1)%listOfMaps.size(); } private void decreaseIndex(){ currentMapIndex = ((((currentMapIndex - 1)%listOfMaps.size())+listOfMaps.size())%listOfMaps.size()); } public void setGameType(int gameType){ this.currentMapIndex = gameType; } public int getGameType(){ return this.currentMapIndex; } }