Coverage Summary for Class: AppGUI (it.polimi.ingsw.view.GUI)

Class Method, % Line, %
AppGUI 0% (0/ 17) 0% (0/ 128)
AppGUI$1 0% (0/ 2) 0% (0/ 3)
AppGUI$2 0% (0/ 2) 0% (0/ 3)
total 0% (0/ 21) 0% (0/ 134)


1 package it.polimi.ingsw.view.GUI; 2  3 import it.polimi.ingsw.utils.Observer; 4 import it.polimi.ingsw.utils.model.Command; 5 import it.polimi.ingsw.view.model.Player; 6 import it.polimi.ingsw.view.socket.AppInterface; 7 import it.polimi.ingsw.view.socket.Parser; 8 import javafx.application.Application; 9 import javafx.application.Platform; 10 import javafx.beans.value.ChangeListener; 11 import javafx.beans.value.ObservableValue; 12 import javafx.fxml.FXMLLoader; 13 import javafx.geometry.Pos; 14 import javafx.scene.Cursor; 15 import javafx.scene.ImageCursor; 16 import javafx.scene.Scene; 17 import javafx.scene.control.Button; 18 import javafx.scene.control.Label; 19 import javafx.scene.image.Image; 20 import javafx.scene.layout.HBox; 21 import javafx.scene.layout.VBox; 22 import javafx.stage.Modality; 23 import javafx.stage.Stage; 24  25 import java.util.ArrayList; 26 import java.util.stream.Collectors; 27  28 public class AppGUI extends Application implements Runnable, Observer<ArrayList<Command>>, AppInterface { 29  /** 30  * Container 31  */ 32  private Stage window; 33  34  /** 35  * Parser for messages 36  */ 37  private Parser parser; 38  39  /** 40  * First page controller 41  */ 42  private MainController controller; 43  44  /** 45  * Scene 46  */ 47  private Scene scene; 48  49  /** 50  * Game Phase 51  */ 52  private String gamePhase = null; 53  54  /** 55  * View Controller 56  */ 57  private Controller viewController; 58  59  /** 60  * Mouse 61  */ 62  private ImageCursor Mouse = new ImageCursor(new Image("GraphicSrc/mouse.png"), 0, 0); 63  64  65  public void main(String[] args) { 66  launch(args); 67  } 68  69  /** 70  * Run client's GUI 71  */ 72  @Override 73  public void run() { 74  launch(); 75  } 76  77  /** 78  * Start GUI 79  * 80  * @param primaryStage Client's window 81  * @throws Exception 82  */ 83  @Override 84  public void start(Stage primaryStage) throws Exception { 85  controller = new MainController(); 86  parser = new Parser(); 87  parser.addObservers(this); 88  controller.set(parser, this); 89  90  InitialPageController.setController(controller); 91  Board.setController(controller); 92  ChooseGod.setController(controller); 93  94  window = primaryStage; 95  window.setTitle("Santorini"); 96  97  FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/InitialPage.fxml")); 98  99  if (scene == null) { 100  scene = new Scene(fxmlLoader.load()); 101  } else { 102  scene.setRoot(fxmlLoader.load()); 103  } 104  105  scene.setOnMouseEntered(e -> { 106  scene.setCursor(Mouse); 107  }); 108  scene.setOnMouseExited(e -> { 109  scene.setCursor(Cursor.DEFAULT); 110  }); 111  112  viewController = fxmlLoader.getController(); 113  114  115  window.setScene(scene); 116  117  window.heightProperty().addListener(new ChangeListener<Number>() { 118  @Override 119  public void changed(ObservableValue<? extends Number> observableValue, Number oldValue, Number newValue) { 120  viewController.setDimension(window.getWidth(), newValue.doubleValue() - 20); 121  122  } 123  }); 124  window.widthProperty().addListener(new ChangeListener<Number>() { 125  @Override 126  public void changed(ObservableValue<? extends Number> observableValue, Number oldValue, Number newValue) { 127  viewController.setDimension(newValue.doubleValue(), window.getHeight()); 128  129  } 130  }); 131  window.setOnCloseRequest(e -> { 132  controller.closeConnection(); 133  }); 134  // window.setResizable(false); 135  window.setMinHeight(380); 136  window.setMinWidth(640); 137  window.setHeight(740); 138  window.setWidth(1280); 139  viewController.setDimension(1280, 720); 140  viewController.changePage(true); 141  window.show(); 142  } 143  144  /** 145  * Change the scene 146  */ 147  public void changeScene() { 148  if (parser.getGamePhase().equals("END")) { 149  // reStart(); 150  viewController.reSet(); 151  controller.closeConnection(); 152  } else if (parser.getGamePhase().equals("SET_GOD_LIST") || parser.getGamePhase().equals("CHOOSE_GOD") 153  || parser.getGamePhase().equals("START_PLAYER")) { 154  Platform.runLater(() -> { 155  try { 156  FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/ChooseGod.fxml")); 157  scene.setRoot(fxmlLoader.load()); 158  viewController = fxmlLoader.getController(); 159  viewController.changePage(true); 160  viewController.setDimension(window.getWidth(), window.getHeight() - 20); 161  } catch (Exception e) { 162  163  } 164  }); 165  } else { 166  Platform.runLater(() -> { 167  try { 168  FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/Board.fxml")); 169  scene.setRoot(fxmlLoader.load()); 170  scene.getStylesheets().add("board.css"); 171  viewController = fxmlLoader.getController(); 172  viewController.changePage(true); 173  viewController.setDimension(window.getWidth(), window.getHeight() - 20); 174  } catch (Exception e) { 175  176  } 177  }); 178  } 179  180  181  } 182  183  /** 184  * Restart 185  */ 186  public void reStart() { 187  Platform.runLater(() -> { 188  Stage stage = new Stage(); 189  stage.initModality(Modality.APPLICATION_MODAL); 190  VBox vBox = new VBox(); 191  vBox.setSpacing(20); 192  vBox.setPrefHeight(100); 193  vBox.setPrefWidth(300); 194  vBox.setAlignment(Pos.CENTER); 195  HBox hBox = new HBox(); 196  hBox.setSpacing(20); 197  hBox.setAlignment(Pos.CENTER); 198  vBox.setStyle("-fx-background-image: url('GraphicSrc/clouds.png');"+"-fx-background-size: cover"); 199  200  Button quit = new Button("Quit"); 201  quit.setOnAction(e -> { 202  controller.closeConnection(); 203  window.close(); 204  stage.close(); 205  }); 206  Button again = new Button("Main Page"); 207  again.setOnAction(e -> { 208  controller.closeConnection(); 209  stage.close(); 210  gamePhase = null; 211  viewController.changePage(false); 212  try { 213  start(window); 214  } catch (Exception e1) { 215  } 216  }); 217  218  Button back = new Button("Back"); 219  back.setOnAction(e -> { 220  stage.close(); 221  }); 222  223  hBox.getChildren().addAll(again, quit, back); 224  Label label; 225  try { 226  Player player = (Player) parser.getPlayers().stream() 227  .filter(e -> e.getUsername().equals(controller.getPlayer())).collect(Collectors.toList()) 228  .get(0); 229  if (player.getStatus().equals("WIN")) { 230  label = new Label("Game Ended, You WIN!"); 231  } else if (player.getStatus().equals("LOSE")) { 232  label = new Label("Game Ended, You LOSE!"); 233  } else { 234  label = new Label("Game Ended."); 235  } 236  } catch (Exception e1) { 237  label = new Label("Game Ended."); 238  } 239  vBox.getChildren().addAll(label, hBox); 240  stage.setScene(new Scene(vBox, 300, 100)); 241  stage.setAlwaysOnTop(true); 242  stage.show(); 243  }); 244  } 245  246  /** 247  * Update messages and/or commands 248  * 249  * @param message message to be updated 250  */ 251  @Override 252  public void update(ArrayList<Command> message) { 253  if (message == null || message.equals("")) 254  return; 255  if (gamePhase == null || (!gamePhase.equals(parser.getGamePhase()) && gamePhase.equals("START_PLAYER"))) { 256  viewController.changePage(false); 257  } else if (parser.getGamePhase().equals("END")) { 258  viewController.reSet(); 259  reStart(); 260  } 261  viewController.reSet(); 262  gamePhase = parser.getGamePhase(); 263  } 264  265  /** 266  * Used for disconnection 267  */ 268  @Override 269  public void onDisconnection() { 270  reStart(); 271  } 272 }