Coverage Summary for Class: ClientView (it.polimi.ingsw.Client.CLI)
Class |
Class, %
|
Method, %
|
Branch, %
|
Line, %
|
ClientView |
0%
(0/1)
|
0%
(0/23)
|
0%
(0/16)
|
0%
(0/62)
|
1 package it.polimi.ingsw.Client.CLI;
2
3 import it.polimi.ingsw.Misc.Symbols;
4 import it.polimi.ingsw.Model.*;
5 import it.polimi.ingsw.Model.Enums.GameMode;
6 import it.polimi.ingsw.Model.Enums.PawnColour;
7
8 /**
9 * This class contains the status of Client inside the Server and is responsible for printing UI elements in to the CLI
10 */
11 public class ClientView {
12
13 /**
14 * Used to contain the game
15 */
16 private Model model;
17 /**
18 * Used to verify whether the client is connected to the Server
19 */
20 private boolean isConnected = false;
21 /**
22 * Used to verify whether the client is logged to the Server
23 */
24 private boolean isLogged = false;
25 /**
26 * Used to verify whether the client has entered a lobby
27 */
28 private boolean isInLobby = false;
29 /**
30 * Used to verify whether the Game has started
31 */
32 private boolean gameStarted = false;
33 /**
34 * Used to verify whether the Game has ended
35 */
36 private boolean gameEnded = false;
37 /**
38 * Used to contain lobby's admin's nickname
39 */
40 private String admin;
41 /**
42 * Used to contain client's nickname
43 */
44 private String Nickname;
45
46 /**
47 * Get lobby's admin's nickname
48 *
49 * @return admin's nickname
50 */
51 public String getAdmin() {
52 return admin;
53 }
54
55 /**
56 * Set Game's admin's nickname
57 *
58 * @param admin String containing admin's nickname
59 */
60 public void setAdmin(String admin) {
61 this.admin = admin;
62 }
63
64 /**
65 * Get current game
66 *
67 * @return gameBoard representing the game
68 */
69 public Model getModel() {
70 return this.model;
71 }
72
73 /**
74 * Get whether the game has started or not
75 *
76 * @return true if the game has started, false otherwise
77 */
78 public boolean getGameStarted() {
79 return this.gameStarted;
80 }
81
82 /**
83 * Set Game's status (started or not)
84 *
85 * @param started boolean representing whether the game has started or not
86 */
87 public void setGameStarted(boolean started) {
88 this.gameStarted = started;
89 }
90
91 /**
92 * Get whether the game has ended or not
93 *
94 * @return true if the game has ended, false otherwise
95 */
96 public boolean isGameEnded() {
97 return gameEnded;
98 }
99
100 /**
101 * Set Game's status (ended or not)
102 *
103 * @param gameEnded boolean representing whether the game has ended or not
104 */
105 public void setGameEnded(boolean gameEnded) {
106 this.gameEnded = gameEnded;
107 }
108
109 /**
110 * Get whether the client has connected to a lobby or not
111 *
112 * @return true if the client has connected to a lobby, false otherwise
113 */
114 public boolean isInLobby() {
115 return this.isInLobby;
116 }
117
118 /**
119 * Get whether the client has connected to the Server or not
120 *
121 * @return true if the client has connected to the Server, false otherwise
122 */
123 public boolean isConnected() {
124 return isConnected;
125 }
126
127 /**
128 * Set Client's connection status(connected or not)
129 *
130 * @param connected boolean representing whether the client has connected or not to the server
131 */
132 public void setConnected(boolean connected) {
133 isConnected = connected;
134 }
135
136 /**
137 * Get whether the client has logged to the Server or not
138 *
139 * @return true if the client has logged to the Server, false otherwise
140 */
141 public boolean isLogged() {
142 return isLogged;
143 }
144
145 /**
146 * Set Client's logged status inside the server (logged or not)
147 *
148 * @param logged boolean representing whether the client is logged or not
149 */
150 public void setLogged(boolean logged) {
151 isLogged = logged;
152 }
153
154 /**
155 * Prints all gameBoard's element that the user is allowed to see (Islands, clouds, playerBoards and characterCards)
156 */
157 public void printView() {
158 printIslandField();
159 System.out.println("\n");
160 printGameBoards();
161 printCharacterCard();
162 }
163
164 /**
165 * Support method responsible for printing all field's components (islands and clouds)
166 */
167 private void printIslandField() {
168 //print GameBoard
169 System.out.println(GameUI.draw(this.model));
170 }
171
172 /**
173 * Support method responsible for printing all players' PlayerBoards
174 */
175 private void printGameBoards() {
176 System.out.println(Symbols.BACKGROUND + "PLAYERBOARDS");
177 //simple loop to print playerBoard and its Owner's nickname
178 for (PlayerBoard pb : this.model.getMutablePlayerBoards()) {
179 if (this.getNickname().equals(pb.getNickname())) {
180 System.out.print("Your Playerboard:");
181 } else {
182 System.out.print(pb.getNickname() + "'s Playerboard");
183 }
184 if (model.getMutableTurnOrder().getMutableSelectedCard(pb).isPresent()) {
185 System.out.print(" played assistantCard with priority:" + model.getMutableTurnOrder().getMutableSelectedCard(pb).get().getPriority());
186 }
187 //print PlayerBoard
188 System.out.println(PlayerBoardUI.drawPlayerBoard(pb, this.model));
189 System.out.println("\n");
190 }
191 //print current and next player
192 System.out.println(InfoUI.draw(this.model, this.Nickname));
193 }
194
195 /**
196 * Support method responsible for printing the 3 characterCards
197 */
198 private void printCharacterCard() {
199 //Print only if the gameMode is Advanced
200 if (this.model.getGameMode() == GameMode.SIMPLE) return;
201 System.out.println("Available CharacterCards:");
202 for (CharacterCard characterCard : this.model.getCharacterCards()) {
203 //print CharacterCard's number and cost
204 System.out.print("CharacterCard number:" + characterCard.getId() + " cost:" + characterCard.getCost());
205 //only if the CharacterCard has a stateful effect then print it's content
206 if (characterCard instanceof StatefulEffect) {
207 System.out.print("\t");
208 // this index is used to identify students position on cards that hold any
209 int indexOfStudentOnCard = 0;
210 for (Object o : ((StatefulEffect) characterCard).getState()) {
211 switch (o) {
212 //if the content is a NoEntryTile then print 'X'
213 case NoEntryTile ignored -> System.out.print(" X ");
214 //if the content is a pawn then print it's colour
215 case PawnColour pawnColour -> {
216 System.out.print(" " + Symbols.colorizeBackgroundStudent(pawnColour, String.valueOf(indexOfStudentOnCard)));
217 indexOfStudentOnCard++;
218 }
219 case default -> System.out.println("Card's object not valid");
220 }
221 }
222 }
223 System.out.println("\n");
224 }
225 }
226
227 /**
228 * get Client's nickname
229 *
230 * @return String containing the nickname
231 */
232 public String getNickname() {
233 return Nickname;
234 }
235
236 /**
237 * Set Client's nickname
238 *
239 * @param nickname String containing Client's nickname
240 */
241 public void setNickname(String nickname) {
242 this.Nickname = nickname;
243 }
244
245 public void disconnectViewFromServer() {
246 disconnectView();
247 setConnected(false);
248 }
249
250 /**
251 * Method to disconnect the view from lobby (when the game ends or is closed for any reason)
252 */
253 public void disconnectView() {
254 setIsInLobby(false);
255 setAdmin(null);
256 setGame(null);
257 setGameStarted(false);
258 }
259
260 /**
261 * Set Client's status inside a lobby (connected to a lobby or not)
262 *
263 * @param inLobby boolean representing whether the client is in lobby or not
264 */
265 public void setIsInLobby(boolean inLobby) {
266 this.isInLobby = inLobby;
267 }
268
269 /**
270 * Set game's model
271 *
272 * @param game GameBoard containing game's model
273 */
274 public void setGame(Model game) {
275 this.model = game;
276 }
277
278
279 }
280
281