Coverage Summary for Class: GameUI (it.polimi.ingsw.Client.CLI)
| Class | Class, % | Method, % | Branch, % | Line, % |
|---|---|---|---|---|
| GameUI | 0% (0/1) | 0% (0/2) | 0% (0/4) | 0% (0/13) |
1 package it.polimi.ingsw.Client.CLI; 2 3 import it.polimi.ingsw.Misc.Symbols; 4 import it.polimi.ingsw.Model.Model; 5 6 /** 7 * GameUI is a graphical representation (as a String data structure) 8 * useful to print {@link it.polimi.ingsw.Client.CLI.CloudUI} 9 * and multiple {@link it.polimi.ingsw.Client.CLI.IslandUI} components 10 * next to each other on the console. 11 */ 12 public class GameUI { 13 14 /** 15 * The console will be populated with all the island groups in the island field followed by the clouds on 16 * the same multiline block. 17 * 18 * @param ctx is a reference to the model used to access the {@link it.polimi.ingsw.Model.IslandField} to print 19 * the {@link it.polimi.ingsw.Client.CLI.IslandUI} and passed to the 20 * {@link it.polimi.ingsw.Client.CLI.CloudUI} 21 * @return a composed view of islands and clouds 22 */ 23 public static String draw(Model ctx) { 24 // The background colour helpful to enhance contrast between black towers and the default black background console 25 StringBuilder screen = new StringBuilder(Symbols.BACKGROUND); 26 27 String clouds = CloudUI.draw(ctx); // draws the cloud component which will be stripped and printed line by line 28 int groupsSize = ctx.getMutableIslandField().getMutableGroups().size(); 29 // The number of rows of the UI component depends on the number of island groups. 30 // If there are less island groups than the number of CloudUI's lines, padding should be added in the form of 31 // empty rows to replace the IslandUI component. 32 // The constant '8' is the minimum number of lines/IslandUIs needed to correctly display the cloud component. 33 int rows = Math.max(groupsSize, 8); 34 for (int i = 0; i < rows; i++) { // on each row will be printed an IslandUI and one line of CloudUI 35 // on every line prints the island group but if there are none to print, it fills the space with 36 // an empty line 37 if (i < ctx.getMutableIslandField().getMutableGroups().size()) { 38 String currentIsland = IslandUI.draw(ctx.getMutableIslandField().getMutableGroups().get(i), ctx); 39 screen.append(currentIsland).append("\t".repeat(2)); // '\t' is used for horizontal separation between islands and clouds 40 } else screen.append(IslandUI.drawEmptyRow(ctx)).append("\t".repeat(2)); 41 42 // This will print just one line of the clouds UI component 43 screen.append(clouds, 0, clouds.indexOf('\n') + 1); 44 clouds = clouds.substring(clouds.indexOf('\n') + 1); 45 } 46 47 return screen.toString(); 48 } 49 }