[ all classes ]
[ it.polimi.ingsw.view.GUI ]
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 }