Coverage Summary for Class: CloudUI (it.polimi.ingsw.Client.CLI)
Class |
Class, %
|
Method, %
|
Branch, %
|
Line, %
|
CloudUI |
0%
(0/1)
|
0%
(0/2)
|
0%
(0/31)
|
0%
(0/56)
|
1 package it.polimi.ingsw.Client.CLI;
2
3 import it.polimi.ingsw.Misc.Symbols;
4 import it.polimi.ingsw.Model.Cloud;
5 import it.polimi.ingsw.Model.Enums.PawnColour;
6 import it.polimi.ingsw.Model.Model;
7
8 /**
9 * CloudUI is a graphical representation (as a String data structure) useful to print multiple cloud components
10 * on the console.
11 * <br>
12 * The internal information of the model element is described in {@link it.polimi.ingsw.Model.Cloud}.
13 */
14 public class CloudUI {
15
16 /**
17 * The {@link it.polimi.ingsw.Model.Cloud} will be represented with a title and its related id,
18 * and the contained students if present.
19 * According to the number of players, it will create a different layout of the clouds on the console.
20 *
21 * @param ctx is a reference to the model used to access the clouds' information.
22 * @return the representation of the clouds group.
23 */
24 public static String draw(Model ctx) {
25 String clouds = "";
26 switch (ctx.getClouds().size()) {
27 case 2 -> { // two clouds will be print on top of each other
28 StringBuilder twoClouds = new StringBuilder();
29 for (Cloud c : ctx.getClouds()) {
30 StringBuilder students = new StringBuilder();
31
32 // Prints one line for every student on the cloud, and aligns it centrally
33 for (PawnColour p : c.getContents()) {
34 students.append(Symbols.colorizeStudent(p, "\t" + Symbols.PAWN));
35 students.append("\t\n");
36 }
37 // Handles the empty cloud case
38 if (students.toString().equals("")) {
39 students.append("\t\t\n".repeat(3));
40 }
41 // Appends the current cloud in the loop.
42 // Adds the current cloud title on a line.
43 // Adds the content on the cloud on separate lines.
44 twoClouds.append("\tCloud ").append(c.getId()).append("\n").append(students);
45 }
46 clouds = twoClouds.toString();
47 }
48
49 case 3 -> { // three clouds will be print: the first pair next to each other, the third under the first
50 StringBuilder threeClouds = new StringBuilder();
51 threeClouds.append("Cloud ").append(ctx.getClouds().get(0).getId()).append("\t\t" // divider between clouds
52 ).append("Cloud ").append(ctx.getClouds().get(1).getId()).append("\n"); // title of cloud 2
53 for (int i = 0; i < 3; i++) { // prints the content of the I and II clouds next to each other if present
54 threeClouds.append(ctx.getClouds().get(0).getContents().size() > 0 ?
55 Symbols.colorizeStudent(ctx.getClouds().get(0).getContents().get(i), "\t" +
56 Symbols.PAWN + "\t\t") : "\t\t\t");
57 threeClouds.append(ctx.getClouds().get(1).getContents().size() > 0 ?
58 Symbols.colorizeStudent(ctx.getClouds().get(1).getContents().get(i), "\t" +
59 Symbols.PAWN) + "\n" : "\t\t\n");
60 }
61 threeClouds.append("Cloud ").append(ctx.getClouds().get(2).getId()).append("\n"); // title of cloud 3
62 for (int i = 0; i < 3; i++) { // prints the content of the III cloud if present
63 threeClouds.append(ctx.getClouds().get(2).getContents().size() > 0 ?
64 Symbols.colorizeStudent(ctx.getClouds().get(2).getContents().get(i), "\t"
65 + Symbols.PAWN) + "\n" :
66 "\t\t\n");
67 }
68 clouds = threeClouds.toString();
69 }
70
71 case 4 -> { // four clouds will be print as a grid
72 StringBuilder fourClouds = new StringBuilder();
73 fourClouds.append("Cloud ").append(ctx.getClouds().get(0).getId()).append("\t\t" // separation between clouds
74 ).append("Cloud ").append(ctx.getClouds().get(1).getId()).append("\n"); // title of cloud 2
75 for (int i = 0; i < 3; i++) { // prints the content of the I and II clouds next to each other if present
76 fourClouds.append(ctx.getClouds().get(0).getContents().size() > 0 ?
77 Symbols.colorizeStudent(ctx.getClouds().get(0).getContents().get(i), "\t"
78 + Symbols.PAWN + "\t\t") : "\t\t\t");
79 fourClouds.append(ctx.getClouds().get(1).getContents().size() > 0 ?
80 Symbols.colorizeStudent(ctx.getClouds().get(1).getContents().get(i), "\t"
81 + Symbols.PAWN) + "\n" : "\t\t\n");
82 }
83 fourClouds.append("Cloud ").append(ctx.getClouds().get(2).getId()).append("\t\t" // separation between clouds
84 ).append("Cloud ").append(ctx.getClouds().get(3).getId()).append("\n"); // title of cloud 4
85 for (int i = 0; i < 3; i++) { // prints the content of the III and IV clouds next to each other if present
86 fourClouds.append(ctx.getClouds().get(2).getContents().size() > 0 ?
87 Symbols.colorizeStudent(ctx.getClouds().get(2).getContents().get(i), "\t"
88 + Symbols.PAWN + "\t\t") : "\t\t\t");
89 fourClouds.append(ctx.getClouds().get(3).getContents().size() > 0 ?
90 Symbols.colorizeStudent(ctx.getClouds().get(3).getContents().get(i), "\t"
91 + Symbols.PAWN) + "\n" :
92 "\t\t\n");
93 }
94 clouds = fourClouds.toString();
95 }
96 }
97 // Multiple newlines are used in conjunction with IslandUI component.
98 // If there are more islands than CloudUI component's lines we still want to print the islands stacked
99 // in GameUI.
100 return clouds + "\n\n\n";
101 }
102 }