FIx: Fixed Coverage Screenshots And htmlRepot.
|
Before Width: | Height: | Size: 242 KiB After Width: | Height: | Size: 245 KiB |
|
Before Width: | Height: | Size: 241 KiB After Width: | Height: | Size: 239 KiB |
|
Before Width: | Height: | Size: 89 B After Width: | Height: | Size: 89 B |
|
Before Width: | Height: | Size: 91 B After Width: | Height: | Size: 91 B |
@@ -52,26 +52,26 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
45.4%
|
||||
45.1%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(333/734)
|
||||
(330/731)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
43.2%
|
||||
42.8%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(664/1536)
|
||||
(660/1542)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
36%
|
||||
35.6%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(1326/3684)
|
||||
(1308/3671)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -125,7 +125,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/149)
|
||||
(0/144)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -133,7 +133,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/394)
|
||||
(0/391)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -157,18 +157,18 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
69.2%
|
||||
70%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(18/26)
|
||||
(21/30)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
65.6%
|
||||
66.2%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(42/64)
|
||||
(47/71)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -184,26 +184,26 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
77.6%
|
||||
78.5%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(97/125)
|
||||
(95/121)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
73.5%
|
||||
72.8%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(349/475)
|
||||
(343/471)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
82%
|
||||
82.1%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(547/667)
|
||||
(541/659)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -219,10 +219,10 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
95%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(20/20)
|
||||
(19/20)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -235,10 +235,10 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
98.1%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(58/58)
|
||||
(52/53)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -282,10 +282,10 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
94.7%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(38/38)
|
||||
(36/38)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -298,10 +298,10 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
98.4%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(129/129)
|
||||
(127/129)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -320,7 +320,7 @@ Current scope: all classes
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(15/15)
|
||||
(12/12)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat"/>
|
||||
@@ -329,7 +329,7 @@ Current scope: all classes
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(29/29)
|
||||
(26/26)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -345,10 +345,10 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
94.3%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(49/49)
|
||||
(50/53)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -361,10 +361,10 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
97.2%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(108/108)
|
||||
(103/106)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -383,7 +383,7 @@ Current scope: all classes
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(24/24)
|
||||
(28/28)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -399,7 +399,7 @@ Current scope: all classes
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(91/91)
|
||||
(93/93)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -458,10 +458,10 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
88.2%
|
||||
89.2%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(67/76)
|
||||
(66/74)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -469,7 +469,7 @@ Current scope: all classes
|
||||
96.5%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(111/115)
|
||||
(110/114)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -523,7 +523,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/41)
|
||||
(0/40)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -539,7 +539,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/175)
|
||||
(0/162)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -593,7 +593,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/23)
|
||||
(0/22)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -601,7 +601,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/36)
|
||||
(0/38)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -609,7 +609,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/113)
|
||||
(0/105)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -636,7 +636,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/26)
|
||||
(0/24)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -671,7 +671,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/50)
|
||||
(0/52)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -679,7 +679,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/166)
|
||||
(0/164)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -698,7 +698,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/130)
|
||||
(0/132)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -706,7 +706,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/291)
|
||||
(0/302)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -714,7 +714,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/1000)
|
||||
(0/1014)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -730,10 +730,10 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
53.3%
|
||||
58.5%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(24/45)
|
||||
(24/41)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -746,10 +746,10 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
38.7%
|
||||
36.3%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(84/217)
|
||||
(82/226)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -775,7 +775,7 @@ Current scope: all classes
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -52,26 +52,26 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
45.4%
|
||||
45.1%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(333/734)
|
||||
(330/731)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
43.2%
|
||||
42.8%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(664/1536)
|
||||
(660/1542)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
36%
|
||||
35.6%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(1326/3684)
|
||||
(1308/3671)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -145,7 +145,7 @@ Current scope: all classes
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(15/15)
|
||||
(12/12)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat"/>
|
||||
@@ -154,7 +154,7 @@ Current scope: all classes
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(29/29)
|
||||
(26/26)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -181,7 +181,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/149)
|
||||
(0/144)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -189,7 +189,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/394)
|
||||
(0/391)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -243,7 +243,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/41)
|
||||
(0/40)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -259,7 +259,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/175)
|
||||
(0/162)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -313,7 +313,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/23)
|
||||
(0/22)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -321,7 +321,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/36)
|
||||
(0/38)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -329,7 +329,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/113)
|
||||
(0/105)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -356,7 +356,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/26)
|
||||
(0/24)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -391,7 +391,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/50)
|
||||
(0/52)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -399,7 +399,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/166)
|
||||
(0/164)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -418,7 +418,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/130)
|
||||
(0/132)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -426,7 +426,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/291)
|
||||
(0/302)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -434,7 +434,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/1000)
|
||||
(0/1014)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -450,10 +450,10 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
53.3%
|
||||
58.5%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(24/45)
|
||||
(24/41)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -466,10 +466,10 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
38.7%
|
||||
36.3%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(84/217)
|
||||
(82/226)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -493,18 +493,18 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
69.2%
|
||||
70%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(18/26)
|
||||
(21/30)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
65.6%
|
||||
66.2%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(42/64)
|
||||
(47/71)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -520,26 +520,26 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
77.6%
|
||||
78.5%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(97/125)
|
||||
(95/121)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
73.5%
|
||||
72.8%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(349/475)
|
||||
(343/471)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
82%
|
||||
82.1%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(547/667)
|
||||
(541/659)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -563,10 +563,10 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
88.2%
|
||||
89.2%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(67/76)
|
||||
(66/74)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -574,7 +574,7 @@ Current scope: all classes
|
||||
96.5%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(111/115)
|
||||
(110/114)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -590,10 +590,10 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
94.7%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(38/38)
|
||||
(36/38)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -606,10 +606,10 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
98.4%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(129/129)
|
||||
(127/129)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -660,10 +660,10 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
95%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(20/20)
|
||||
(19/20)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -676,10 +676,10 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
98.1%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(58/58)
|
||||
(52/53)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -695,10 +695,10 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
94.3%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(49/49)
|
||||
(50/53)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -711,10 +711,10 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
97.2%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(108/108)
|
||||
(103/106)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -733,7 +733,7 @@ Current scope: all classes
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(24/24)
|
||||
(28/28)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -749,7 +749,7 @@ Current scope: all classes
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(91/91)
|
||||
(93/93)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -775,7 +775,7 @@ Current scope: all classes
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -52,26 +52,26 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
45.4%
|
||||
45.1%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(333/734)
|
||||
(330/731)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
43.2%
|
||||
42.8%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(664/1536)
|
||||
(660/1542)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
36%
|
||||
35.6%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(1326/3684)
|
||||
(1308/3671)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -117,7 +117,7 @@ Current scope: all classes
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(24/24)
|
||||
(28/28)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -133,7 +133,7 @@ Current scope: all classes
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(91/91)
|
||||
(93/93)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -149,10 +149,10 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
94.3%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(49/49)
|
||||
(50/53)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -165,10 +165,10 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
97.2%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(108/108)
|
||||
(103/106)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -184,10 +184,10 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
95%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(20/20)
|
||||
(19/20)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -200,10 +200,10 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
98.1%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(58/58)
|
||||
(52/53)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -254,10 +254,10 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
94.7%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(38/38)
|
||||
(36/38)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -270,10 +270,10 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
98.4%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(129/129)
|
||||
(127/129)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -297,10 +297,10 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
88.2%
|
||||
89.2%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(67/76)
|
||||
(66/74)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -308,7 +308,7 @@ Current scope: all classes
|
||||
96.5%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(111/115)
|
||||
(110/114)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -324,26 +324,26 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
77.6%
|
||||
78.5%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(97/125)
|
||||
(95/121)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
73.5%
|
||||
72.8%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(349/475)
|
||||
(343/471)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
82%
|
||||
82.1%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(547/667)
|
||||
(541/659)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -367,18 +367,18 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
69.2%
|
||||
70%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(18/26)
|
||||
(21/30)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
65.6%
|
||||
66.2%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(42/64)
|
||||
(47/71)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -394,10 +394,10 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
53.3%
|
||||
58.5%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(24/45)
|
||||
(24/41)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -410,10 +410,10 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
38.7%
|
||||
36.3%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(84/217)
|
||||
(82/226)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -432,7 +432,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/130)
|
||||
(0/132)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -440,7 +440,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/291)
|
||||
(0/302)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -448,7 +448,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/1000)
|
||||
(0/1014)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -475,7 +475,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/50)
|
||||
(0/52)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -483,7 +483,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/166)
|
||||
(0/164)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -510,7 +510,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/26)
|
||||
(0/24)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -537,7 +537,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/23)
|
||||
(0/22)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -545,7 +545,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/36)
|
||||
(0/38)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -553,7 +553,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/113)
|
||||
(0/105)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -607,7 +607,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/41)
|
||||
(0/40)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -623,7 +623,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/175)
|
||||
(0/162)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -685,7 +685,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/149)
|
||||
(0/144)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -693,7 +693,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/394)
|
||||
(0/391)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -712,7 +712,7 @@ Current scope: all classes
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(15/15)
|
||||
(12/12)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat"/>
|
||||
@@ -721,7 +721,7 @@ Current scope: all classes
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(29/29)
|
||||
(26/26)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -775,7 +775,7 @@ Current scope: all classes
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -52,26 +52,26 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
45.4%
|
||||
45.1%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(333/734)
|
||||
(330/731)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
43.2%
|
||||
42.8%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(664/1536)
|
||||
(660/1542)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
36%
|
||||
35.6%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(1326/3684)
|
||||
(1308/3671)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -125,7 +125,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/149)
|
||||
(0/144)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -133,7 +133,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/394)
|
||||
(0/391)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -187,7 +187,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/41)
|
||||
(0/40)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -203,7 +203,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/175)
|
||||
(0/162)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -257,7 +257,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/23)
|
||||
(0/22)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -265,7 +265,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/36)
|
||||
(0/38)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -273,7 +273,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/113)
|
||||
(0/105)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -300,7 +300,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/26)
|
||||
(0/24)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -335,7 +335,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/50)
|
||||
(0/52)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -343,7 +343,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/166)
|
||||
(0/164)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -362,7 +362,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/130)
|
||||
(0/132)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -370,7 +370,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/291)
|
||||
(0/302)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -378,7 +378,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/1000)
|
||||
(0/1014)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -402,18 +402,18 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
69.2%
|
||||
70%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(18/26)
|
||||
(21/30)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
65.6%
|
||||
66.2%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(42/64)
|
||||
(47/71)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -429,10 +429,10 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
53.3%
|
||||
58.5%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(24/45)
|
||||
(24/41)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -445,10 +445,10 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
38.7%
|
||||
36.3%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(84/217)
|
||||
(82/226)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -464,26 +464,26 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
77.6%
|
||||
78.5%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(97/125)
|
||||
(95/121)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
73.5%
|
||||
72.8%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(349/475)
|
||||
(343/471)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
82%
|
||||
82.1%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(547/667)
|
||||
(541/659)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -499,10 +499,10 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
95%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(20/20)
|
||||
(19/20)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -515,10 +515,10 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
98.1%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(58/58)
|
||||
(52/53)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -562,10 +562,10 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
94.7%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(38/38)
|
||||
(36/38)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -578,10 +578,10 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
98.4%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(129/129)
|
||||
(127/129)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -600,7 +600,7 @@ Current scope: all classes
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(15/15)
|
||||
(12/12)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat"/>
|
||||
@@ -609,7 +609,7 @@ Current scope: all classes
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(29/29)
|
||||
(26/26)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -625,10 +625,10 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
94.3%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(49/49)
|
||||
(50/53)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -641,10 +641,10 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
97.2%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(108/108)
|
||||
(103/106)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -663,7 +663,7 @@ Current scope: all classes
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(24/24)
|
||||
(28/28)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -679,7 +679,7 @@ Current scope: all classes
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(91/91)
|
||||
(93/93)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -738,10 +738,10 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
88.2%
|
||||
89.2%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(67/76)
|
||||
(66/74)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -749,7 +749,7 @@ Current scope: all classes
|
||||
96.5%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(111/115)
|
||||
(110/114)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -775,7 +775,7 @@ Current scope: all classes
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -52,26 +52,26 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
45.4%
|
||||
45.1%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(333/734)
|
||||
(330/731)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
43.2%
|
||||
42.8%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(664/1536)
|
||||
(660/1542)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
36%
|
||||
35.6%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(1326/3684)
|
||||
(1308/3671)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -122,10 +122,10 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
88.2%
|
||||
89.2%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(67/76)
|
||||
(66/74)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -133,7 +133,7 @@ Current scope: all classes
|
||||
96.5%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(111/115)
|
||||
(110/114)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -187,7 +187,7 @@ Current scope: all classes
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(24/24)
|
||||
(28/28)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -203,7 +203,7 @@ Current scope: all classes
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(91/91)
|
||||
(93/93)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -219,10 +219,10 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
94.3%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(49/49)
|
||||
(50/53)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -235,10 +235,10 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
97.2%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(108/108)
|
||||
(103/106)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -257,7 +257,7 @@ Current scope: all classes
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(15/15)
|
||||
(12/12)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat"/>
|
||||
@@ -266,7 +266,7 @@ Current scope: all classes
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(29/29)
|
||||
(26/26)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -282,10 +282,10 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
94.7%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(38/38)
|
||||
(36/38)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -298,10 +298,10 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
98.4%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(129/129)
|
||||
(127/129)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -345,10 +345,10 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
95%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(20/20)
|
||||
(19/20)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -361,10 +361,10 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
98.1%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(58/58)
|
||||
(52/53)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -380,26 +380,26 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
77.6%
|
||||
78.5%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(97/125)
|
||||
(95/121)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
73.5%
|
||||
72.8%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(349/475)
|
||||
(343/471)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
82%
|
||||
82.1%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(547/667)
|
||||
(541/659)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -415,10 +415,10 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
53.3%
|
||||
58.5%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(24/45)
|
||||
(24/41)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -431,10 +431,10 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
38.7%
|
||||
36.3%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(84/217)
|
||||
(82/226)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -458,18 +458,18 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
69.2%
|
||||
70%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(18/26)
|
||||
(21/30)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
65.6%
|
||||
66.2%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(42/64)
|
||||
(47/71)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -488,7 +488,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/130)
|
||||
(0/132)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -496,7 +496,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/291)
|
||||
(0/302)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -504,7 +504,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/1000)
|
||||
(0/1014)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -531,7 +531,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/50)
|
||||
(0/52)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -539,7 +539,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/166)
|
||||
(0/164)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -566,7 +566,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/26)
|
||||
(0/24)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -593,7 +593,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/23)
|
||||
(0/22)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -601,7 +601,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/36)
|
||||
(0/38)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -609,7 +609,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/113)
|
||||
(0/105)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -663,7 +663,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/41)
|
||||
(0/40)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -679,7 +679,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/175)
|
||||
(0/162)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -741,7 +741,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/149)
|
||||
(0/144)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -749,7 +749,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/394)
|
||||
(0/391)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -775,7 +775,7 @@ Current scope: all classes
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -52,26 +52,26 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
45.4%
|
||||
45.1%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(333/734)
|
||||
(330/731)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
43.2%
|
||||
42.8%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(664/1536)
|
||||
(660/1542)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
36%
|
||||
35.6%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(1326/3684)
|
||||
(1308/3671)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -125,7 +125,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/149)
|
||||
(0/144)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -133,7 +133,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/394)
|
||||
(0/391)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -187,7 +187,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/41)
|
||||
(0/40)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -203,7 +203,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/175)
|
||||
(0/162)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -257,7 +257,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/23)
|
||||
(0/22)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -265,7 +265,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/36)
|
||||
(0/38)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -273,7 +273,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/113)
|
||||
(0/105)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -300,7 +300,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/26)
|
||||
(0/24)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -335,7 +335,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/50)
|
||||
(0/52)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -343,7 +343,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/166)
|
||||
(0/164)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -362,7 +362,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/130)
|
||||
(0/132)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -370,7 +370,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/291)
|
||||
(0/302)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -378,7 +378,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/1000)
|
||||
(0/1014)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -394,10 +394,10 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
53.3%
|
||||
58.5%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(24/45)
|
||||
(24/41)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -410,10 +410,10 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
38.7%
|
||||
36.3%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(84/217)
|
||||
(82/226)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -437,18 +437,18 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
69.2%
|
||||
70%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(18/26)
|
||||
(21/30)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
65.6%
|
||||
66.2%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(42/64)
|
||||
(47/71)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -464,26 +464,26 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
77.6%
|
||||
78.5%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(97/125)
|
||||
(95/121)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
73.5%
|
||||
72.8%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(349/475)
|
||||
(343/471)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
82%
|
||||
82.1%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(547/667)
|
||||
(541/659)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -542,10 +542,10 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
88.2%
|
||||
89.2%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(67/76)
|
||||
(66/74)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -553,7 +553,42 @@ Current scope: all classes
|
||||
96.5%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(111/115)
|
||||
(110/114)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name"><a href="ns-8/index_SORT_BY_LINE.html">it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters</a></td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(6/6)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
94.3%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(50/53)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(40/40)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
97.2%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(103/106)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -569,10 +604,10 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
95%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(20/20)
|
||||
(19/20)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -583,12 +618,47 @@ Current scope: all classes
|
||||
(25/25)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
98.1%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(52/53)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name"><a href="ns-6/index_SORT_BY_LINE.html">it.polimi.ingsw.gc14.Model.Cards.Building.Effects</a></td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(58/58)
|
||||
(7/7)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
94.7%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(36/38)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
92%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(46/50)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
98.4%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(127/129)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -618,41 +688,6 @@ Current scope: all classes
|
||||
<span class="absValue">
|
||||
(7/7)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name"><a href="ns-6/index_SORT_BY_LINE.html">it.polimi.ingsw.gc14.Model.Cards.Building.Effects</a></td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(7/7)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(38/38)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
92%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(46/50)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(129/129)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@@ -670,7 +705,7 @@ Current scope: all classes
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(15/15)
|
||||
(12/12)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat"/>
|
||||
@@ -679,42 +714,7 @@ Current scope: all classes
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(29/29)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name"><a href="ns-8/index_SORT_BY_LINE.html">it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters</a></td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(6/6)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(49/49)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(40/40)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(108/108)
|
||||
(26/26)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -733,7 +733,7 @@ Current scope: all classes
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(24/24)
|
||||
(28/28)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -749,7 +749,7 @@ Current scope: all classes
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(91/91)
|
||||
(93/93)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -775,7 +775,7 @@ Current scope: all classes
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -52,26 +52,26 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
45.4%
|
||||
45.1%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(333/734)
|
||||
(330/731)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
43.2%
|
||||
42.8%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(664/1536)
|
||||
(660/1542)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
36%
|
||||
35.6%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(1326/3684)
|
||||
(1308/3671)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -117,7 +117,7 @@ Current scope: all classes
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(24/24)
|
||||
(28/28)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -133,42 +133,7 @@ Current scope: all classes
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(91/91)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name"><a href="ns-8/index_SORT_BY_LINE_DESC.html">it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters</a></td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(6/6)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(49/49)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(40/40)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(108/108)
|
||||
(93/93)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -187,7 +152,7 @@ Current scope: all classes
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(15/15)
|
||||
(12/12)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat"/>
|
||||
@@ -196,42 +161,7 @@ Current scope: all classes
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(29/29)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name"><a href="ns-6/index_SORT_BY_LINE_DESC.html">it.polimi.ingsw.gc14.Model.Cards.Building.Effects</a></td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(7/7)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(38/38)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
92%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(46/50)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(129/129)
|
||||
(26/26)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -261,6 +191,41 @@ Current scope: all classes
|
||||
<span class="absValue">
|
||||
(7/7)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name"><a href="ns-6/index_SORT_BY_LINE_DESC.html">it.polimi.ingsw.gc14.Model.Cards.Building.Effects</a></td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(7/7)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
94.7%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(36/38)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
92%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(46/50)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
98.4%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(127/129)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@@ -275,10 +240,10 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
95%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(20/20)
|
||||
(19/20)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -289,12 +254,47 @@ Current scope: all classes
|
||||
(25/25)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
98.1%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(52/53)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name"><a href="ns-8/index_SORT_BY_LINE_DESC.html">it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters</a></td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(58/58)
|
||||
(6/6)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
94.3%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(50/53)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(40/40)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
97.2%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(103/106)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -318,10 +318,10 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
88.2%
|
||||
89.2%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(67/76)
|
||||
(66/74)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -329,7 +329,7 @@ Current scope: all classes
|
||||
96.5%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(111/115)
|
||||
(110/114)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -380,26 +380,26 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
77.6%
|
||||
78.5%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(97/125)
|
||||
(95/121)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
73.5%
|
||||
72.8%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(349/475)
|
||||
(343/471)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
82%
|
||||
82.1%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(547/667)
|
||||
(541/659)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -423,18 +423,18 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
69.2%
|
||||
70%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(18/26)
|
||||
(21/30)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
65.6%
|
||||
66.2%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(42/64)
|
||||
(47/71)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -450,10 +450,10 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
53.3%
|
||||
58.5%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(24/45)
|
||||
(24/41)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -466,10 +466,10 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
38.7%
|
||||
36.3%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(84/217)
|
||||
(82/226)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -488,7 +488,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/130)
|
||||
(0/132)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -496,7 +496,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/291)
|
||||
(0/302)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -504,7 +504,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/1000)
|
||||
(0/1014)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -531,7 +531,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/50)
|
||||
(0/52)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -539,7 +539,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/166)
|
||||
(0/164)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -566,7 +566,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/26)
|
||||
(0/24)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -593,7 +593,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/23)
|
||||
(0/22)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -601,7 +601,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/36)
|
||||
(0/38)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -609,7 +609,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/113)
|
||||
(0/105)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -663,7 +663,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/41)
|
||||
(0/40)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -679,7 +679,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/175)
|
||||
(0/162)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -741,7 +741,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/149)
|
||||
(0/144)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -749,7 +749,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/394)
|
||||
(0/391)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -775,7 +775,7 @@ Current scope: all classes
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -52,26 +52,26 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
45.4%
|
||||
45.1%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(333/734)
|
||||
(330/731)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
43.2%
|
||||
42.8%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(664/1536)
|
||||
(660/1542)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
36%
|
||||
35.6%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(1326/3684)
|
||||
(1308/3671)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -125,7 +125,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/149)
|
||||
(0/144)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -133,7 +133,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/394)
|
||||
(0/391)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -187,7 +187,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/41)
|
||||
(0/40)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -203,7 +203,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/175)
|
||||
(0/162)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -257,7 +257,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/23)
|
||||
(0/22)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -265,7 +265,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/36)
|
||||
(0/38)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -273,7 +273,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/113)
|
||||
(0/105)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -300,7 +300,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/26)
|
||||
(0/24)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -335,7 +335,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/50)
|
||||
(0/52)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -343,7 +343,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/166)
|
||||
(0/164)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -362,7 +362,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/130)
|
||||
(0/132)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -370,7 +370,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/291)
|
||||
(0/302)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -378,7 +378,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/1000)
|
||||
(0/1014)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -402,18 +402,18 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
69.2%
|
||||
70%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(18/26)
|
||||
(21/30)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
65.6%
|
||||
66.2%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(42/64)
|
||||
(47/71)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -429,10 +429,10 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
53.3%
|
||||
58.5%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(24/45)
|
||||
(24/41)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -445,10 +445,10 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
38.7%
|
||||
36.3%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(84/217)
|
||||
(82/226)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -464,26 +464,26 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
77.6%
|
||||
78.5%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(97/125)
|
||||
(95/121)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
73.5%
|
||||
72.8%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(349/475)
|
||||
(343/471)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
82%
|
||||
82.1%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(547/667)
|
||||
(541/659)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -520,6 +520,76 @@ Current scope: all classes
|
||||
<span class="absValue">
|
||||
(120/136)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name"><a href="ns-8/index_SORT_BY_METHOD.html">it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters</a></td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(6/6)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
94.3%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(50/53)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(40/40)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
97.2%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(103/106)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name"><a href="ns-6/index_SORT_BY_METHOD.html">it.polimi.ingsw.gc14.Model.Cards.Building.Effects</a></td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(7/7)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
94.7%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(36/38)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
92%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(46/50)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
98.4%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(127/129)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@@ -534,10 +604,10 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
95%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(20/20)
|
||||
(19/20)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -550,10 +620,10 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
98.1%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(58/58)
|
||||
(52/53)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -583,41 +653,6 @@ Current scope: all classes
|
||||
<span class="absValue">
|
||||
(7/7)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name"><a href="ns-6/index_SORT_BY_METHOD.html">it.polimi.ingsw.gc14.Model.Cards.Building.Effects</a></td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(7/7)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(38/38)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
92%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(46/50)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(129/129)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@@ -635,7 +670,7 @@ Current scope: all classes
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(15/15)
|
||||
(12/12)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat"/>
|
||||
@@ -644,42 +679,7 @@ Current scope: all classes
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(29/29)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name"><a href="ns-8/index_SORT_BY_METHOD.html">it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters</a></td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(6/6)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(49/49)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(40/40)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(108/108)
|
||||
(26/26)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -698,7 +698,7 @@ Current scope: all classes
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(24/24)
|
||||
(28/28)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -714,7 +714,7 @@ Current scope: all classes
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(91/91)
|
||||
(93/93)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -738,10 +738,10 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
88.2%
|
||||
89.2%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(67/76)
|
||||
(66/74)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -749,7 +749,7 @@ Current scope: all classes
|
||||
96.5%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(111/115)
|
||||
(110/114)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -775,7 +775,7 @@ Current scope: all classes
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -52,26 +52,26 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
45.4%
|
||||
45.1%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(333/734)
|
||||
(330/731)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
43.2%
|
||||
42.8%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(664/1536)
|
||||
(660/1542)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
36%
|
||||
35.6%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(1326/3684)
|
||||
(1308/3671)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -122,10 +122,10 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
88.2%
|
||||
89.2%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(67/76)
|
||||
(66/74)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -133,7 +133,7 @@ Current scope: all classes
|
||||
96.5%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(111/115)
|
||||
(110/114)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -152,7 +152,7 @@ Current scope: all classes
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(24/24)
|
||||
(28/28)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -168,42 +168,7 @@ Current scope: all classes
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(91/91)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name"><a href="ns-8/index_SORT_BY_METHOD_DESC.html">it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters</a></td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(6/6)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(49/49)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(40/40)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(108/108)
|
||||
(93/93)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -222,7 +187,7 @@ Current scope: all classes
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(15/15)
|
||||
(12/12)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat"/>
|
||||
@@ -231,42 +196,7 @@ Current scope: all classes
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(29/29)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name"><a href="ns-6/index_SORT_BY_METHOD_DESC.html">it.polimi.ingsw.gc14.Model.Cards.Building.Effects</a></td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(7/7)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(38/38)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
92%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(46/50)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(129/129)
|
||||
(26/26)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -310,10 +240,10 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
95%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(20/20)
|
||||
(19/20)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -324,12 +254,82 @@ Current scope: all classes
|
||||
(25/25)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
98.1%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(52/53)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name"><a href="ns-6/index_SORT_BY_METHOD_DESC.html">it.polimi.ingsw.gc14.Model.Cards.Building.Effects</a></td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(58/58)
|
||||
(7/7)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
94.7%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(36/38)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
92%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(46/50)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
98.4%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(127/129)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name"><a href="ns-8/index_SORT_BY_METHOD_DESC.html">it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters</a></td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(6/6)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
94.3%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(50/53)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(40/40)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
97.2%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(103/106)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -380,26 +380,26 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
77.6%
|
||||
78.5%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(97/125)
|
||||
(95/121)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
73.5%
|
||||
72.8%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(349/475)
|
||||
(343/471)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
82%
|
||||
82.1%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(547/667)
|
||||
(541/659)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -415,10 +415,10 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
53.3%
|
||||
58.5%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(24/45)
|
||||
(24/41)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -431,10 +431,10 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
38.7%
|
||||
36.3%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(84/217)
|
||||
(82/226)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -458,18 +458,18 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
69.2%
|
||||
70%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(18/26)
|
||||
(21/30)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
65.6%
|
||||
66.2%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(42/64)
|
||||
(47/71)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -488,7 +488,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/130)
|
||||
(0/132)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -496,7 +496,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/291)
|
||||
(0/302)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -504,7 +504,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/1000)
|
||||
(0/1014)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -531,7 +531,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/50)
|
||||
(0/52)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -539,7 +539,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/166)
|
||||
(0/164)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -566,7 +566,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/26)
|
||||
(0/24)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -593,7 +593,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/23)
|
||||
(0/22)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -601,7 +601,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/36)
|
||||
(0/38)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -609,7 +609,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/113)
|
||||
(0/105)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -663,7 +663,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/41)
|
||||
(0/40)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -679,7 +679,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/175)
|
||||
(0/162)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -741,7 +741,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/149)
|
||||
(0/144)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -749,7 +749,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/394)
|
||||
(0/391)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -775,7 +775,7 @@ Current scope: all classes
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -52,26 +52,26 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
45.4%
|
||||
45.1%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(333/734)
|
||||
(330/731)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
43.2%
|
||||
42.8%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(664/1536)
|
||||
(660/1542)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
36%
|
||||
35.6%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(1326/3684)
|
||||
(1308/3671)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -114,10 +114,10 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
53.3%
|
||||
58.5%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(24/45)
|
||||
(24/41)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -130,10 +130,10 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
38.7%
|
||||
36.3%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(84/217)
|
||||
(82/226)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -152,7 +152,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/130)
|
||||
(0/132)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -160,7 +160,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/291)
|
||||
(0/302)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -168,7 +168,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/1000)
|
||||
(0/1014)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -195,7 +195,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/50)
|
||||
(0/52)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -203,7 +203,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/166)
|
||||
(0/164)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -230,7 +230,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/26)
|
||||
(0/24)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -257,7 +257,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/23)
|
||||
(0/22)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -265,7 +265,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/36)
|
||||
(0/38)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -273,7 +273,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/113)
|
||||
(0/105)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -327,7 +327,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/41)
|
||||
(0/40)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -343,7 +343,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/175)
|
||||
(0/162)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -402,10 +402,10 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
88.2%
|
||||
89.2%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(67/76)
|
||||
(66/74)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -413,7 +413,7 @@ Current scope: all classes
|
||||
96.5%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(111/115)
|
||||
(110/114)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -467,7 +467,7 @@ Current scope: all classes
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(24/24)
|
||||
(28/28)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -483,7 +483,7 @@ Current scope: all classes
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(91/91)
|
||||
(93/93)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -499,10 +499,10 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
94.3%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(49/49)
|
||||
(50/53)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -515,10 +515,10 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
97.2%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(108/108)
|
||||
(103/106)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -537,7 +537,7 @@ Current scope: all classes
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(15/15)
|
||||
(12/12)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat"/>
|
||||
@@ -546,7 +546,7 @@ Current scope: all classes
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(29/29)
|
||||
(26/26)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -562,10 +562,10 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
94.7%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(38/38)
|
||||
(36/38)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -578,10 +578,10 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
98.4%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(129/129)
|
||||
(127/129)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -625,10 +625,10 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
95%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(20/20)
|
||||
(19/20)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -641,10 +641,10 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
98.1%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(58/58)
|
||||
(52/53)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -660,26 +660,26 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
77.6%
|
||||
78.5%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(97/125)
|
||||
(95/121)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
73.5%
|
||||
72.8%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(349/475)
|
||||
(343/471)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
82%
|
||||
82.1%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(547/667)
|
||||
(541/659)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -703,18 +703,18 @@ Current scope: all classes
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
69.2%
|
||||
70%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(18/26)
|
||||
(21/30)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
65.6%
|
||||
66.2%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(42/64)
|
||||
(47/71)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -741,7 +741,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/149)
|
||||
(0/144)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -749,7 +749,7 @@ Current scope: all classes
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/394)
|
||||
(0/391)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -775,7 +775,7 @@ Current scope: all classes
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -64,7 +64,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/149)
|
||||
(0/144)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -72,7 +72,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/394)
|
||||
(0/391)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -146,7 +146,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/11)
|
||||
(0/12)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -154,7 +154,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/67)
|
||||
(0/62)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -162,7 +162,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/142)
|
||||
(0/139)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -225,7 +225,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/108)
|
||||
(0/111)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -244,7 +244,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/16)
|
||||
(0/15)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -260,7 +260,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/28)
|
||||
(0/27)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -288,7 +288,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/23)
|
||||
(0/22)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -323,7 +323,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/72)
|
||||
(0/71)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -350,7 +350,7 @@ it.polimi.ingsw.gc14</div>
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -64,7 +64,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/149)
|
||||
(0/144)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -72,7 +72,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/394)
|
||||
(0/391)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -183,7 +183,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/23)
|
||||
(0/22)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -202,7 +202,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/11)
|
||||
(0/12)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -210,7 +210,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/67)
|
||||
(0/62)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -218,7 +218,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/142)
|
||||
(0/139)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -253,7 +253,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/108)
|
||||
(0/111)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -272,7 +272,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/16)
|
||||
(0/15)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -288,7 +288,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/28)
|
||||
(0/27)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -323,7 +323,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/72)
|
||||
(0/71)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -350,7 +350,7 @@ it.polimi.ingsw.gc14</div>
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -64,7 +64,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/149)
|
||||
(0/144)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -72,7 +72,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/394)
|
||||
(0/391)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -134,7 +134,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/72)
|
||||
(0/71)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -153,7 +153,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/16)
|
||||
(0/15)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -169,7 +169,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/28)
|
||||
(0/27)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -204,7 +204,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/108)
|
||||
(0/111)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -223,7 +223,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/11)
|
||||
(0/12)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -231,7 +231,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/67)
|
||||
(0/62)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -239,7 +239,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/142)
|
||||
(0/139)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -267,7 +267,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/23)
|
||||
(0/22)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -350,7 +350,7 @@ it.polimi.ingsw.gc14</div>
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -64,7 +64,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/149)
|
||||
(0/144)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -72,7 +72,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/394)
|
||||
(0/391)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -146,7 +146,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/11)
|
||||
(0/12)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -154,7 +154,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/67)
|
||||
(0/62)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -162,7 +162,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/142)
|
||||
(0/139)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -225,7 +225,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/108)
|
||||
(0/111)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -244,7 +244,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/16)
|
||||
(0/15)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -260,7 +260,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/28)
|
||||
(0/27)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -288,7 +288,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/23)
|
||||
(0/22)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -323,7 +323,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/72)
|
||||
(0/71)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -350,7 +350,7 @@ it.polimi.ingsw.gc14</div>
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -64,7 +64,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/149)
|
||||
(0/144)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -72,7 +72,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/394)
|
||||
(0/391)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -134,7 +134,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/72)
|
||||
(0/71)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -162,7 +162,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/23)
|
||||
(0/22)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -181,7 +181,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/16)
|
||||
(0/15)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -197,7 +197,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/28)
|
||||
(0/27)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -232,7 +232,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/108)
|
||||
(0/111)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -279,7 +279,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/11)
|
||||
(0/12)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -287,7 +287,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/67)
|
||||
(0/62)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -295,7 +295,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/142)
|
||||
(0/139)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -350,7 +350,7 @@ it.polimi.ingsw.gc14</div>
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -64,7 +64,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/149)
|
||||
(0/144)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -72,7 +72,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/394)
|
||||
(0/391)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -146,7 +146,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/11)
|
||||
(0/12)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -154,7 +154,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/67)
|
||||
(0/62)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -162,7 +162,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/142)
|
||||
(0/139)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -225,7 +225,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/108)
|
||||
(0/111)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -244,7 +244,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/16)
|
||||
(0/15)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -260,7 +260,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/28)
|
||||
(0/27)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -288,7 +288,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/23)
|
||||
(0/22)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -323,7 +323,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/72)
|
||||
(0/71)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -350,7 +350,7 @@ it.polimi.ingsw.gc14</div>
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -64,7 +64,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/149)
|
||||
(0/144)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -72,7 +72,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/394)
|
||||
(0/391)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -134,7 +134,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/72)
|
||||
(0/71)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -162,7 +162,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/23)
|
||||
(0/22)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -181,7 +181,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/16)
|
||||
(0/15)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -197,7 +197,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/28)
|
||||
(0/27)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -232,7 +232,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/108)
|
||||
(0/111)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -279,7 +279,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/11)
|
||||
(0/12)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -287,7 +287,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/67)
|
||||
(0/62)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -295,7 +295,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/142)
|
||||
(0/139)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -350,7 +350,7 @@ it.polimi.ingsw.gc14</div>
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -64,7 +64,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/149)
|
||||
(0/144)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -72,7 +72,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/394)
|
||||
(0/391)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -146,7 +146,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/11)
|
||||
(0/12)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -154,7 +154,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/67)
|
||||
(0/62)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -162,7 +162,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/142)
|
||||
(0/139)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -225,7 +225,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/108)
|
||||
(0/111)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -244,7 +244,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/16)
|
||||
(0/15)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -260,7 +260,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/28)
|
||||
(0/27)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -288,7 +288,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/23)
|
||||
(0/22)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -323,7 +323,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/72)
|
||||
(0/71)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -350,7 +350,7 @@ it.polimi.ingsw.gc14</div>
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -64,7 +64,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/149)
|
||||
(0/144)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -72,7 +72,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/394)
|
||||
(0/391)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -134,7 +134,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/72)
|
||||
(0/71)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -162,7 +162,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/23)
|
||||
(0/22)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -181,7 +181,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/16)
|
||||
(0/15)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -197,7 +197,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/28)
|
||||
(0/27)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -232,7 +232,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/108)
|
||||
(0/111)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -279,7 +279,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/11)
|
||||
(0/12)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -287,7 +287,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/67)
|
||||
(0/62)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -295,7 +295,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/142)
|
||||
(0/139)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -350,7 +350,7 @@ it.polimi.ingsw.gc14</div>
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -64,7 +64,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/149)
|
||||
(0/144)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -72,7 +72,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/394)
|
||||
(0/391)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -134,7 +134,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/72)
|
||||
(0/71)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -162,7 +162,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/23)
|
||||
(0/22)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -181,7 +181,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/16)
|
||||
(0/15)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -197,7 +197,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/28)
|
||||
(0/27)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -232,7 +232,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/108)
|
||||
(0/111)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -279,7 +279,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/11)
|
||||
(0/12)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -287,7 +287,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/67)
|
||||
(0/62)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -295,7 +295,7 @@ it.polimi.ingsw.gc14</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/142)
|
||||
(0/139)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -350,7 +350,7 @@ it.polimi.ingsw.gc14</div>
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -116,12 +116,15 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
*
|
||||
* @param args command-line arguments passed to the JavaFX runtime.
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
static void main(String[] args) {
|
||||
<b class="nc"> System.setProperty("glass.gtk.uiScale", "1.0");</b>
|
||||
<b class="nc"> System.setProperty("glass.win.uiScale", "1.0");</b>
|
||||
<b class="nc"> Application.launch(GUIApp.class, args);</b>
|
||||
}
|
||||
//TODO
|
||||
/**
|
||||
* Inner {@link Application} subclass that wires the GUI to the client controller
|
||||
* and hands off control to {@link GUI#start(Stage)}.
|
||||
*/
|
||||
<b class="nc"> public static class GUIApp extends Application {</b>
|
||||
@Override
|
||||
public void start(Stage stage) throws Exception {
|
||||
@@ -155,7 +158,7 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -59,7 +59,7 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/11)
|
||||
(0/12)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -67,7 +67,7 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/67)
|
||||
(0/62)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -75,7 +75,7 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/142)
|
||||
(0/139)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -91,6 +91,7 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
|
||||
import it.polimi.ingsw.gc14.Controller.ClientController;
|
||||
import it.polimi.ingsw.gc14.Model.GamePackage.GameStages;
|
||||
import it.polimi.ingsw.gc14.Network.IClient;
|
||||
import it.polimi.ingsw.gc14.Network.NetworkConfig;
|
||||
import it.polimi.ingsw.gc14.Network.InterfaceResolver;
|
||||
import it.polimi.ingsw.gc14.Network.RMI.Client.RMIClient;
|
||||
@@ -114,13 +115,13 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
* Handles login, connects to the server, and drives the JLine-powered command loop.
|
||||
*/
|
||||
<b class="nc"> public class ClientLauncherTUI {</b>
|
||||
//TODO
|
||||
/** TUI view shared with the client controller. */
|
||||
private TUI view;
|
||||
//TODO
|
||||
/** JLine terminal used for all input/output. */
|
||||
private Terminal terminal;
|
||||
//TODO
|
||||
/** Line reader used during active gameplay, with tab-completion wired. */
|
||||
private LineReader gameReader;
|
||||
//TODO
|
||||
/** Username of the currently logged-in player; empty string before login. */
|
||||
<b class="nc"> private String currentUsername = "";</b>
|
||||
|
||||
private static final String BUILDING_DETAILS =
|
||||
@@ -170,17 +171,21 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
"HUNTERS — Adding a Hunter without the \uD83C\uDF56 icon: nothing. Adding a Hunter WITH the \uD83C\uDF56 icon:\n" +
|
||||
" immediately take 1 \uD83C\uDF56 for each Hunter in your tribe (with or without the icon).\n" +
|
||||
" During Hunt Event, take \uD83C\uDF56 and gain PP based on your Hunter count (see 'details events').";
|
||||
//TODO
|
||||
public static void main(String[] args) throws InterruptedException {
|
||||
/**
|
||||
* Launches the TUI client.
|
||||
*
|
||||
* @param args command-line arguments (unused).
|
||||
* @throws InterruptedException if the thread is interrupted during startup.
|
||||
*/
|
||||
static void main(String[] args) throws InterruptedException {
|
||||
<b class="nc"> new ClientLauncherTUI().start();</b>
|
||||
}
|
||||
|
||||
/**
|
||||
* Starts the TUI client. Creates a JLine terminal, loops through login → game → rematch.
|
||||
*
|
||||
* @throws InterruptedException if the thread is interrupted while waiting.
|
||||
*/
|
||||
private void start() throws InterruptedException {
|
||||
private void start() {
|
||||
try {
|
||||
<b class="nc"> System.setOut(new PrintStream(System.out, true, StandardCharsets.UTF_8));</b>
|
||||
<b class="nc"> System.setErr(new PrintStream(System.err, true, StandardCharsets.UTF_8));</b>
|
||||
@@ -204,7 +209,7 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
<b class="nc"> if (!doLogin(controller)) continue;</b>
|
||||
|
||||
<b class="nc"> while (controller.getClient() != null) {</b>
|
||||
<b class="nc"> String prompt = buildPrompt(controller);</b>
|
||||
<b class="nc"> String prompt = buildPrompt();</b>
|
||||
String line;
|
||||
try {
|
||||
<b class="nc"> line = gameReader.readLine(prompt);</b>
|
||||
@@ -221,7 +226,12 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
}
|
||||
}
|
||||
}
|
||||
//TODO
|
||||
/**
|
||||
* Prompts for username, player count, network type, and server IP, then connects.
|
||||
*
|
||||
* @param controller the client controller to connect.
|
||||
* @return {@code true} on successful connection; {@code false} if input is invalid or connection fails.
|
||||
*/
|
||||
private boolean doLogin(ClientController controller) {
|
||||
<b class="nc"> LineReader loginReader = LineReaderBuilder.builder()</b>
|
||||
<b class="nc"> .terminal(terminal)</b>
|
||||
@@ -232,6 +242,22 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
<b class="nc"> .completer(new StringsCompleter("localhost"))</b>
|
||||
<b class="nc"> .build();</b>
|
||||
|
||||
<b class="nc"> view.setLineReader(loginReader);</b>
|
||||
try {
|
||||
<b class="nc"> return doLoginInner(controller, loginReader, ipReader);</b>
|
||||
} finally {
|
||||
<b class="nc"> view.setLineReader(gameReader);</b>
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Reads login fields from the terminal and connects to the server.
|
||||
*
|
||||
* @param controller the client controller to connect.
|
||||
* @param loginReader line reader used for username, player count, and network type.
|
||||
* @param ipReader line reader with localhost auto-complete for the server IP.
|
||||
* @return {@code true} on successful connection; {@code false} if input is invalid or connection fails.
|
||||
*/
|
||||
private boolean doLoginInner(ClientController controller, LineReader loginReader, LineReader ipReader) {
|
||||
String username, networkStr, ip;
|
||||
int nPlayers;
|
||||
|
||||
@@ -245,7 +271,7 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
<b class="nc"> System.exit(0);</b>
|
||||
<b class="nc"> return false;</b>
|
||||
} catch (NumberFormatException e) {
|
||||
<b class="nc"> System.out.println("Invalid number of players.");</b>
|
||||
<b class="nc"> loginReader.printAbove("\033[H\033[2J" + "\033[31mERROR: Invalid number of players.\033[0m");</b>
|
||||
<b class="nc"> return false;</b>
|
||||
}
|
||||
|
||||
@@ -253,45 +279,47 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
<b class="nc"> view.setUsername(username);</b>
|
||||
<b class="nc"> controller.setMyUsername(username);</b>
|
||||
|
||||
IClient client;
|
||||
<b class="nc"> if (networkStr.equals("rmi")) {</b>
|
||||
String myIP;
|
||||
try {
|
||||
<b class="nc"> myIP = InterfaceResolver.resolveLocalInterface(ip);</b>
|
||||
} catch (Exception e) {
|
||||
<b class="nc"> System.out.println("Cannot resolve local interface: " + e.getMessage());</b>
|
||||
<b class="nc"> loginReader.printAbove("\033[H\033[2J" + "\033[31mERROR: Cannot resolve local interface: " + e.getMessage() + "\033[0m");</b>
|
||||
<b class="nc"> return false;</b>
|
||||
}
|
||||
<b class="nc"> System.setProperty("java.rmi.server.hostname", myIP);</b>
|
||||
<b class="nc"> RMIClient client = new RMIClient(controller, ip, NetworkConfig.RMI_PORT, myIP);</b>
|
||||
<b class="nc"> client = new RMIClient(controller, ip, NetworkConfig.RMI_PORT, myIP);</b>
|
||||
<b class="nc"> ErrorType err = client.connect(username, nPlayers);</b>
|
||||
<b class="nc"> if (err != null) {</b>
|
||||
<b class="nc"> terminal.writer().print("\033[H\033[2J");</b>
|
||||
<b class="nc"> terminal.writer().flush();</b>
|
||||
<b class="nc"> System.out.println("Errore: " + err);</b>
|
||||
<b class="nc"> loginReader.printAbove("\033[H\033[2J" + "\033[31mERROR: " + err + "\033[0m");</b>
|
||||
<b class="nc"> return false;</b>
|
||||
}
|
||||
<b class="nc"> System.out.println("Connected via RMI.");</b>
|
||||
<b class="nc"> System.out.println("Connected via RMI, waiting for other players...");</b>
|
||||
<b class="nc"> controller.setClient(client);</b>
|
||||
|
||||
<b class="nc"> } else if (networkStr.equals("tcp")) {</b>
|
||||
<b class="nc"> TCPClient client = new TCPClient(controller, ip, NetworkConfig.TCP_PORT, NetworkConfig.HEARTBEAT_PORT);</b>
|
||||
<b class="nc"> client = new TCPClient(controller, ip, NetworkConfig.TCP_PORT, NetworkConfig.HEARTBEAT_PORT);</b>
|
||||
<b class="nc"> ErrorType err = client.connect(username, nPlayers);</b>
|
||||
<b class="nc"> if (err != null) {</b>
|
||||
<b class="nc"> terminal.writer().print("\033[H\033[2J");</b>
|
||||
<b class="nc"> terminal.writer().flush();</b>
|
||||
<b class="nc"> System.out.println("Errore: " + err);</b>
|
||||
<b class="nc"> loginReader.printAbove("\033[H\033[2J" + "\033[31mERROR: " + err + "\033[0m");</b>
|
||||
<b class="nc"> return false;</b>
|
||||
}
|
||||
<b class="nc"> System.out.println("Connected via TCP.");</b>
|
||||
<b class="nc"> System.out.println("Connected via TCP, waiting for other players...");</b>
|
||||
<b class="nc"> controller.setClient(client);</b>
|
||||
|
||||
} else {
|
||||
<b class="nc"> System.out.println("Unknown network type '" + networkStr + "'. Use rmi or tcp.");</b>
|
||||
<b class="nc"> loginReader.printAbove("\033[H\033[2J" + "\033[31mERROR: Unknown network type '" + networkStr + "'. Use rmi or tcp.\033[0m");</b>
|
||||
<b class="nc"> return false;</b>
|
||||
}
|
||||
<b class="nc"> return true;</b>
|
||||
}
|
||||
//TODO
|
||||
/**
|
||||
* Builds the JLine {@link LineReader} used during gameplay, with tab-completion
|
||||
* for all valid commands.
|
||||
*
|
||||
* @return the configured {@link LineReader}.
|
||||
*/
|
||||
private LineReader buildGameReader() {
|
||||
<b class="nc"> Completer completer = new TreeCompleter(</b>
|
||||
<b class="nc"> node("slot"),</b>
|
||||
@@ -304,8 +332,7 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
<b class="nc"> node("building"))),</b>
|
||||
<b class="nc"> node("totem"),</b>
|
||||
<b class="nc"> node("skip"),</b>
|
||||
<b class="nc"> node("render"),</b>
|
||||
<b class="nc"> node("help"),</b>
|
||||
<b class="nc"> node("clear"),</b>
|
||||
<b class="nc"> node("details", node("buildings"), node("events"), node("characters")),</b>
|
||||
<b class="nc"> node("rematch"),</b>
|
||||
<b class="nc"> node("quit")</b>
|
||||
@@ -316,8 +343,12 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
<b class="nc"> .option(LineReader.Option.DISABLE_EVENT_EXPANSION, true)</b>
|
||||
<b class="nc"> .build();</b>
|
||||
}
|
||||
//TODO
|
||||
private String buildPrompt(ClientController controller) {
|
||||
/**
|
||||
* Returns the command-line prompt string showing the current username.
|
||||
*
|
||||
* @return the prompt string.
|
||||
*/
|
||||
private String buildPrompt() {
|
||||
<b class="nc"> return currentUsername.isEmpty() ? "> " : currentUsername + "> ";</b>
|
||||
}
|
||||
|
||||
@@ -329,16 +360,15 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
<b class="nc"> switch (cmd) {</b>
|
||||
case "slot" -> {
|
||||
<b class="nc"> int pos = parsePos(parts, 1);</b>
|
||||
<b class="nc"> if (pos >= 0) controller.slotChoice(pos);</b>
|
||||
<b class="nc"> controller.slotChoice(pos);</b>
|
||||
}
|
||||
<b class="nc"> case "draw" -> handleDraw(parts, controller);</b>
|
||||
case "totem" -> {
|
||||
<b class="nc"> int pos = parsePos(parts, 1);</b>
|
||||
<b class="nc"> if (pos >= 0) controller.totemChoice(pos);</b>
|
||||
<b class="nc"> controller.totemChoice(pos);</b>
|
||||
}
|
||||
<b class="nc"> case "skip" -> controller.skipTurn();</b>
|
||||
<b class="nc"> case "render" -> handleRender(parts);</b>
|
||||
<b class="nc"> case "help" -> gameReader.printAbove("Commands: slot, draw, totem, skip, render, help, details, rematch, quit");</b>
|
||||
<b class="nc"> case "clear" -> handleRender();</b>
|
||||
case "details" -> {
|
||||
<b class="nc"> if (parts.length > 1 && parts[1].equalsIgnoreCase("buildings"))</b>
|
||||
<b class="nc"> gameReader.printAbove(BUILDING_DETAILS);</b>
|
||||
@@ -368,7 +398,12 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
}
|
||||
<b class="nc"> return false;</b>
|
||||
}
|
||||
//TODO
|
||||
/**
|
||||
* Handles the {@code draw} command, dispatching to the appropriate controller draw method.
|
||||
*
|
||||
* @param parts the tokenized command: {@code [draw, upper|lower, tribe|building, pos]}.
|
||||
* @param controller the client controller to invoke.
|
||||
*/
|
||||
private void handleDraw(String[] parts, ClientController controller) {
|
||||
<b class="nc"> if (parts.length < 4) {</b>
|
||||
<b class="nc"> view.showError(ErrorType.GENERIC_ERROR, "Usage: draw upper|lower tribe|building <pos>");</b>
|
||||
@@ -384,11 +419,20 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
<b class="nc"> else if (tribe) controller.drawLowerTribeCard(pos);</b>
|
||||
<b class="nc"> else controller.drawLowerBuildingCard(pos);</b>
|
||||
}
|
||||
//TODO
|
||||
private void handleRender(String[] parts) {
|
||||
/**
|
||||
* Handles the {@code clear} command by triggering a full board re-render.
|
||||
*
|
||||
*/
|
||||
private void handleRender() {
|
||||
<b class="nc"> view.renderBoard();</b>
|
||||
}
|
||||
//TODO
|
||||
/**
|
||||
* Parses an integer position argument at {@code idx} in {@code parts}.
|
||||
*
|
||||
* @param parts the tokenized command array.
|
||||
* @param idx index of the position argument.
|
||||
* @return the parsed integer, or {@code -1} if missing or malformed.
|
||||
*/
|
||||
private int parsePos(String[] parts, int idx) {
|
||||
<b class="nc"> if (parts.length <= idx) {</b>
|
||||
<b class="nc"> view.showError(ErrorType.GENERIC_ERROR, "Missing position argument.");</b>
|
||||
@@ -402,7 +446,11 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
<b class="nc"> return -1;</b>
|
||||
}
|
||||
}
|
||||
//TODO
|
||||
/**
|
||||
* Disconnects the client if one is currently connected; safe to call when already disconnected.
|
||||
*
|
||||
* @param controller the client controller to disconnect.
|
||||
*/
|
||||
private void safeQuit(ClientController controller) {
|
||||
<b class="nc"> if (controller.getClient() != null) controller.disconnect();</b>
|
||||
}
|
||||
@@ -430,7 +478,7 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -79,19 +79,39 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
|
||||
/** Enumeration of error types that can be returned by server-side operations. */
|
||||
<b class="nc"> public enum ErrorType {</b>
|
||||
<b class="nc"> USER_NOT_FOUND("User not found"),</b>
|
||||
<b class="nc"> USERNAME_ALREADY_USED("Username is already in use"),</b>
|
||||
/** The chosen username is already taken by another connected player. */
|
||||
<b class="nc"> INVALID_USERNAME("Username is already in use or too long"),</b>
|
||||
/** The user is already connected to the server. */
|
||||
<b class="nc"> USER_ALREADY_CONNECTED("User is already connected"),</b>
|
||||
/** The requested number of players is outside the allowed range. */
|
||||
<b class="nc"> WRONG_PLAYER_NUMBER("Wrong player number"),</b>
|
||||
/** The server has crashed or become unreachable. */
|
||||
<b class="nc"> SERVER_CRASHED("Server crashed"),</b>
|
||||
/** The server is unreachable. */
|
||||
<b class="nc"> SERVER_UNREACHABLE("Server unreachable"),</b>
|
||||
/** A generic, unclassified error occurred. */
|
||||
<b class="nc"> GENERIC_ERROR("Generic error"),</b>
|
||||
/** The game has already started and cannot accept new players. */
|
||||
<b class="nc"> GAME_ALREADY_STARTED("Game already started"),</b>
|
||||
/** The action attempted is not valid in the current game state. */
|
||||
<b class="nc"> WRONG_ACTION("Wrong action");</b>
|
||||
//TODO
|
||||
/** Human-readable description of this error, returned by {@link #toString()}. */
|
||||
private final String description;
|
||||
|
||||
/**
|
||||
* Creates an error type constant with the given human-readable description.
|
||||
*
|
||||
* @param description the message returned by {@link #toString()}.
|
||||
*/
|
||||
<b class="nc"> ErrorType(String description) {</b>
|
||||
<b class="nc"> this.description = description;</b>
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the human-readable description of this error.
|
||||
*
|
||||
* @return the error description string.
|
||||
*/
|
||||
@Override
|
||||
public String toString() {
|
||||
<b class="nc"> return description;</b>
|
||||
@@ -120,7 +140,7 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -64,7 +64,7 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/107)
|
||||
(0/110)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -110,7 +110,7 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/108)
|
||||
(0/111)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -144,7 +144,7 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
* <p>The three top-level states that determine routing are:
|
||||
* <ul>
|
||||
* <li><b>Inactive</b> – no game model is present, or the game has ended.
|
||||
* Only disconnection clean-up is performed.</li>
|
||||
* Only disconnection cleanup is performed.</li>
|
||||
* <li><b>Suspended</b> – a forfeit timer is running because exactly one
|
||||
* player remains online. Only reconnection events are accepted.</li>
|
||||
* <li><b>Active</b> – normal gameplay; every event is applied, saved,
|
||||
@@ -156,11 +156,15 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
* thread via {@link #doFirstEvent()}.
|
||||
*/
|
||||
public class GameEventProcessor {
|
||||
|
||||
/** Queue from which incoming client events are consumed one at a time. */
|
||||
private final BlockingQueue<NetworkEvent> actionQueue;
|
||||
/** Server-side game controller; all model mutations go through this. */
|
||||
private final GameController gameController;
|
||||
/** Shared map tracking each player's online status ({@code true} = online). */
|
||||
private final LimitedMap<String, Boolean> playerList;
|
||||
/** Broadcaster used to push events and model snapshots to all connected clients. */
|
||||
private final CompositeClientBroadcaster broadcaster;
|
||||
/** Persists and deletes game save files. */
|
||||
private final SaveManager saveManager;
|
||||
|
||||
/** Single-thread executor used exclusively for the forfeit timer. Daemon so it does not block JVM shutdown. */
|
||||
@@ -173,7 +177,7 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
|
||||
/**
|
||||
* Handle to the running forfeit timer, or {@code null} when no timer is active.
|
||||
* A non-null value signals that the game is in the {@em suspended} state.
|
||||
* A non-null value signals that the game is in the suspended state.
|
||||
*/
|
||||
private ScheduledFuture<?> disconnectionTimer;
|
||||
|
||||
@@ -199,7 +203,6 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
<b class="nc"> this.saveManager = saveManager;</b>
|
||||
}
|
||||
|
||||
// ── Public entry point ────────────────────────────────────────────────────
|
||||
|
||||
/**
|
||||
* Blocks until one event is available in the queue, then routes it to the
|
||||
@@ -220,7 +223,6 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
}
|
||||
}
|
||||
|
||||
// ── State guards ──────────────────────────────────────────────────────────
|
||||
|
||||
/**
|
||||
* Returns {@code true} when there is an ongoing game that has not yet ended.
|
||||
@@ -239,11 +241,10 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
<b class="nc"> return disconnectionTimer != null;</b>
|
||||
}
|
||||
|
||||
// ── Inactive game path ────────────────────────────────────────────────────
|
||||
|
||||
/**
|
||||
* Handles events that arrive when no active game exists (not yet started,
|
||||
* or already ended). Only disconnection clean-up is relevant here.
|
||||
* or already ended). Only disconnection cleanup is relevant here.
|
||||
*
|
||||
* @param event the incoming event.
|
||||
*/
|
||||
@@ -259,7 +260,6 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
<b class="nc"> }</b>
|
||||
}
|
||||
|
||||
// ── Suspended game path ───────────────────────────────────────────────────
|
||||
|
||||
/**
|
||||
* Routes events while the game is suspended waiting for a reconnection.
|
||||
@@ -303,7 +303,6 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
<b class="nc"> broadcaster.notifyAll(event);</b>
|
||||
}
|
||||
|
||||
// ── Active game path ──────────────────────────────────────────────────────
|
||||
|
||||
/**
|
||||
* Applies the event to the game controller, saves the updated state,
|
||||
@@ -331,6 +330,9 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
<b class="nc"> if (!saveManager.save(game)) {</b>
|
||||
<b class="nc"> System.out.println("\n!!! Save failed !!!\n");</b>
|
||||
}
|
||||
else {
|
||||
<b class="nc"> System.out.println(event.getUsername()+": "+ event.getEventType() + " save successful.");</b>
|
||||
}
|
||||
|
||||
// During the lobby phase a disconnection only removes the player
|
||||
// from the list; no broadcast is needed.
|
||||
@@ -378,7 +380,7 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
* Schedules the 60-second forfeit timer if a disconnection has left
|
||||
* exactly one player online.
|
||||
*
|
||||
* <p>If a previous timer is still pending it is cancelled first to avoid
|
||||
* <p>If a previous timer is still pending it is canceled first to avoid
|
||||
* duplicate timers.
|
||||
*
|
||||
* @param event the event that was just applied.
|
||||
@@ -391,12 +393,14 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
|
||||
<b class="nc"> if (disconnectionTimer != null && !disconnectionTimer.isDone()) {</b>
|
||||
<b class="nc"> disconnectionTimer.cancel(false);</b>
|
||||
<b class="nc"> System.out.println("Disconnection TIMER reset");</b>
|
||||
}
|
||||
|
||||
<b class="nc"> disconnectionTimer = timerExecutor.schedule(</b>
|
||||
<b class="nc"> () -> endGameForfeit(game),</b>
|
||||
1, TimeUnit.MINUTES
|
||||
);
|
||||
<b class="nc"> System.out.println("Disconnection TIMER started, 60 seconds from now..." );</b>
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -459,7 +463,6 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
}
|
||||
}
|
||||
|
||||
// ── Utilities ─────────────────────────────────────────────────────────────
|
||||
|
||||
/**
|
||||
* Returns the number of players currently marked as online in the player list.
|
||||
@@ -517,7 +520,7 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -59,7 +59,7 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/16)
|
||||
(0/15)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -75,7 +75,7 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/28)
|
||||
(0/27)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -103,7 +103,7 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
* @param <V> the type of mapped values.
|
||||
*/
|
||||
public class LimitedMap<K, V> implements Map<K, V> {
|
||||
|
||||
/** The underlying thread-safe hash map storing all key-value pairs. */
|
||||
<b class="nc"> private final ConcurrentHashMap<K, V> map = new ConcurrentHashMap<>();</b>
|
||||
|
||||
/**
|
||||
@@ -191,13 +191,6 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
<b class="nc"> public void setLimit(int num) { this.limit = num; }</b>
|
||||
|
||||
/**
|
||||
* Returns the current size limit of this map.
|
||||
*
|
||||
* @return the current limit.
|
||||
*/
|
||||
<b class="nc"> public int getLimit() { return limit; }</b>
|
||||
|
||||
/**
|
||||
* Sets a new action to execute when the map size reaches or exceeds the limit.
|
||||
*
|
||||
* @param action the new action to set; must not be {@code null}.
|
||||
@@ -230,7 +223,7 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -63,7 +63,7 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/23)
|
||||
(0/22)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -142,7 +142,6 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
<b class="nc"> try (ObjectOutputStream oos = new ObjectOutputStream(</b>
|
||||
<b class="nc"> new BufferedOutputStream(new FileOutputStream(filePath.toFile())))) {</b>
|
||||
<b class="nc"> oos.writeObject(game);</b>
|
||||
<b class="nc"> System.out.println("Game saved to: " + filePath.toAbsolutePath());</b>
|
||||
<b class="nc"> return true;</b>
|
||||
}
|
||||
} catch (IOException e) {
|
||||
@@ -210,7 +209,7 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -75,7 +75,7 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/72)
|
||||
(0/71)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -143,17 +143,16 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
actionQueue, gameController, playerList, broadcaster, saveManager);
|
||||
}
|
||||
|
||||
// ── Entry point ───────────────────────────────────────────────────────────
|
||||
|
||||
/**
|
||||
* Initialises all server components, wires them together, restores a saved
|
||||
* Initializes all server components, wires them together, restores a saved
|
||||
* game if available, and starts the event-processing loop and both network
|
||||
* servers.
|
||||
*
|
||||
* @param args command-line arguments (unused).
|
||||
* @throws RemoteException if the RMI server cannot be created.
|
||||
*/
|
||||
public static void main(String[] args) throws RemoteException {
|
||||
static void main(String[] args) throws RemoteException {
|
||||
<b class="nc"> LimitedMap<String, Boolean> playerList = new LimitedMap<>(5, () -> {});</b>
|
||||
<b class="nc"> BlockingQueue<NetworkEvent> actionQueue = new LinkedBlockingQueue<>();</b>
|
||||
<b class="nc"> GameController gameController = new GameController();</b>
|
||||
@@ -206,10 +205,8 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
|
||||
<b class="nc"> rmiServer.start();</b>
|
||||
<b class="nc"> new Thread(() -> tcpServer.start()).start();</b>
|
||||
<b class="nc"> System.out.println("Server RMI: " + System.getProperty("java.rmi.server.hostname"));</b>
|
||||
}
|
||||
|
||||
// ── Game loop ─────────────────────────────────────────────────────────────
|
||||
|
||||
/**
|
||||
* Runs the event-processing loop until the thread is interrupted.
|
||||
@@ -227,14 +224,13 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
}
|
||||
}
|
||||
|
||||
// ── Crash recovery ────────────────────────────────────────────────────────
|
||||
|
||||
/**
|
||||
* Attempts to restore a previously saved game.
|
||||
*
|
||||
* <p>The save is discarded if all but at most one player was offline at the
|
||||
* time of the crash, since there would be nobody to resume the game with.
|
||||
* Otherwise the model is restored, the player-list limit is set, and each
|
||||
* Otherwise, the model is restored, the player-list limit is set, and each
|
||||
* player who was offline at crash time is pre-populated as offline so the
|
||||
* reconnection flow can handle them correctly.
|
||||
*
|
||||
@@ -270,7 +266,6 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
<b class="nc"> System.out.println("Game restored from save (" + game.getNPlayers() + " players).");</b>
|
||||
}
|
||||
|
||||
// ── Network interface selection ───────────────────────────────────────────
|
||||
|
||||
/**
|
||||
* Lists active non-loopback IPv4 network interfaces and prompts the operator
|
||||
@@ -334,7 +329,7 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -64,7 +64,7 @@ it.polimi.ingsw.gc14.Network.TCP.Client</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/26)
|
||||
(0/24)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -126,7 +126,7 @@ it.polimi.ingsw.gc14.Network.TCP.Client</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/26)
|
||||
(0/24)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -161,7 +161,7 @@ it.polimi.ingsw.gc14.Network.TCP.Client</div>
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -64,7 +64,7 @@ it.polimi.ingsw.gc14.Network.TCP.Client</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/26)
|
||||
(0/24)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -126,7 +126,7 @@ it.polimi.ingsw.gc14.Network.TCP.Client</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/26)
|
||||
(0/24)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -161,7 +161,7 @@ it.polimi.ingsw.gc14.Network.TCP.Client</div>
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -64,7 +64,7 @@ it.polimi.ingsw.gc14.Network.TCP.Client</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/26)
|
||||
(0/24)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -126,7 +126,7 @@ it.polimi.ingsw.gc14.Network.TCP.Client</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/26)
|
||||
(0/24)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -161,7 +161,7 @@ it.polimi.ingsw.gc14.Network.TCP.Client</div>
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -64,7 +64,7 @@ it.polimi.ingsw.gc14.Network.TCP.Client</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/26)
|
||||
(0/24)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -126,7 +126,7 @@ it.polimi.ingsw.gc14.Network.TCP.Client</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/26)
|
||||
(0/24)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -161,7 +161,7 @@ it.polimi.ingsw.gc14.Network.TCP.Client</div>
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -64,7 +64,7 @@ it.polimi.ingsw.gc14.Network.TCP.Client</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/26)
|
||||
(0/24)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -126,7 +126,7 @@ it.polimi.ingsw.gc14.Network.TCP.Client</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/26)
|
||||
(0/24)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -161,7 +161,7 @@ it.polimi.ingsw.gc14.Network.TCP.Client</div>
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -64,7 +64,7 @@ it.polimi.ingsw.gc14.Network.TCP.Client</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/26)
|
||||
(0/24)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -126,7 +126,7 @@ it.polimi.ingsw.gc14.Network.TCP.Client</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/26)
|
||||
(0/24)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -161,7 +161,7 @@ it.polimi.ingsw.gc14.Network.TCP.Client</div>
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -64,7 +64,7 @@ it.polimi.ingsw.gc14.Network.TCP.Client</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/26)
|
||||
(0/24)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -126,7 +126,7 @@ it.polimi.ingsw.gc14.Network.TCP.Client</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/26)
|
||||
(0/24)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -161,7 +161,7 @@ it.polimi.ingsw.gc14.Network.TCP.Client</div>
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -64,7 +64,7 @@ it.polimi.ingsw.gc14.Network.TCP.Client</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/26)
|
||||
(0/24)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -126,7 +126,7 @@ it.polimi.ingsw.gc14.Network.TCP.Client</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/26)
|
||||
(0/24)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -161,7 +161,7 @@ it.polimi.ingsw.gc14.Network.TCP.Client</div>
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -64,7 +64,7 @@ it.polimi.ingsw.gc14.Network.TCP.Client</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/26)
|
||||
(0/24)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -126,7 +126,7 @@ it.polimi.ingsw.gc14.Network.TCP.Client</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/26)
|
||||
(0/24)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -161,7 +161,7 @@ it.polimi.ingsw.gc14.Network.TCP.Client</div>
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -64,7 +64,7 @@ it.polimi.ingsw.gc14.Network.TCP.Client</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/26)
|
||||
(0/24)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -126,7 +126,7 @@ it.polimi.ingsw.gc14.Network.TCP.Client</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/26)
|
||||
(0/24)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -161,7 +161,7 @@ it.polimi.ingsw.gc14.Network.TCP.Client</div>
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -67,7 +67,7 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/26)
|
||||
(0/24)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -107,7 +107,9 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
* Client TCP. Sends and receives messages with the TCP server.
|
||||
*/
|
||||
public class TCPClient implements IClient {
|
||||
/** Byte value sent by the client to signal it is still alive. */
|
||||
private static final int PING = 1;
|
||||
/** Byte value expected from the server in response to a {@link #PING}. */
|
||||
private static final int PONG = 2;
|
||||
|
||||
/** Socket TCP */
|
||||
@@ -120,18 +122,21 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
private ObjectOutputStream socketSend;
|
||||
|
||||
/** Client game's controller */
|
||||
private ClientController controller;
|
||||
private final ClientController controller;
|
||||
|
||||
/** IP address of the server to connect to */
|
||||
private String hostname;
|
||||
|
||||
private final String hostname;
|
||||
/** {@code true} while the connection is active; set to {@code false} on disconnect. */
|
||||
private boolean running;
|
||||
/** TCP port */
|
||||
private int mainPort;
|
||||
|
||||
private int heartbeatPort;
|
||||
private final int mainPort;
|
||||
/** TCP port dedicated to heartbeat communication. */
|
||||
private final int heartbeatPort;
|
||||
/** Socket used exclusively for heartbeat ping/pong exchange. */
|
||||
private Socket heartbeatSocket;
|
||||
/** Output stream of {@link #heartbeatSocket}, used to write {@link #PING} bytes. */
|
||||
private OutputStream heartbeatOut;
|
||||
/** Input stream of {@link #heartbeatSocket}, used to read {@link #PONG} bytes. */
|
||||
private InputStream heartbeatIn;
|
||||
|
||||
|
||||
@@ -157,7 +162,7 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
* Otherwise, a listener thread is started.
|
||||
* @param user The username of the player
|
||||
* @param proposedNPlayers The desired number of players for the game
|
||||
* @return true if the connection is successful, false otherwise.
|
||||
* @return null if the connection is successful, GENERIC_ERROR otherwise.
|
||||
*/
|
||||
public ErrorType connect(String user, int proposedNPlayers) {
|
||||
try {
|
||||
@@ -194,10 +199,14 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
|
||||
} catch (IOException e) {
|
||||
<b class="nc"> e.printStackTrace();</b>
|
||||
<b class="nc"> return ErrorType.GENERIC_ERROR;</b>
|
||||
<b class="nc"> return ErrorType.SERVER_UNREACHABLE;</b>
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Sends a {@link #PING} byte to the server every 3 seconds and waits for a {@link #PONG} reply.
|
||||
* If no reply arrives within {@value NetworkConfig#SILENCE_THRESHOLD_MS} ms, the server is
|
||||
* considered unreachable and {@link #disconnect()} is called.
|
||||
*/
|
||||
private void heartbeatLoop() {
|
||||
<b class="nc"> ScheduledExecutorService sender = Executors.newSingleThreadScheduledExecutor();</b>
|
||||
<b class="nc"> sender.scheduleAtFixedRate(() -> {</b>
|
||||
@@ -223,7 +232,7 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
<b class="nc"> heartbeatSocket.setSoTimeout((int) NetworkConfig.SILENCE_THRESHOLD_MS);</b>
|
||||
<b class="nc"> while (running) {</b>
|
||||
<b class="nc"> int b = heartbeatIn.read();</b>
|
||||
<b class="nc"> if (b == -1 || b != PONG) {</b>
|
||||
<b class="nc"> if (b != PONG) {</b>
|
||||
<b class="nc"> disconnect();</b>
|
||||
<b class="nc"> controller.getView().showError(ErrorType.SERVER_CRASHED, ErrorType.SERVER_CRASHED.toString());</b>
|
||||
break;
|
||||
@@ -243,6 +252,10 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
<b class="nc"> sender.shutdownNow();</b>
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Disconnects the player and cleans model and controller
|
||||
*/
|
||||
private synchronized void disconnect() {
|
||||
<b class="nc"> if (!running) return;</b>
|
||||
<b class="nc"> running = false;</b>
|
||||
@@ -423,7 +436,7 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -64,7 +64,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/50)
|
||||
(0/52)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -72,7 +72,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/166)
|
||||
(0/164)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -134,7 +134,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/32)
|
||||
(0/31)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -169,7 +169,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/29)
|
||||
(0/28)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -196,7 +196,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/28)
|
||||
(0/30)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -231,7 +231,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server</div>
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -64,7 +64,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/50)
|
||||
(0/52)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -72,7 +72,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/166)
|
||||
(0/164)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -134,7 +134,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/32)
|
||||
(0/31)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -169,7 +169,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/29)
|
||||
(0/28)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -196,7 +196,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/28)
|
||||
(0/30)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -231,7 +231,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server</div>
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -64,7 +64,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/50)
|
||||
(0/52)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -72,7 +72,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/166)
|
||||
(0/164)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -126,7 +126,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/28)
|
||||
(0/30)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -169,7 +169,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/29)
|
||||
(0/28)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -204,7 +204,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/32)
|
||||
(0/31)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -231,7 +231,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server</div>
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -64,7 +64,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/50)
|
||||
(0/52)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -72,7 +72,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/166)
|
||||
(0/164)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -134,7 +134,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/32)
|
||||
(0/31)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -169,7 +169,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/29)
|
||||
(0/28)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -196,7 +196,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/28)
|
||||
(0/30)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -231,7 +231,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server</div>
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -64,7 +64,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/50)
|
||||
(0/52)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -72,7 +72,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/166)
|
||||
(0/164)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -126,7 +126,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/28)
|
||||
(0/30)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -169,7 +169,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/29)
|
||||
(0/28)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -204,7 +204,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/32)
|
||||
(0/31)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -231,7 +231,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server</div>
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -64,7 +64,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/50)
|
||||
(0/52)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -72,7 +72,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/166)
|
||||
(0/164)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -134,7 +134,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/32)
|
||||
(0/31)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -169,7 +169,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/29)
|
||||
(0/28)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -196,7 +196,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/28)
|
||||
(0/30)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -231,7 +231,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server</div>
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -64,7 +64,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/50)
|
||||
(0/52)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -72,7 +72,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/166)
|
||||
(0/164)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -126,7 +126,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/28)
|
||||
(0/30)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -169,7 +169,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/29)
|
||||
(0/28)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -204,7 +204,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/32)
|
||||
(0/31)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -231,7 +231,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server</div>
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -64,7 +64,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/50)
|
||||
(0/52)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -72,7 +72,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/166)
|
||||
(0/164)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -134,7 +134,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/32)
|
||||
(0/31)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -169,7 +169,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/29)
|
||||
(0/28)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -196,7 +196,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/28)
|
||||
(0/30)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -231,7 +231,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server</div>
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -64,7 +64,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/50)
|
||||
(0/52)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -72,7 +72,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/166)
|
||||
(0/164)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -126,7 +126,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/28)
|
||||
(0/30)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -169,7 +169,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/29)
|
||||
(0/28)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -204,7 +204,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/32)
|
||||
(0/31)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -231,7 +231,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server</div>
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -64,7 +64,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/50)
|
||||
(0/52)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -72,7 +72,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/166)
|
||||
(0/164)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -126,7 +126,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/28)
|
||||
(0/30)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -169,7 +169,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/29)
|
||||
(0/28)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -204,7 +204,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/32)
|
||||
(0/31)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -231,7 +231,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server</div>
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -75,7 +75,7 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/32)
|
||||
(0/31)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -90,7 +90,6 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
<code class="sourceCode" id="sourceCode"> package it.polimi.ingsw.gc14.Network.TCP.Server;
|
||||
|
||||
import it.polimi.ingsw.gc14.LimitedMap;
|
||||
import it.polimi.ingsw.gc14.Model.Game;
|
||||
import it.polimi.ingsw.gc14.Model.MiniModel;
|
||||
import it.polimi.ingsw.gc14.Network.NetworkEvent;
|
||||
import it.polimi.ingsw.gc14.Network.NetworkEvents.DisconnectedPlayer;
|
||||
@@ -111,7 +110,7 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
* The username of the connected client on this handler
|
||||
*/
|
||||
private final String username;
|
||||
|
||||
/** {@code true} while the handler is actively reading from the socket; set to {@code false} on disconnect. */
|
||||
private volatile boolean running;
|
||||
|
||||
/**
|
||||
@@ -123,25 +122,25 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
<b class="nc"> return username;</b>
|
||||
}
|
||||
/** The TCP socket */
|
||||
private Socket clientSocket;
|
||||
private final Socket clientSocket;
|
||||
|
||||
/** Input stream used to receive objects from the client */
|
||||
private ObjectInputStream in;
|
||||
private final ObjectInputStream in;
|
||||
|
||||
/** Output stream used to send objects to the client */
|
||||
private ObjectOutputStream out;
|
||||
private final ObjectOutputStream out;
|
||||
|
||||
/**
|
||||
* Shared list of all client handlers.
|
||||
* This handler removes itself from the list when disconnected.
|
||||
*/
|
||||
private List<ClientHandler> clientHandlers;
|
||||
private final List<ClientHandler> clientHandlers;
|
||||
|
||||
/** Maps each connected player's username to their connection state (true = connected). */
|
||||
private LimitedMap<String, Boolean> limitedMap;
|
||||
private final LimitedMap<String, Boolean> limitedMap;
|
||||
|
||||
/** Queue containing the events to be applied to the game model */
|
||||
private BlockingQueue<NetworkEvent> actionQueue;
|
||||
private final BlockingQueue<NetworkEvent> actionQueue;
|
||||
|
||||
|
||||
/**
|
||||
@@ -181,7 +180,6 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
}
|
||||
}
|
||||
} catch (IOException e) {
|
||||
<b class="nc"> System.err.println("Error in incoming connection/disconnection: " + username);</b>
|
||||
} catch (ClassNotFoundException e) {
|
||||
<b class="nc"> System.err.println("Class not found: " + username);</b>
|
||||
} finally {
|
||||
@@ -234,7 +232,7 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
<b class="nc"> clientHandlers.remove(this);</b>
|
||||
<b class="nc"> limitedMap.put(username, false);</b>
|
||||
<b class="nc"> actionQueue.add(new DisconnectedPlayer(username));</b>
|
||||
<b class="nc"> System.out.println("Disconnected player: " + username);</b>
|
||||
<b class="nc"> System.err.println("(TCP) Disconnected player: " + username);</b>
|
||||
<b class="nc"> try { clientSocket.close(); } catch (IOException ignored) {}</b>
|
||||
}
|
||||
}
|
||||
@@ -261,7 +259,7 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -75,7 +75,7 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/29)
|
||||
(0/28)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -105,10 +105,13 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
* both the heartbeat connection and the main client connection are disconnected.
|
||||
*/
|
||||
public class HeartbeatHandler implements Runnable {
|
||||
|
||||
/** Username of the client associated with this heartbeat connection. */
|
||||
private final String username;
|
||||
/** Dedicated socket used solely for heartbeat ping/pong exchange. */
|
||||
private final Socket socket;
|
||||
/** Input stream of {@link #socket} used to receive {@code PING} bytes from the client. */
|
||||
private final InputStream in;
|
||||
/** Output stream of {@link #socket} used to send {@code PONG} bytes back to the client. */
|
||||
private final OutputStream out;
|
||||
|
||||
/**
|
||||
@@ -173,10 +176,10 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
<b class="nc"> startWatchdog();</b>
|
||||
try {
|
||||
<b class="nc"> while (running) {</b>
|
||||
<b class="nc"> int b = in.read(); // blocks until a byte arrives</b>
|
||||
<b class="nc"> int b = in.read();</b>
|
||||
<b class="nc"> if (b == -1) {</b>
|
||||
<b class="nc"> disconnect();</b>
|
||||
break; // stream closed
|
||||
break;
|
||||
}
|
||||
<b class="nc"> if (b == PING) {</b>
|
||||
<b class="nc"> lastReceivedTime = System.currentTimeMillis();</b>
|
||||
@@ -213,8 +216,7 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
private synchronized void disconnect() {
|
||||
<b class="nc"> running = false;</b>
|
||||
<b class="nc"> watchdog.shutdownNow();</b>
|
||||
<b class="nc"> mainHandler.disconnect(); // disconnette anche il socket principale</b>
|
||||
<b class="nc"> System.out.println("Disconnected: " + username);</b>
|
||||
<b class="nc"> mainHandler.disconnect();</b>
|
||||
<b class="nc"> try { socket.close(); } catch (IOException ignored) {}</b>
|
||||
}
|
||||
}
|
||||
@@ -241,7 +243,7 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -67,7 +67,7 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/28)
|
||||
(0/30)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -124,12 +124,12 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
/**
|
||||
* Main TCP port used for standard client-server communication.
|
||||
*/
|
||||
private int port;
|
||||
private final int port;
|
||||
|
||||
/**
|
||||
* TCP port dedicated to heartbeat communication.
|
||||
*/
|
||||
private int heartbeatPort;
|
||||
private final int heartbeatPort;
|
||||
|
||||
/**
|
||||
* Main server socket used to accept client connections.
|
||||
@@ -149,17 +149,17 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
/**
|
||||
* Queue containing network events received from clients.
|
||||
*/
|
||||
private BlockingQueue<NetworkEvent> actionQueue;
|
||||
private final BlockingQueue<NetworkEvent> actionQueue;
|
||||
|
||||
/**
|
||||
* Map storing the online/offline status of connected players.
|
||||
*/
|
||||
private LimitedMap<String, Boolean> playerList;
|
||||
private final LimitedMap<String, Boolean> playerList;
|
||||
|
||||
/**
|
||||
* List of active TCP client handlers.
|
||||
*/
|
||||
private CopyOnWriteArrayList<ClientHandler> clientHandlers;
|
||||
private final CopyOnWriteArrayList<ClientHandler> clientHandlers;
|
||||
|
||||
|
||||
/**
|
||||
@@ -214,7 +214,7 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
}
|
||||
|
||||
<b class="nc"> System.out.println("TCP server started on port: " + port);</b>
|
||||
<b class="nc"> System.out.println("Heartbeat server started on port: " + heartbeatPort);</b>
|
||||
<b class="nc"> System.out.println("TCP heartbeat server started on port: " + heartbeatPort);</b>
|
||||
|
||||
<b class="nc"> new Thread(this::acceptHeartbeat, "heartbeat-acceptor").start();</b>
|
||||
|
||||
@@ -249,11 +249,11 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
<b class="nc"> synchronized (controller) {</b>
|
||||
<b class="nc"> String username = eventAddPlayer.getUsername();</b>
|
||||
//reconnect players after a server crash
|
||||
<b class="nc"> if (playerList.isEmpty()&& controller.getModel()==null) {</b>
|
||||
<b class="nc"> if (playerList.isEmpty() &&(controller.getModel()==null || controller.getModel().getCurrentState().getGameStage().equals(GameStages.WAITING))) {</b>
|
||||
<b class="nc"> Game model = new Game(eventAddPlayer.getProposedNPlayer());</b>
|
||||
<b class="nc"> controller.setModel(model);</b>
|
||||
<b class="nc"> playerList.setLimit(eventAddPlayer.getProposedNPlayer());</b>
|
||||
<b class="nc"> System.out.println("Game Created With :"+eventAddPlayer.getProposedNPlayer()+" Players");</b>
|
||||
<b class="nc"> System.out.println("Game Created With: "+eventAddPlayer.getProposedNPlayer()+" Players");</b>
|
||||
}
|
||||
<b class="nc"> if(controller.getModel().getCurrentState().getGameStage()!= GameStages.WAITING ) {</b>
|
||||
<b class="nc"> if (controller.getModel().getPlayers().stream().noneMatch(p -> p.getUserName().equals(username))|| controller.getModel().getCurrentState().getGameStage()==GameStages.ENDED) {</b>
|
||||
@@ -275,7 +275,7 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
<b class="nc"> new Thread(handler).start();</b>
|
||||
<b class="nc"> continue;</b>
|
||||
} else {
|
||||
<b class="nc"> eventAddPlayer.setErrorType(ErrorType.USERNAME_ALREADY_USED);</b>
|
||||
<b class="nc"> eventAddPlayer.setErrorType(ErrorType.INVALID_USERNAME);</b>
|
||||
<b class="nc"> eventAddPlayer.setIsError(true);</b>
|
||||
<b class="nc"> clientSend.writeObject(eventAddPlayer);</b>
|
||||
clientSocket.close();
|
||||
@@ -432,7 +432,7 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -56,7 +56,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/130)
|
||||
(0/132)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -64,7 +64,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/291)
|
||||
(0/302)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -72,7 +72,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/1000)
|
||||
(0/1014)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -118,7 +118,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/15)
|
||||
(0/14)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -126,7 +126,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/73)
|
||||
(0/71)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -134,7 +134,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/123)
|
||||
(0/122)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -169,7 +169,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/116)
|
||||
(0/110)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -204,7 +204,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/182)
|
||||
(0/181)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -258,7 +258,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/50)
|
||||
(0/53)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -266,7 +266,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/124)
|
||||
(0/137)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -274,7 +274,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/426)
|
||||
(0/448)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -336,7 +336,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -56,7 +56,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/130)
|
||||
(0/132)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -64,7 +64,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/291)
|
||||
(0/302)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -72,7 +72,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/1000)
|
||||
(0/1014)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -118,7 +118,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/15)
|
||||
(0/14)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -126,7 +126,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/73)
|
||||
(0/71)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -134,7 +134,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/123)
|
||||
(0/122)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -169,7 +169,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/116)
|
||||
(0/110)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -204,7 +204,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/182)
|
||||
(0/181)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -258,7 +258,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/50)
|
||||
(0/53)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -266,7 +266,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/124)
|
||||
(0/137)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -274,7 +274,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/426)
|
||||
(0/448)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -336,7 +336,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -56,7 +56,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/130)
|
||||
(0/132)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -64,7 +64,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/291)
|
||||
(0/302)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -72,7 +72,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/1000)
|
||||
(0/1014)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -153,7 +153,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/50)
|
||||
(0/53)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -161,7 +161,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/124)
|
||||
(0/137)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -169,7 +169,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/426)
|
||||
(0/448)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -239,7 +239,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/182)
|
||||
(0/181)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -274,7 +274,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/116)
|
||||
(0/110)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -293,7 +293,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/15)
|
||||
(0/14)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -301,7 +301,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/73)
|
||||
(0/71)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -309,7 +309,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/123)
|
||||
(0/122)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -336,7 +336,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -56,7 +56,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/130)
|
||||
(0/132)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -64,7 +64,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/291)
|
||||
(0/302)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -72,7 +72,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/1000)
|
||||
(0/1014)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -118,7 +118,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/15)
|
||||
(0/14)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -126,7 +126,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/73)
|
||||
(0/71)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -134,7 +134,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/123)
|
||||
(0/122)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -169,7 +169,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/116)
|
||||
(0/110)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -204,7 +204,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/182)
|
||||
(0/181)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -258,7 +258,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/50)
|
||||
(0/53)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -266,7 +266,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/124)
|
||||
(0/137)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -274,7 +274,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/426)
|
||||
(0/448)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -336,7 +336,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -56,7 +56,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/130)
|
||||
(0/132)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -64,7 +64,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/291)
|
||||
(0/302)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -72,7 +72,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/1000)
|
||||
(0/1014)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -153,7 +153,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/50)
|
||||
(0/53)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -161,7 +161,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/124)
|
||||
(0/137)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -169,7 +169,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/426)
|
||||
(0/448)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -239,7 +239,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/182)
|
||||
(0/181)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -274,7 +274,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/116)
|
||||
(0/110)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -293,7 +293,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/15)
|
||||
(0/14)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -301,7 +301,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/73)
|
||||
(0/71)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -309,7 +309,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/123)
|
||||
(0/122)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -336,7 +336,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -56,7 +56,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/130)
|
||||
(0/132)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -64,7 +64,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/291)
|
||||
(0/302)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -72,7 +72,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/1000)
|
||||
(0/1014)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -118,7 +118,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/15)
|
||||
(0/14)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -126,7 +126,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/73)
|
||||
(0/71)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -134,7 +134,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/123)
|
||||
(0/122)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -169,7 +169,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/116)
|
||||
(0/110)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -204,7 +204,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/182)
|
||||
(0/181)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -258,7 +258,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/50)
|
||||
(0/53)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -266,7 +266,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/124)
|
||||
(0/137)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -274,7 +274,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/426)
|
||||
(0/448)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -336,7 +336,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -56,7 +56,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/130)
|
||||
(0/132)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -64,7 +64,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/291)
|
||||
(0/302)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -72,7 +72,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/1000)
|
||||
(0/1014)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -153,7 +153,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/50)
|
||||
(0/53)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -161,7 +161,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/124)
|
||||
(0/137)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -169,7 +169,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/426)
|
||||
(0/448)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -239,7 +239,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/182)
|
||||
(0/181)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -274,7 +274,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/116)
|
||||
(0/110)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -293,7 +293,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/15)
|
||||
(0/14)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -301,7 +301,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/73)
|
||||
(0/71)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -309,7 +309,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/123)
|
||||
(0/122)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -336,7 +336,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -56,7 +56,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/130)
|
||||
(0/132)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -64,7 +64,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/291)
|
||||
(0/302)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -72,7 +72,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/1000)
|
||||
(0/1014)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -118,7 +118,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/15)
|
||||
(0/14)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -126,7 +126,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/73)
|
||||
(0/71)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -134,7 +134,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/123)
|
||||
(0/122)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -169,7 +169,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/116)
|
||||
(0/110)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -204,7 +204,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/182)
|
||||
(0/181)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -258,7 +258,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/50)
|
||||
(0/53)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -266,7 +266,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/124)
|
||||
(0/137)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -274,7 +274,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/426)
|
||||
(0/448)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -336,7 +336,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -56,7 +56,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/130)
|
||||
(0/132)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -64,7 +64,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/291)
|
||||
(0/302)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -72,7 +72,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/1000)
|
||||
(0/1014)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -153,7 +153,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/50)
|
||||
(0/53)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -161,7 +161,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/124)
|
||||
(0/137)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -169,7 +169,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/426)
|
||||
(0/448)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -239,7 +239,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/182)
|
||||
(0/181)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -274,7 +274,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/116)
|
||||
(0/110)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -293,7 +293,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/15)
|
||||
(0/14)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -301,7 +301,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/73)
|
||||
(0/71)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -309,7 +309,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/123)
|
||||
(0/122)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -336,7 +336,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -56,7 +56,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/130)
|
||||
(0/132)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -64,7 +64,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/291)
|
||||
(0/302)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -72,7 +72,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/1000)
|
||||
(0/1014)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -153,7 +153,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/50)
|
||||
(0/53)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -161,7 +161,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/124)
|
||||
(0/137)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -169,7 +169,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/426)
|
||||
(0/448)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -239,7 +239,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/182)
|
||||
(0/181)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -274,7 +274,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/116)
|
||||
(0/110)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -293,7 +293,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/15)
|
||||
(0/14)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -301,7 +301,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/73)
|
||||
(0/71)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -309,7 +309,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/123)
|
||||
(0/122)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -336,7 +336,7 @@ it.polimi.ingsw.gc14.View.GUI</div>
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -48,7 +48,7 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/6)
|
||||
(0/5)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -56,7 +56,7 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/31)
|
||||
(0/29)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -64,7 +64,7 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/50)
|
||||
(0/49)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -129,7 +129,7 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/15)
|
||||
(0/14)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -137,7 +137,7 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/73)
|
||||
(0/71)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -145,7 +145,7 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/123)
|
||||
(0/122)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -169,23 +169,50 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
import java.util.List;
|
||||
import java.util.Random;
|
||||
|
||||
//TODO ALL JAVADOC
|
||||
/**
|
||||
* Ambient fire-particle effect rendered on a transparent overlay pane.
|
||||
*
|
||||
* <p>Three particle types float from the screen corners toward the center:
|
||||
* <ul>
|
||||
* <li><b>embers</b> (type 0) — slow, glowing orange circles with a soft halo.</li>
|
||||
* <li><b>sparks</b> (type 1) — fast, short-lived bright particles.</li>
|
||||
* <li><b>dust</b> (type 2) — large, translucent brown drifting circles.</li>
|
||||
* </ul>
|
||||
*
|
||||
* <p>Call {@link #start()} after adding {@link #getPane()} to the scene graph
|
||||
*/
|
||||
public class FireParticleSystem {
|
||||
|
||||
/** Maximum number of live particles at any given time. */
|
||||
private static final int MAX_PARTICLES = 30;
|
||||
/** Minimum nanoseconds between particle spawn batches. */
|
||||
private static final long SPAWN_INTERVAL_NS = 100_000_000L;
|
||||
private static final long FRAME_INTERVAL_NS = 1_000_000_000L / 30; // 30 fps cap
|
||||
private static final int STEPS_PER_FRAME = 3; // physics steps per frame → 3× speed
|
||||
/** Minimum nanoseconds between rendered frames (30 fps cap). */
|
||||
private static final long FRAME_INTERVAL_NS = 1_000_000_000L / 30;
|
||||
/** Physics update steps applied per rendered frame (multiplies effective speed). */
|
||||
private static final int STEPS_PER_FRAME = 3;
|
||||
|
||||
/** Mouse-transparent overlay pane that hosts all particle nodes. */
|
||||
private final Pane pane;
|
||||
/** The scene whose dimensions are used to position and fade particles. */
|
||||
private final Scene scene;
|
||||
/** Currently live particles. */
|
||||
<b class="nc"> private final List<Particle> particles = new ArrayList<>();</b>
|
||||
/** Shared random source for particle initialization and physics noise. */
|
||||
<b class="nc"> private final Random rnd = new Random();</b>
|
||||
private AnimationTimer timer;
|
||||
/** Timestamp (ns) of the last particle spawn batch. */
|
||||
<b class="nc"> private long lastSpawn = 0;</b>
|
||||
/** Timestamp (ns) of the last rendered frame. */
|
||||
<b class="nc"> private long lastFrame = 0;</b>
|
||||
/** {@code true} after the first tick pre-populates the particle pool. */
|
||||
<b class="nc"> private boolean warmedUp = false;</b>
|
||||
|
||||
/**
|
||||
* Creates the particle system bound to the given scene.
|
||||
* The internal overlay pane is transparent and mouse-transparent.
|
||||
*
|
||||
* @param scene the scene whose dimensions are used for particle positioning and fading.
|
||||
*/
|
||||
<b class="nc"> public FireParticleSystem(Scene scene) {</b>
|
||||
<b class="nc"> this.scene = scene;</b>
|
||||
<b class="nc"> pane = new Pane();</b>
|
||||
@@ -193,12 +220,16 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
<b class="nc"> pane.setPickOnBounds(false);</b>
|
||||
}
|
||||
|
||||
/** Returns the transparent overlay pane that holds all particle nodes. */
|
||||
/**
|
||||
* Returns the transparent overlay pane that holds all particle nodes.
|
||||
*
|
||||
* @return the mouse-transparent {@link Pane} overlay.
|
||||
*/
|
||||
<b class="nc"> public Pane getPane() { return pane; }</b>
|
||||
|
||||
/** Starts the animation timer. */
|
||||
public void start() {
|
||||
<b class="nc"> timer = new AnimationTimer() {</b>
|
||||
<b class="nc"> AnimationTimer timer = new AnimationTimer() {</b>
|
||||
@Override
|
||||
public void handle(long now) {
|
||||
<b class="nc"> if (now - lastFrame < FRAME_INTERVAL_NS) return;</b>
|
||||
@@ -209,11 +240,12 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
<b class="nc"> timer.start();</b>
|
||||
}
|
||||
|
||||
/** Stops the animation timer. */
|
||||
public void stop() {
|
||||
<b class="nc"> if (timer != null) timer.stop();</b>
|
||||
}
|
||||
|
||||
/**
|
||||
* Advances the simulation by one frame: pre-warms on first call, spawns new particles,
|
||||
* steps existing ones, removes dead ones, and updates their visual state.
|
||||
*
|
||||
* @param now the current timestamp in nanoseconds from the animation timer.
|
||||
*/
|
||||
private void tick(long now) {
|
||||
<b class="nc"> double w = scene.getWidth();</b>
|
||||
<b class="nc"> double h = scene.getHeight();</b>
|
||||
@@ -256,6 +288,13 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new particle starting near one of the four screen corners.
|
||||
*
|
||||
* @param w scene width in pixels.
|
||||
* @param h scene height in pixels.
|
||||
* @return the newly constructed {@link Particle}.
|
||||
*/
|
||||
private Particle spawnParticle(double w, double h) {
|
||||
<b class="nc"> int corner = rnd.nextInt(4);</b>
|
||||
<b class="nc"> double margin = 0.12;</b>
|
||||
@@ -269,20 +308,52 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
<b class="nc"> return new Particle(x, y, w, h, corner, rnd);</b>
|
||||
}
|
||||
|
||||
// ── Particle ──────────────────────────────────────────────────────────────
|
||||
|
||||
/**
|
||||
* A single fire particle with position, velocity, wobble, and JavaFX visual nodes.
|
||||
* Particles are typed: 0 = ember, 1 = spark, 2 = dust.
|
||||
*/
|
||||
private static class Particle {
|
||||
|
||||
double x, y, vx, vy;
|
||||
/** Current X position in scene pixels. */
|
||||
double x;
|
||||
/** Current Y position in scene pixels. */
|
||||
double y;
|
||||
/** Horizontal velocity component. */
|
||||
double vx;
|
||||
/** Vertical velocity component. */
|
||||
double vy;
|
||||
/** Remaining life fraction (1.0 = full, 0.0 = dead); only decrements for sparks. */
|
||||
double life;
|
||||
double size;
|
||||
double wobblePhase, wobbleSpeed, wobbleAmp;
|
||||
/** Visual radius of the particle's core circle. */
|
||||
final double size;
|
||||
/** Current phase of the sinusoidal wobble. */
|
||||
double wobblePhase;
|
||||
/** Angular speed of the wobble oscillation. */
|
||||
final double wobbleSpeed;
|
||||
/** Amplitude factor of the wobble displacement. */
|
||||
final double wobbleAmp;
|
||||
/** Particle type: 0 = ember, 1 = spark, 2 = dust. */
|
||||
final int type;
|
||||
/** Shared random source used during physics updates. */
|
||||
final Random rnd;
|
||||
|
||||
/** Primary visible circle node. */
|
||||
final Circle core;
|
||||
final Circle glow; // non-null only for embers
|
||||
/** Soft glow halo circle behind {@link #core}; non-null only for embers (type 0). */
|
||||
final Circle glow;
|
||||
|
||||
/**
|
||||
* Initializes the particle at position ({@code x}, {@code y}) with velocity
|
||||
* aimed roughly from the given {@code corner} toward the scene center.
|
||||
*
|
||||
* @param x spawn X coordinate.
|
||||
* @param y spawn Y coordinate.
|
||||
* @param w scene width (used to compute target direction).
|
||||
* @param h scene height (used to compute target direction).
|
||||
* @param corner spawn corner index: 0 = bottom-left, 1 = bottom-right, 2 = top-left, 3 = top-right.
|
||||
* @param rnd shared random source.
|
||||
*/
|
||||
<b class="nc"> Particle(double x, double y, double w, double h, int corner, Random rnd) {</b>
|
||||
<b class="nc"> this.x = x;</b>
|
||||
<b class="nc"> this.y = y;</b>
|
||||
@@ -296,17 +367,17 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
<b class="nc"> double angle = baseAngle + (rnd.nextDouble() - 0.5) * (Math.PI / 3.5);</b>
|
||||
|
||||
double speed;
|
||||
<b class="nc"> if (type == 0) { // ember</b>
|
||||
<b class="nc"> if (type == 0) {</b>
|
||||
<b class="nc"> speed = 0.5 + rnd.nextDouble() * 0.7;</b>
|
||||
<b class="nc"> size = rnd.nextDouble() * 3 + 2;</b>
|
||||
<b class="nc"> glow = new Circle(size * 2.2);</b>
|
||||
<b class="nc"> core = new Circle(size / 2);</b>
|
||||
<b class="nc"> } else if (type == 1) { // spark</b>
|
||||
<b class="nc"> } else if (type == 1) {</b>
|
||||
<b class="nc"> speed = 1.5 + rnd.nextDouble() * 2.0;</b>
|
||||
<b class="nc"> size = rnd.nextDouble() * 1.5 + 0.5;</b>
|
||||
<b class="nc"> glow = null;</b>
|
||||
<b class="nc"> core = new Circle(size / 2);</b>
|
||||
} else { // dust
|
||||
} else {
|
||||
<b class="nc"> speed = 0.2 + rnd.nextDouble() * 0.35;</b>
|
||||
<b class="nc"> size = rnd.nextDouble() * 8 + 5;</b>
|
||||
<b class="nc"> glow = null;</b>
|
||||
@@ -321,6 +392,12 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
<b class="nc"> wobbleAmp = 0.1 + rnd.nextDouble() * 0.4;</b>
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a particle type weighted toward embers (55% ember, 23% spark, 22% dust).
|
||||
*
|
||||
* @param rnd the random source.
|
||||
* @return particle type: 0, 1, or 2.
|
||||
*/
|
||||
private static int weightedType(Random rnd) {
|
||||
<b class="nc"> double r = rnd.nextDouble();</b>
|
||||
<b class="nc"> if (r < 0.55) return 0;</b>
|
||||
@@ -328,16 +405,27 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
<b class="nc"> return 2;</b>
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds this particle's visual nodes to {@code pane} (glow first so core renders on top).
|
||||
*
|
||||
* @param pane the overlay pane to add nodes to.
|
||||
*/
|
||||
void addTo(Pane pane) {
|
||||
<b class="nc"> if (glow != null) pane.getChildren().add(glow);</b>
|
||||
<b class="nc"> pane.getChildren().add(core);</b>
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes this particle's visual nodes from {@code pane}.
|
||||
*
|
||||
* @param pane the overlay pane to remove nodes from.
|
||||
*/
|
||||
void removeFrom(Pane pane) {
|
||||
<b class="nc"> pane.getChildren().remove(core);</b>
|
||||
<b class="nc"> if (glow != null) pane.getChildren().remove(glow);</b>
|
||||
}
|
||||
|
||||
/** Advances this particle by one physics step: applies wobble, moves, and decrements spark life. */
|
||||
void update() {
|
||||
<b class="nc"> wobblePhase += wobbleSpeed;</b>
|
||||
<b class="nc"> vx += Math.sin(wobblePhase) * wobbleAmp * 0.05;</b>
|
||||
@@ -347,12 +435,26 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
<b class="nc"> if (type == 1) life -= 0.008 + rnd.nextDouble() * 0.006;</b>
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns {@code true} when this particle has left the scene bounds or, for sparks, its life reached zero.
|
||||
*
|
||||
* @param w scene width.
|
||||
* @param h scene height.
|
||||
* @return {@code true} if the particle should be removed.
|
||||
*/
|
||||
boolean isDead(double w, double h) {
|
||||
<b class="nc"> double pad = size * 4;</b>
|
||||
<b class="nc"> return x < -pad || x > w + pad || y < -pad || y > h + pad</b>
|
||||
|| (type == 1 && life <= 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates color, opacity, and translate position of this particle's visual nodes
|
||||
* based on distance from scene edges and remaining life.
|
||||
*
|
||||
* @param w scene width.
|
||||
* @param h scene height.
|
||||
*/
|
||||
void updateVisual(double w, double h) {
|
||||
<b class="nc"> double edge = Math.min(w, h) * 0.05;</b>
|
||||
<b class="nc"> double fadeX = Math.min(x / edge, Math.min((w - x) / edge, 1.0));</b>
|
||||
@@ -407,7 +509,7 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -75,7 +75,7 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/116)
|
||||
(0/110)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -104,8 +104,7 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
import javafx.scene.input.KeyEvent;
|
||||
import javafx.scene.input.KeyCombination;
|
||||
import javafx.scene.layout.StackPane;
|
||||
import javafx.scene.media.Media;
|
||||
import javafx.scene.media.MediaPlayer;
|
||||
|
||||
import javafx.scene.paint.Color;
|
||||
import javafx.scene.shape.Rectangle;
|
||||
import javafx.stage.Screen;
|
||||
@@ -122,49 +121,45 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
* main game, and leaderboard scenes based on the current game state.
|
||||
*/
|
||||
<b class="nc"> public class GUI extends Application implements IView {</b>
|
||||
//TODO
|
||||
/** The primary JavaFX stage. */
|
||||
private Stage primaryStage;
|
||||
//TODO
|
||||
/** Latest mini model received from the server. */
|
||||
private volatile MiniModel miniModel;
|
||||
//TODO
|
||||
/** FXML loader for the login scene. */
|
||||
private FXMLLoader loaderLogin;
|
||||
//TODO
|
||||
/** The login scene. */
|
||||
private Scene loginScene;
|
||||
//TODO
|
||||
/** Controller for the login FXML scene. */
|
||||
private LoginFXMLController controllerLogin;
|
||||
//TODO
|
||||
/** FXML loader for the totem selection scene. */
|
||||
private FXMLLoader loaderTotem;
|
||||
//TODO
|
||||
/** The totem selection scene. */
|
||||
private Scene totemScene;
|
||||
//TODO
|
||||
/** Controller for the totem FXML scene. */
|
||||
private TotemFXMLController controllerTotem;
|
||||
//TODO
|
||||
/** FXML loader for the main game scene. */
|
||||
private FXMLLoader loaderMain;
|
||||
|
||||
//TODO
|
||||
/** The main game scene. */
|
||||
private Scene mainScene;
|
||||
//TODO
|
||||
/** Controller for the main FXML scene. */
|
||||
private MainFXMLController controllerMain;
|
||||
//TODO
|
||||
/** FXML loader for the leaderboard scene. */
|
||||
private FXMLLoader loaderLeaderboard;
|
||||
//TODO
|
||||
/** The end-of-game leaderboard scene. */
|
||||
private Scene leaderboardScene;
|
||||
//TODO
|
||||
/** Controller for the leaderboard FXML scene. */
|
||||
private LeaderboardFXMLController controllerLeaderboard;
|
||||
|
||||
//TODO
|
||||
/** Client controller injected before JavaFX startup. */
|
||||
private ClientController controller;
|
||||
//TODO
|
||||
/** When {@code true}, the app re-enters fullscreen automatically after ESC is pressed. */
|
||||
<b class="nc"> private boolean autoReenterFullscreen = true;</b>
|
||||
//TODO
|
||||
/** Guards against overlapping fade transitions. */
|
||||
<b class="nc"> private boolean isFading = false;</b>
|
||||
//TODO
|
||||
private MediaPlayer bgMusic;
|
||||
|
||||
|
||||
/**
|
||||
* JavaFX entry point: loads all FXML scenes, wires up controllers,
|
||||
* configures fullscreen behaviour, and shows the login scene.
|
||||
* configures fullscreen behavior, and shows the login scene.
|
||||
*
|
||||
* @param stage the primary stage provided by the JavaFX runtime.
|
||||
* @throws Exception if any FXML resource cannot be loaded.
|
||||
@@ -196,7 +191,7 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
<b class="nc"> controllerLogin.updateLoginButton(true);</b>
|
||||
<b class="nc"> controllerLogin.showError("");</b>
|
||||
<b class="nc"> fadeToScene(loginScene);</b>
|
||||
}, loginScene);
|
||||
});
|
||||
|
||||
|
||||
|
||||
@@ -247,15 +242,6 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
<b class="nc"> primaryStage.show();</b>
|
||||
<b class="nc"> Platform.runLater(() -> primaryStage.setFullScreen(true));</b>
|
||||
|
||||
try {
|
||||
<b class="nc"> String musicUrl = getClass().getResource("/Audio/Music.mp3").toExternalForm();</b>
|
||||
<b class="nc"> bgMusic = new MediaPlayer(new Media(musicUrl));</b>
|
||||
<b class="nc"> bgMusic.setCycleCount(MediaPlayer.INDEFINITE);</b>
|
||||
<b class="nc"> bgMusic.setVolume(0.4);</b>
|
||||
<b class="nc"> bgMusic.play();</b>
|
||||
} catch (Exception e) {
|
||||
<b class="nc"> System.err.println("Audio unavailable: " + e.getMessage());</b>
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -297,12 +283,22 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
}
|
||||
});
|
||||
}
|
||||
//TODO
|
||||
/**
|
||||
* Wraps the current root of {@code scene} in a {@link StackPane} so that
|
||||
* fade overlay rectangles can be layered over it during scene transitions.
|
||||
*
|
||||
* @param scene the scene whose root to wrap.
|
||||
*/
|
||||
private void wrapScene(Scene scene) {
|
||||
<b class="nc"> Parent root = scene.getRoot();</b>
|
||||
<b class="nc"> scene.setRoot(new StackPane(root));</b>
|
||||
}
|
||||
//TODO
|
||||
/**
|
||||
* Performs a black-overlay crossfade from the current scene to {@code newScene}.
|
||||
* No-op if already fading or if {@code newScene} is already displayed.
|
||||
*
|
||||
* @param newScene the scene to transition to.
|
||||
*/
|
||||
private void fadeToScene(Scene newScene) {
|
||||
<b class="nc"> Scene currentScene = primaryStage.getScene();</b>
|
||||
<b class="nc"> if (currentScene == newScene || isFading) return;</b>
|
||||
@@ -348,7 +344,7 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
* Displays an error on the JavaFX application thread.
|
||||
*
|
||||
* <p>If the server crashed, returns to the login scene and re-enables the login button.
|
||||
* Otherwise delegates to the active scene's error display.
|
||||
* Otherwise, delegates to the active scene's error display.
|
||||
*
|
||||
* @param error the error type.
|
||||
* @param message a human-readable description of the error.
|
||||
@@ -392,7 +388,7 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -75,7 +75,7 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/182)
|
||||
(0/181)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -95,7 +95,6 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
import it.polimi.ingsw.gc14.Model.PlayableCard;
|
||||
import javafx.event.Event;
|
||||
import javafx.fxml.FXML;
|
||||
import javafx.scene.Scene;
|
||||
import javafx.scene.control.ScrollPane;
|
||||
import javafx.stage.Popup;
|
||||
import javafx.geometry.Insets;
|
||||
@@ -113,7 +112,6 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
import javafx.scene.paint.Stop;
|
||||
import javafx.scene.paint.CycleMethod;
|
||||
import javafx.scene.text.Font;
|
||||
import javafx.stage.Stage;
|
||||
import javafx.stage.Window;
|
||||
import javafx.util.Duration;
|
||||
|
||||
@@ -125,29 +123,28 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
* <p>Displays the final player rankings and a winner/game-over banner.
|
||||
*/
|
||||
<b class="nc"> public class LeaderboardFXMLController {</b>
|
||||
|
||||
/** Root pane of the leaderboard scene; used to set the background and anchor the popup. */
|
||||
@FXML private StackPane rootPane;
|
||||
/** Main vertical container holding the outcome label and ranking rows. */
|
||||
@FXML private VBox mainVBox;
|
||||
/** Vertical list populated with one {@code HBox} row per ranked player. */
|
||||
@FXML private VBox rankingList;
|
||||
// title label removed; outcome text is added dynamically in render()
|
||||
//TODO
|
||||
private ClientController controller;
|
||||
//TODO
|
||||
private Popup popup;
|
||||
//TODO
|
||||
private VBox popupContent;
|
||||
//TODO
|
||||
<b class="nc"> private static final Map<String, Image> imageCache = new HashMap<>();</b>
|
||||
//TODO
|
||||
private Scene loginScene;
|
||||
|
||||
//TODO
|
||||
/** Client controller for fetching game state and sending actions. */
|
||||
private ClientController controller;
|
||||
/** Auto-hiding popup that shows detailed player card information. */
|
||||
private Popup popup;
|
||||
/** Content container inside {@link #popup}. */
|
||||
private VBox popupContent;
|
||||
/** Shared image cache to avoid reloading resources multiple times. */
|
||||
<b class="nc"> private static final Map<String, Image> imageCache = new HashMap<>();</b>
|
||||
/** Action run when the player returns to the login screen (disconnect + scene switch). */
|
||||
private Runnable action;
|
||||
|
||||
/** Returns a cached {@link Image} for the given classpath {@code path}, loading it on first access. */
|
||||
private Image loadImage(String path) {
|
||||
<b class="nc"> return imageCache.computeIfAbsent(path,</b>
|
||||
<b class="nc"> p -> new Image(getClass().getResourceAsStream(p)));</b>
|
||||
<b class="nc"> p -> new Image(Objects.requireNonNull(getClass().getResourceAsStream(p))));</b>
|
||||
}
|
||||
|
||||
|
||||
@@ -156,11 +153,9 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
*
|
||||
* @param controller the client controller.
|
||||
* @param action the action to run when the player returns to the login screen.
|
||||
* @param loginScene the login scene to show on exit.
|
||||
*/
|
||||
public void setController(ClientController controller, Runnable action, Scene loginScene) {
|
||||
public void setController(ClientController controller, Runnable action) {
|
||||
<b class="nc"> this.controller = controller;</b>
|
||||
<b class="nc"> this.loginScene = loginScene;</b>
|
||||
<b class="nc"> this.action = action;</b>
|
||||
}
|
||||
|
||||
@@ -492,7 +487,7 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -91,6 +91,7 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
|
||||
import it.polimi.ingsw.gc14.Controller.ClientController;
|
||||
import it.polimi.ingsw.gc14.ErrorType;
|
||||
import it.polimi.ingsw.gc14.Network.IClient;
|
||||
import it.polimi.ingsw.gc14.Network.NetworkConfig;
|
||||
import it.polimi.ingsw.gc14.Network.InterfaceResolver;
|
||||
import it.polimi.ingsw.gc14.Network.RMI.Client.RMIClient;
|
||||
@@ -108,8 +109,7 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
import javafx.stage.Screen;
|
||||
import javafx.util.Duration;
|
||||
|
||||
import java.net.*;
|
||||
import java.util.Enumeration;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* FXML controller for the login scene.
|
||||
@@ -118,33 +118,33 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
* and initiates the connection to the server.
|
||||
*/
|
||||
<b class="nc"> public class LoginFXMLController {</b>
|
||||
//TODO
|
||||
/** Background image displayed behind the login form. */
|
||||
@FXML private ImageView backgroundImage;
|
||||
//TODO
|
||||
/** Text field for the player's username. */
|
||||
@FXML private TextField campoNome;
|
||||
//TODO
|
||||
/** Text field for the desired number of players. */
|
||||
@FXML private TextField campoNumPlayers;
|
||||
//TODO
|
||||
/** Text field for the server IP address. */
|
||||
@FXML private TextField campoIP;
|
||||
//TODO
|
||||
/** Button that submits the login form. */
|
||||
@FXML private Button btnAccedi;
|
||||
//TODO
|
||||
/** Label used to show error or success messages. */
|
||||
@FXML private Label labelErrore;
|
||||
//TODO
|
||||
/** VBox containing the login form controls. */
|
||||
@FXML private VBox formPanel;
|
||||
//TODO
|
||||
/** Toggle container for switching between RMI and TCP. */
|
||||
@FXML private StackPane protocolToggle;
|
||||
//TODO
|
||||
/** Sliding thumb inside the protocol toggle. */
|
||||
@FXML private Region toggleThumb;
|
||||
//TODO
|
||||
/** Label for the RMI side of the protocol toggle. */
|
||||
@FXML private Label labelRMI;
|
||||
//TODO
|
||||
/** Label for the TCP side of the protocol toggle. */
|
||||
@FXML private Label labelTCP;
|
||||
//TODO
|
||||
/** {@code true} when RMI is selected; {@code false} for TCP. */
|
||||
<b class="nc"> private boolean isRMI = true;</b>
|
||||
//TODO
|
||||
/** Client controller used to initiate the connection. */
|
||||
private ClientController controller;
|
||||
//TODO
|
||||
/** CSS pseudo-class applied to the active protocol label. */
|
||||
<b class="nc"> private final PseudoClass activeProtocolPseudo = PseudoClass.getPseudoClass("active-protocol");</b>
|
||||
|
||||
/**
|
||||
@@ -160,7 +160,7 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
@FXML
|
||||
public void initialize() {
|
||||
// Background setup
|
||||
<b class="nc"> Image img = new Image(getClass().getResourceAsStream("/GUIImages/BackgroundLogin.png"));</b>
|
||||
<b class="nc"> Image img = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/GUIImages/BackgroundLogin.png")));</b>
|
||||
<b class="nc"> backgroundImage.setImage(img);</b>
|
||||
<b class="nc"> Rectangle2D screenBounds = Screen.getPrimary().getBounds();</b>
|
||||
<b class="nc"> backgroundImage.setFitWidth(screenBounds.getWidth());</b>
|
||||
@@ -185,7 +185,6 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
<b class="nc"> tt.setToX(isRMI ? 0 : 110);</b>
|
||||
<b class="nc"> tt.play();</b>
|
||||
|
||||
// pseudoClassStateChanged preserves layout properties unlike direct style mutation
|
||||
<b class="nc"> labelRMI.pseudoClassStateChanged(activeProtocolPseudo, isRMI);</b>
|
||||
<b class="nc"> labelTCP.pseudoClassStateChanged(activeProtocolPseudo, !isRMI);</b>
|
||||
}
|
||||
@@ -248,8 +247,9 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
|
||||
/** Connects to the server using the selected protocol and transitions to the waiting state on success. */
|
||||
private void connect(String nome, String ip, int numPlayers, String localInterface) {
|
||||
IClient client;
|
||||
<b class="nc"> if (isRMI) {</b>
|
||||
<b class="nc"> RMIClient client = new RMIClient(controller, ip, NetworkConfig.RMI_PORT, localInterface);</b>
|
||||
<b class="nc"> client = new RMIClient(controller, ip, NetworkConfig.RMI_PORT, localInterface);</b>
|
||||
<b class="nc"> ErrorType serverResponse = client.connect(nome, numPlayers);</b>
|
||||
<b class="nc"> if (serverResponse == null) {</b>
|
||||
<b class="nc"> controller.setClient(client);</b>
|
||||
@@ -261,7 +261,7 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
});
|
||||
}
|
||||
} else {
|
||||
<b class="nc"> TCPClient client = new TCPClient(controller, ip, NetworkConfig.TCP_PORT, NetworkConfig.HEARTBEAT_PORT);</b>
|
||||
<b class="nc"> client = new TCPClient(controller, ip, NetworkConfig.TCP_PORT, NetworkConfig.HEARTBEAT_PORT);</b>
|
||||
<b class="nc"> ErrorType serverResponse = client.connect(nome, numPlayers);</b>
|
||||
<b class="nc"> if (serverResponse == null) {</b>
|
||||
<b class="nc"> controller.setClient(client);</b>
|
||||
@@ -323,7 +323,7 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -59,7 +59,7 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/50)
|
||||
(0/53)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -67,7 +67,7 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/124)
|
||||
(0/137)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -75,7 +75,7 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/426)
|
||||
(0/448)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -95,21 +95,16 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
import it.polimi.ingsw.gc14.Model.Cards.TribeCard;
|
||||
import it.polimi.ingsw.gc14.Model.Orders.OrderPlayer;
|
||||
import it.polimi.ingsw.gc14.Network.EventType;
|
||||
import it.polimi.ingsw.gc14.Network.NetworkEvent;
|
||||
import javafx.application.Platform;
|
||||
import javafx.animation.PauseTransition;
|
||||
import javafx.animation.ScaleTransition;
|
||||
import javafx.animation.TranslateTransition;
|
||||
import javafx.application.Platform;
|
||||
import javafx.beans.value.ChangeListener;
|
||||
import javafx.beans.value.ObservableValue;
|
||||
import javafx.event.Event;
|
||||
import javafx.fxml.FXML;
|
||||
import javafx.geometry.Bounds;
|
||||
import javafx.geometry.Insets;
|
||||
import javafx.geometry.Pos;
|
||||
import javafx.geometry.Rectangle2D;
|
||||
import javafx.scene.Cursor;
|
||||
import javafx.scene.Node;
|
||||
import javafx.scene.Scene;
|
||||
import javafx.scene.control.Button;
|
||||
import javafx.scene.control.Label;
|
||||
import javafx.scene.control.ScrollPane;
|
||||
@@ -122,7 +117,6 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
import javafx.scene.shape.*;
|
||||
import javafx.scene.text.Font;
|
||||
import javafx.stage.Popup;
|
||||
import javafx.stage.Screen;
|
||||
import javafx.stage.Window;
|
||||
import javafx.util.Duration;
|
||||
|
||||
@@ -135,47 +129,49 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
* the player's hand, and action buttons (skip, details).
|
||||
*/
|
||||
<b class="nc"> public class MainFXMLController {</b>
|
||||
//TODO
|
||||
@FXML private GridPane leftGrid;
|
||||
//TODO
|
||||
/** Scrollable container holding all player side-panel cards. */
|
||||
@FXML private ScrollPane playerSide;
|
||||
//TODO
|
||||
/** Root HBox containing all main scene elements. */
|
||||
@FXML private HBox mainHBox;
|
||||
//TODO
|
||||
@FXML private ImageView backgroundImage;
|
||||
//TODO
|
||||
/** HBox holding the board slot and order cards. */
|
||||
@FXML private HBox board;
|
||||
//TODO
|
||||
/** HBox holding the upper tribe card row (and upper building stack). */
|
||||
@FXML private HBox upperList;
|
||||
//TODO
|
||||
/** HBox holding the lower tribe card row (and lower building stack). */
|
||||
@FXML private HBox lowerList;
|
||||
//TODO
|
||||
/** HBox displaying the local player's card piles. */
|
||||
@FXML private HBox myHand;
|
||||
//TODO
|
||||
/** Button that sends a skip-turn command. */
|
||||
@FXML private Button skipBtn;
|
||||
//TODO
|
||||
/** Button that opens the game details popup. */
|
||||
@FXML private Button detailsBtn;
|
||||
//TODO
|
||||
/** Button that disconnects and closes the client. */
|
||||
@FXML private Button quitBtn;
|
||||
/** Label showing the current round number and game stage. */
|
||||
@FXML private Label infoText;
|
||||
//TODO
|
||||
/** Maps each player's username to their current food-value label in the side panel. */
|
||||
<b class="nc"> private final Map<String, Label> foodLabels = new HashMap<>();</b>
|
||||
//TODO
|
||||
/** Maps each player's username to their current prestige-value label in the side panel. */
|
||||
<b class="nc"> private final Map<String, Label> prestigeLabels = new HashMap<>();</b>
|
||||
//TODO
|
||||
/** Maps each player's username to their player-card VBox in the side panel. */
|
||||
<b class="nc"> private final Map<String, VBox> playerCards = new HashMap<>();</b>
|
||||
//TODO
|
||||
/** Maps each player's username to their ordered list of card-type icon ImageViews. */
|
||||
<b class="nc"> private final Map<String, List<ImageView>> iconViews = new HashMap<>();</b>
|
||||
//TODO
|
||||
/** Shared popup used for card previews and building selection. */
|
||||
private Popup popup;
|
||||
//TODO
|
||||
/** HBox inside {@link #popup} that holds the displayed card images. */
|
||||
private HBox popupCards;
|
||||
//TODO
|
||||
/** Client controller for fetching game state and sending player actions. */
|
||||
private ClientController controller;
|
||||
|
||||
/** {@code true} when the last received event was an error response. */
|
||||
private boolean isError;
|
||||
|
||||
/** Sets the error flag; called by {@link GUI} before delegating to {@link #render()}. */
|
||||
/**
|
||||
* Sets the error flag; called by {@link GUI} before delegating to {@link #render()}.
|
||||
*
|
||||
* @param error {@code true} if the last received event was an error response.
|
||||
*/
|
||||
<b class="nc"> public void setError(boolean error) { this.isError = error; }</b>
|
||||
|
||||
// ==== IMAGE CACHE ====
|
||||
@@ -184,7 +180,7 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
/** Returns a cached {@link Image} for the given classpath {@code path}, loading it on first access. */
|
||||
private Image loadImage(String path) {
|
||||
<b class="nc"> return imageCache.computeIfAbsent(path,</b>
|
||||
<b class="nc"> p -> new Image(getClass().getResourceAsStream(p)));</b>
|
||||
<b class="nc"> p -> new Image(Objects.requireNonNull(getClass().getResourceAsStream(p))));</b>
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -195,6 +191,30 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
public void setController(ClientController controller) {
|
||||
<b class="nc"> this.controller = controller;</b>
|
||||
<b class="nc"> skipBtn.setOnAction(e -> controller.skipTurn());</b>
|
||||
|
||||
<b class="nc"> PauseTransition quitTimer = new PauseTransition(javafx.util.Duration.seconds(3));</b>
|
||||
<b class="nc"> quitTimer.setOnFinished(e -> {</b>
|
||||
<b class="nc"> quitBtn.setText("Quit");</b>
|
||||
<b class="nc"> quitBtn.setStyle("");</b>
|
||||
});
|
||||
<b class="nc"> final boolean[] quitPending = {false};</b>
|
||||
<b class="nc"> quitBtn.setOnAction(e -> {</b>
|
||||
<b class="nc"> if (quitPending[0]) {</b>
|
||||
<b class="nc"> controller.disconnect();</b>
|
||||
<b class="nc"> Platform.exit();</b>
|
||||
<b class="nc"> System.exit(0);</b>
|
||||
} else {
|
||||
<b class="nc"> quitPending[0] = true;</b>
|
||||
<b class="nc"> quitBtn.setText("Sure?");</b>
|
||||
<b class="nc"> quitBtn.setStyle("-fx-background-color: #c0392b; -fx-text-fill: white;");</b>
|
||||
<b class="nc"> quitTimer.playFromStart();</b>
|
||||
<b class="nc"> quitTimer.setOnFinished(ev -> {</b>
|
||||
<b class="nc"> quitPending[0] = false;</b>
|
||||
<b class="nc"> quitBtn.setText("Quit");</b>
|
||||
<b class="nc"> quitBtn.setStyle("");</b>
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/** Initializes the scene: loads fonts, sets up the popup, and registers input listeners. */
|
||||
@@ -204,6 +224,7 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
|
||||
<b class="nc"> addHoverZoom(skipBtn);</b>
|
||||
<b class="nc"> addHoverZoom(detailsBtn);</b>
|
||||
<b class="nc"> addHoverZoom(quitBtn);</b>
|
||||
<b class="nc"> popup = new Popup();</b>
|
||||
<b class="nc"> mainHBox.sceneProperty().addListener((obs, oldScene, newScene) -> {</b>
|
||||
<b class="nc"> if (newScene != null) {</b>
|
||||
@@ -234,7 +255,9 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
/** Incrementally re-renders only the parts of the scene affected by the last network event. */
|
||||
public void render() {
|
||||
<b class="nc"> if(foodLabels.isEmpty() || controller.getMiniModel().lastEvent == null</b>
|
||||
<b class="nc"> || controller.getMiniModel().lastEvent.getEventType().equals(EventType.TOTEM_CHOICE))</b>
|
||||
<b class="nc"> || controller.getMiniModel().lastEvent.getEventType().equals(EventType.TOTEM_CHOICE)</b>
|
||||
<b class="nc"> || controller.getMiniModel().lastEvent.getEventType().equals(EventType.RECONNECT_PLAYER)</b>
|
||||
<b class="nc"> || controller.getMiniModel().lastEvent.getEventType().equals(EventType.DISCONNECTED_PLAYER))</b>
|
||||
<b class="nc"> buildSidePanel();</b>
|
||||
<b class="nc"> if(isError)</b>
|
||||
{
|
||||
@@ -242,7 +265,7 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
<b class="nc"> isError=false;</b>
|
||||
return;
|
||||
}
|
||||
<b class="nc"> if(controller.getMiniModel().lastEvent==null ||controller.getMiniModel().lastEvent.getEventType().equals(EventType.TOTEM_CHOICE) || controller.getMiniModel().lastEvent.getEventType().equals(EventType.NEXT_ROUND)) {</b>
|
||||
<b class="nc"> if(controller.getMiniModel().lastEvent==null ||controller.getMiniModel().lastEvent.getEventType().equals(EventType.TOTEM_CHOICE) || controller.getMiniModel().lastEvent.getEventType().equals(EventType.NEXT_ROUND) || controller.getMiniModel().lastEvent.getEventType().equals(EventType.RECONNECT_PLAYER) || controller.getMiniModel().lastEvent.getEventType().equals(EventType.DISCONNECTED_PLAYER)) {</b>
|
||||
<b class="nc"> renderMyHand();</b>
|
||||
<b class="nc"> renderUpper();</b>
|
||||
<b class="nc"> renderBoard();</b>
|
||||
@@ -478,7 +501,7 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
// ==== GROUPS ====
|
||||
/** Builds the full side panel from scratch, creating a player card for each connected player. */
|
||||
private void buildSidePanel() {
|
||||
<b class="nc"> infoText.setText("Round: "+Integer.toString(controller.getMiniModel().currentState.getRound()) + " • " + controller.getMiniModel().currentState.getGameStage().toString());</b>
|
||||
<b class="nc"> infoText.setText("Round: "+ controller.getMiniModel().currentState.getRound() + " • " + controller.getMiniModel().currentState.getGameStage().toString());</b>
|
||||
<b class="nc"> VBox playerList = new VBox();</b>
|
||||
<b class="nc"> playerList.setFillWidth(true);</b>
|
||||
<b class="nc"> for (Player p : controller.getMiniModel().players.values()) {</b>
|
||||
@@ -491,10 +514,9 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
|
||||
/** Updates food/prestige labels, current-player highlight, card-icon opacity, and plays error shake if needed. */
|
||||
private void updateSidePanel() {
|
||||
<b class="nc"> infoText.setText("Round: "+Integer.toString(controller.getMiniModel().currentState.getRound()) + " • " + controller.getMiniModel().currentState.getGameStage().toString());</b>
|
||||
<b class="nc"> infoText.setText("Round: "+ controller.getMiniModel().currentState.getRound() + " • " + controller.getMiniModel().currentState.getGameStage().toString());</b>
|
||||
<b class="nc"> if (controller.getMiniModel().currentState.getCurrentPlayer() == null) return;</b>
|
||||
<b class="nc"> String current = controller.getMiniModel().currentState.getCurrentPlayer().getUserName();</b>
|
||||
// ordine: building, artists, gatherers, inventors, builders, shamans, hunters
|
||||
<b class="nc"> String[] fields = {"building", "artists", "gatherers", "inventors", "builders", "shamans", "hunters"};</b>
|
||||
|
||||
<b class="nc"> for (Player p : controller.getMiniModel().players.values()) {</b>
|
||||
@@ -625,8 +647,13 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
<b class="nc"> int i = 0;</b>
|
||||
<b class="nc"> for (TribeCard card : controller.getMiniModel().upperListTribeCards) {</b>
|
||||
<b class="nc"> final int index = i;</b>
|
||||
<b class="nc"> StackPane img = createCard(card, true, true, upperList);</b>
|
||||
<b class="nc"> img.setOnMouseClicked(e -> controller.drawUpperTribeCard(index));</b>
|
||||
StackPane img;
|
||||
<b class="nc"> if(!card.isEventCard()) {</b>
|
||||
<b class="nc"> img = createCard(card, true, true, upperList);</b>
|
||||
<b class="nc"> img.setOnMouseClicked(e -> controller.drawUpperTribeCard(index));</b>
|
||||
} else {
|
||||
<b class="nc"> img = createCard(card, false, false, upperList);</b>
|
||||
}
|
||||
<b class="nc"> upperList.getChildren().add(img);</b>
|
||||
<b class="nc"> i++;</b>
|
||||
}
|
||||
@@ -642,8 +669,13 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
<b class="nc"> int i = 0;</b>
|
||||
<b class="nc"> for (TribeCard card : controller.getMiniModel().lowerListTribeCards) {</b>
|
||||
<b class="nc"> final int index = i;</b>
|
||||
<b class="nc"> StackPane img = createCard(card, true, true, lowerList);</b>
|
||||
<b class="nc"> img.setOnMouseClicked(e -> controller.drawLowerTribeCard(index));</b>
|
||||
StackPane img;
|
||||
<b class="nc"> if(!card.isEventCard()) {</b>
|
||||
<b class="nc"> img = createCard(card, true, true, lowerList);</b>
|
||||
<b class="nc"> img.setOnMouseClicked(e -> controller.drawLowerTribeCard(index));</b>
|
||||
} else {
|
||||
<b class="nc"> img = createCard(card, false, false, lowerList);</b>
|
||||
}
|
||||
<b class="nc"> lowerList.getChildren().add(img);</b>
|
||||
<b class="nc"> i++;</b>
|
||||
}
|
||||
@@ -678,7 +710,6 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
/** Adds the era-specific deck back image to the board. */
|
||||
private void renderDeck() {
|
||||
<b class="nc"> String path = switch (controller.getMiniModel().currentState.getEra()) {</b>
|
||||
<b class="nc"> case 1 -> "/GUIImages/Backs/back-001.png";</b>
|
||||
<b class="nc"> case 2 -> "/GUIImages/Backs/back-030.png";</b>
|
||||
<b class="nc"> case 3 -> "/GUIImages/Backs/back-058.png";</b>
|
||||
<b class="nc"> default -> "/GUIImages/Backs/back-001.png";</b>
|
||||
@@ -687,8 +718,6 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
<b class="nc"> back.fitHeightProperty().bind(board.sceneProperty().get().heightProperty().subtract(56).divide(4).multiply(0.94));</b>
|
||||
<b class="nc"> back.setPreserveRatio(true);</b>
|
||||
<b class="nc"> addClip(back);</b>
|
||||
<b class="nc"> addShadow(back);</b>
|
||||
<b class="nc"> addHoverZoom(back);</b>
|
||||
<b class="nc"> board.getChildren().add(back);</b>
|
||||
}
|
||||
|
||||
@@ -736,7 +765,6 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
<b class="nc"> totem.setLayoutX(nv.doubleValue() * 0.364);</b>
|
||||
});
|
||||
|
||||
// initialize immediately if already laid out
|
||||
<b class="nc"> if (card.getHeight() > 0) totem.setLayoutY(card.getHeight() *(yRatio-0.196));</b>
|
||||
<b class="nc"> if (card.getWidth() > 0) totem.setLayoutX(card.getWidth() * 0.364);</b>
|
||||
|
||||
@@ -896,7 +924,7 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -105,6 +105,7 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
import javafx.util.Duration;
|
||||
|
||||
import java.util.Locale;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* FXML controller for the totem selection scene.
|
||||
@@ -113,20 +114,20 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
* other players see a waiting banner.
|
||||
*/
|
||||
<b class="nc"> public class TotemFXMLController {</b>
|
||||
//TODO
|
||||
/** Background image displayed behind the totem selection grid. */
|
||||
@FXML private ImageView backgroundImage;
|
||||
//TODO
|
||||
/** HBox containing the totem card widgets. */
|
||||
@FXML private HBox mainHBox;
|
||||
//TODO
|
||||
/** Banner label showing whose turn it is to choose a totem. */
|
||||
@FXML private Label turnBanner;
|
||||
//TODO
|
||||
/** Button that submits the selected totem to the server. */
|
||||
@FXML private Button confirmButton;
|
||||
|
||||
//TODO
|
||||
/** Client controller for sending the totem choice. */
|
||||
private ClientController controller;
|
||||
//TODO
|
||||
/** Index of the currently selected totem, or {@code -1} if none selected. */
|
||||
<b class="nc"> private int selectedIndex = -1;</b>
|
||||
//TODO
|
||||
/** The {@link StackPane} frame of the currently selected totem card, or {@code null}. */
|
||||
<b class="nc"> private StackPane selectedFrame = null;</b>
|
||||
|
||||
/**
|
||||
@@ -141,7 +142,7 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
/** Initializes the scene: sets the background image to fill the screen. */
|
||||
@FXML
|
||||
public void initialize() {
|
||||
<b class="nc"> Image img = new Image(getClass().getResourceAsStream("/GUIImages/Background.png"));</b>
|
||||
<b class="nc"> Image img = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/GUIImages/Background.png")));</b>
|
||||
<b class="nc"> backgroundImage.setImage(img);</b>
|
||||
<b class="nc"> Rectangle2D screenBounds = Screen.getPrimary().getBounds();</b>
|
||||
<b class="nc"> backgroundImage.setFitWidth(screenBounds.getWidth());</b>
|
||||
@@ -211,7 +212,7 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
|
||||
/** Builds a totem card widget; if {@code interactive}, wires click/hover handlers and selection logic. */
|
||||
private VBox buildCard(Totems totem, int idx, boolean interactive) {
|
||||
<b class="nc"> ImageView img = new ImageView(new Image(getClass().getResourceAsStream("/GUIImages/Totems/totem_" + String.valueOf(totem).toLowerCase(Locale.ROOT) + ".png")));</b>
|
||||
<b class="nc"> ImageView img = new ImageView(new Image(Objects.requireNonNull(getClass().getResourceAsStream("/GUIImages/Totems/totem_" + String.valueOf(totem).toLowerCase(Locale.ROOT) + ".png"))));</b>
|
||||
<b class="nc"> img.setFitHeight(150);</b>
|
||||
<b class="nc"> img.setPreserveRatio(true);</b>
|
||||
|
||||
@@ -301,7 +302,7 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
<b class="nc"> "-fx-text-fill: " + (selected ? "#FFD700" : "#ffffff") + ";";</b>
|
||||
}
|
||||
|
||||
/** Returns the totem name with only the first letter capitalised. */
|
||||
/** Returns the totem name with only the first letter capitalized. */
|
||||
private String capitalize(Totems t) {
|
||||
<b class="nc"> String s = t.name().toLowerCase(Locale.ROOT);</b>
|
||||
<b class="nc"> return Character.toUpperCase(s.charAt(0)) + s.substring(1);</b>
|
||||
@@ -339,7 +340,7 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -53,10 +53,10 @@ it.polimi.ingsw.gc14.View.TUI</div>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
53.3%
|
||||
58.5%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(24/45)
|
||||
(24/41)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -69,10 +69,10 @@ it.polimi.ingsw.gc14.View.TUI</div>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
38.7%
|
||||
36.3%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(84/217)
|
||||
(82/226)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -150,19 +150,19 @@ it.polimi.ingsw.gc14.View.TUI</div>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
82.4%
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(14/17)
|
||||
(14/14)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat"/>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
88.9%
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(24/27)
|
||||
(22/22)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -181,7 +181,7 @@ it.polimi.ingsw.gc14.View.TUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/17)
|
||||
(0/16)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -197,7 +197,7 @@ it.polimi.ingsw.gc14.View.TUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/117)
|
||||
(0/131)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -224,7 +224,7 @@ it.polimi.ingsw.gc14.View.TUI</div>
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -53,10 +53,10 @@ it.polimi.ingsw.gc14.View.TUI</div>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
53.3%
|
||||
58.5%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(24/45)
|
||||
(24/41)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -69,10 +69,10 @@ it.polimi.ingsw.gc14.View.TUI</div>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
38.7%
|
||||
36.3%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(84/217)
|
||||
(82/226)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -115,19 +115,19 @@ it.polimi.ingsw.gc14.View.TUI</div>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
82.4%
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(14/17)
|
||||
(14/14)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat"/>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
88.9%
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(24/27)
|
||||
(22/22)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -146,7 +146,7 @@ it.polimi.ingsw.gc14.View.TUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/17)
|
||||
(0/16)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -162,7 +162,7 @@ it.polimi.ingsw.gc14.View.TUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/117)
|
||||
(0/131)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -224,7 +224,7 @@ it.polimi.ingsw.gc14.View.TUI</div>
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -53,10 +53,10 @@ it.polimi.ingsw.gc14.View.TUI</div>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
53.3%
|
||||
58.5%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(24/45)
|
||||
(24/41)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -69,10 +69,10 @@ it.polimi.ingsw.gc14.View.TUI</div>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
38.7%
|
||||
36.3%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(84/217)
|
||||
(82/226)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -153,7 +153,7 @@ it.polimi.ingsw.gc14.View.TUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/17)
|
||||
(0/16)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -169,7 +169,7 @@ it.polimi.ingsw.gc14.View.TUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/117)
|
||||
(0/131)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -185,19 +185,19 @@ it.polimi.ingsw.gc14.View.TUI</div>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
82.4%
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(14/17)
|
||||
(14/14)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat"/>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
88.9%
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(24/27)
|
||||
(22/22)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -224,7 +224,7 @@ it.polimi.ingsw.gc14.View.TUI</div>
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -53,10 +53,10 @@ it.polimi.ingsw.gc14.View.TUI</div>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
53.3%
|
||||
58.5%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(24/45)
|
||||
(24/41)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -69,10 +69,10 @@ it.polimi.ingsw.gc14.View.TUI</div>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
38.7%
|
||||
36.3%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(84/217)
|
||||
(82/226)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -118,7 +118,7 @@ it.polimi.ingsw.gc14.View.TUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/17)
|
||||
(0/16)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -134,7 +134,7 @@ it.polimi.ingsw.gc14.View.TUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/117)
|
||||
(0/131)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -185,19 +185,19 @@ it.polimi.ingsw.gc14.View.TUI</div>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
82.4%
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(14/17)
|
||||
(14/14)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat"/>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
88.9%
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(24/27)
|
||||
(22/22)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -224,7 +224,7 @@ it.polimi.ingsw.gc14.View.TUI</div>
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -53,10 +53,10 @@ it.polimi.ingsw.gc14.View.TUI</div>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
53.3%
|
||||
58.5%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(24/45)
|
||||
(24/41)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -69,10 +69,10 @@ it.polimi.ingsw.gc14.View.TUI</div>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
38.7%
|
||||
36.3%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(84/217)
|
||||
(82/226)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -115,19 +115,19 @@ it.polimi.ingsw.gc14.View.TUI</div>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
82.4%
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(14/17)
|
||||
(14/14)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat"/>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
88.9%
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(24/27)
|
||||
(22/22)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -181,7 +181,7 @@ it.polimi.ingsw.gc14.View.TUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/17)
|
||||
(0/16)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -197,7 +197,7 @@ it.polimi.ingsw.gc14.View.TUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/117)
|
||||
(0/131)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -224,7 +224,7 @@ it.polimi.ingsw.gc14.View.TUI</div>
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -53,10 +53,10 @@ it.polimi.ingsw.gc14.View.TUI</div>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
53.3%
|
||||
58.5%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(24/45)
|
||||
(24/41)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -69,10 +69,10 @@ it.polimi.ingsw.gc14.View.TUI</div>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
38.7%
|
||||
36.3%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(84/217)
|
||||
(82/226)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -118,7 +118,7 @@ it.polimi.ingsw.gc14.View.TUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/17)
|
||||
(0/16)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -134,7 +134,7 @@ it.polimi.ingsw.gc14.View.TUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/117)
|
||||
(0/131)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -185,19 +185,19 @@ it.polimi.ingsw.gc14.View.TUI</div>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
82.4%
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(14/17)
|
||||
(14/14)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat"/>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
88.9%
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(24/27)
|
||||
(22/22)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -224,7 +224,7 @@ it.polimi.ingsw.gc14.View.TUI</div>
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -53,10 +53,10 @@ it.polimi.ingsw.gc14.View.TUI</div>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
53.3%
|
||||
58.5%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(24/45)
|
||||
(24/41)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -69,10 +69,10 @@ it.polimi.ingsw.gc14.View.TUI</div>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
38.7%
|
||||
36.3%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(84/217)
|
||||
(82/226)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -115,19 +115,19 @@ it.polimi.ingsw.gc14.View.TUI</div>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
82.4%
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(14/17)
|
||||
(14/14)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat"/>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
88.9%
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(24/27)
|
||||
(22/22)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -181,7 +181,7 @@ it.polimi.ingsw.gc14.View.TUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/17)
|
||||
(0/16)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -197,7 +197,7 @@ it.polimi.ingsw.gc14.View.TUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/117)
|
||||
(0/131)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -224,7 +224,7 @@ it.polimi.ingsw.gc14.View.TUI</div>
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -53,10 +53,10 @@ it.polimi.ingsw.gc14.View.TUI</div>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
53.3%
|
||||
58.5%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(24/45)
|
||||
(24/41)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -69,10 +69,10 @@ it.polimi.ingsw.gc14.View.TUI</div>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
38.7%
|
||||
36.3%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(84/217)
|
||||
(82/226)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -118,7 +118,7 @@ it.polimi.ingsw.gc14.View.TUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/17)
|
||||
(0/16)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -134,35 +134,7 @@ it.polimi.ingsw.gc14.View.TUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/117)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name"><a href="sources/source-2.html">BorderStyle</a></td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(1/1)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
82.4%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(14/17)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat"/>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
88.9%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(24/27)
|
||||
(0/131)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -199,6 +171,34 @@ it.polimi.ingsw.gc14.View.TUI</div>
|
||||
<span class="absValue">
|
||||
(60/73)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name"><a href="sources/source-2.html">BorderStyle</a></td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(1/1)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(14/14)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat"/>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(22/22)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
@@ -224,7 +224,7 @@ it.polimi.ingsw.gc14.View.TUI</div>
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -53,10 +53,10 @@ it.polimi.ingsw.gc14.View.TUI</div>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
53.3%
|
||||
58.5%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(24/45)
|
||||
(24/41)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -69,10 +69,10 @@ it.polimi.ingsw.gc14.View.TUI</div>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
38.7%
|
||||
36.3%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(84/217)
|
||||
(82/226)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -103,6 +103,34 @@ it.polimi.ingsw.gc14.View.TUI</div>
|
||||
<a href="index_SORT_BY_LINE.html">Line, %</a>
|
||||
</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name"><a href="sources/source-2.html">BorderStyle</a></td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(1/1)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(14/14)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat"/>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(22/22)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name"><a href="sources/source-1.html">AsciiTable</a></td>
|
||||
<td class="coverageStat">
|
||||
@@ -136,34 +164,6 @@ it.polimi.ingsw.gc14.View.TUI</div>
|
||||
<span class="absValue">
|
||||
(60/73)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name"><a href="sources/source-2.html">BorderStyle</a></td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(1/1)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
82.4%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(14/17)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat"/>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
88.9%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(24/27)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@@ -181,7 +181,7 @@ it.polimi.ingsw.gc14.View.TUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/17)
|
||||
(0/16)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -197,7 +197,7 @@ it.polimi.ingsw.gc14.View.TUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/117)
|
||||
(0/131)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -224,7 +224,7 @@ it.polimi.ingsw.gc14.View.TUI</div>
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -53,10 +53,10 @@ it.polimi.ingsw.gc14.View.TUI</div>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
53.3%
|
||||
58.5%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(24/45)
|
||||
(24/41)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -69,10 +69,10 @@ it.polimi.ingsw.gc14.View.TUI</div>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
38.7%
|
||||
36.3%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(84/217)
|
||||
(82/226)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -118,7 +118,7 @@ it.polimi.ingsw.gc14.View.TUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/17)
|
||||
(0/16)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -134,7 +134,7 @@ it.polimi.ingsw.gc14.View.TUI</div>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/117)
|
||||
(0/131)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -150,19 +150,19 @@ it.polimi.ingsw.gc14.View.TUI</div>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
82.4%
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(14/17)
|
||||
(14/14)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat"/>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
88.9%
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(24/27)
|
||||
(22/22)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -224,7 +224,7 @@ it.polimi.ingsw.gc14.View.TUI</div>
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -110,33 +110,62 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
* }</pre>
|
||||
*/
|
||||
public class AsciiTable {
|
||||
//TODO
|
||||
/** Border style used to draw corners, lines, and junctions. */
|
||||
private final BorderStyle s;
|
||||
//TODO
|
||||
|
||||
/** Number of columns in this table. */
|
||||
private final int cols;
|
||||
//TODO
|
||||
|
||||
/** All rows of the table, in insertion order. */
|
||||
<b class="fc"> private final List<List<String>> rows = new ArrayList<>();</b>
|
||||
//TODO
|
||||
|
||||
/** Indices of rows after which a horizontal separator line is drawn. */
|
||||
<b class="fc"> private final List<Integer> separators = new ArrayList<>();</b>
|
||||
//TODO
|
||||
|
||||
/**
|
||||
* Creates a new empty table with the given border style and column count.
|
||||
*
|
||||
* @param s the border style to use when rendering.
|
||||
* @param cols the number of columns.
|
||||
*/
|
||||
<b class="fc"> public AsciiTable(BorderStyle s, int cols) {</b>
|
||||
<b class="fc"> this.s = s; this.cols = cols;</b>
|
||||
}
|
||||
//TODO
|
||||
|
||||
/**
|
||||
* Appends a row using varargs cells.
|
||||
*
|
||||
* @param cells one value per column.
|
||||
*/
|
||||
<b class="fc"> public void addRow(String... cells) { rows.add(Arrays.asList(cells)); }</b>
|
||||
//TODO
|
||||
|
||||
/**
|
||||
* Appends a row from an existing list.
|
||||
*
|
||||
* @param cells one value per column.
|
||||
*/
|
||||
<b class="fc"> public void addRow(List<String> cells) { rows.add(cells); }</b>
|
||||
//TODO
|
||||
|
||||
/**
|
||||
* Inserts a header row at position 0 and marks it with a separator line below it.
|
||||
*
|
||||
* @param cells one header label per column.
|
||||
*/
|
||||
public void addHeader(String... cells) {
|
||||
<b class="fc"> rows.add(0, Arrays.asList(cells));</b>
|
||||
<b class="fc"> separators.add(0);</b>
|
||||
}
|
||||
//TODO
|
||||
|
||||
/**
|
||||
* Marks a separator line to be drawn after the last row added so far.
|
||||
*/
|
||||
<b class="fc"> public void addSeparator() { separators.add(rows.size() - 1); }</b>
|
||||
|
||||
/**
|
||||
* Renders the table to a multi-line string.
|
||||
* Column width is the widest cell in display columns (wide chars = 2), plus 1.
|
||||
*
|
||||
* @return the fully rendered table as a multi-line string.
|
||||
*/
|
||||
public String build() {
|
||||
<b class="fc"> var sb = new StringBuilder();</b>
|
||||
@@ -156,11 +185,19 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
<b class="fc"> sb.append(hline(s.bl(), s.mb(), s.br(), maxWidth));</b>
|
||||
<b class="fc"> return sb.toString();</b>
|
||||
}
|
||||
//TODO
|
||||
/**
|
||||
* Builds a single horizontal borderline across all columns.
|
||||
*
|
||||
* @param l left-end character.
|
||||
* @param m middle junction character (between columns).
|
||||
* @param r right-end character.
|
||||
* @param maxWidth width in display columns of each cell (including padding).
|
||||
* @return the rendered horizontal line string.
|
||||
*/
|
||||
private String hline(String l, String m, String r, int maxWidth) {
|
||||
<b class="fc"> var sb = new StringBuilder(l);</b>
|
||||
<b class="fc"> for (int i = 0; i < cols; i++) {</b>
|
||||
<b class="fc"> sb.append(s.h().repeat(maxWidth));</b>
|
||||
<b class="fc"> sb.repeat(Objects.requireNonNull(s.h()), maxWidth);</b>
|
||||
<b class="fc"> if (i < cols - 1) sb.append(m);</b>
|
||||
}
|
||||
<b class="fc"> return sb.append(r).toString();</b>
|
||||
@@ -180,6 +217,11 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
* Places two pre-rendered text blocks side by side, separated by a gap.
|
||||
* Left-block lines are padded to a uniform display width so the right block
|
||||
* always starts at the same column. Uses {@link #displayWidth} for measurement.
|
||||
*
|
||||
* @param left lines of the left block.
|
||||
* @param right lines of the right block.
|
||||
* @param gap number of space characters between the two blocks.
|
||||
* @return the combined multi-line string.
|
||||
*/
|
||||
public static String sideBySide(List<String> left, List<String> right, int gap) {
|
||||
<b class="nc"> int leftWidth = left.stream().mapToInt(AsciiTable::displayWidth).max().orElse(0);</b>
|
||||
@@ -196,11 +238,13 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
<b class="nc"> return sb.toString();</b>
|
||||
}
|
||||
|
||||
// ── Wide-character width ──────────────────────────────────────────────────
|
||||
|
||||
/**
|
||||
* Returns the number of terminal columns required to display {@code s}.
|
||||
* Wide characters (emoji, CJK, full-width) count as 2; all others as 1.
|
||||
*
|
||||
* @param s the string to measure; ANSI escape sequences are stripped before counting.
|
||||
* @return the display width in terminal columns.
|
||||
*/
|
||||
public static int displayWidth(String s) {
|
||||
<b class="fc"> s = s.replaceAll("\033\\[[^m]*m", "");</b>
|
||||
@@ -220,34 +264,33 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
*/
|
||||
private static boolean isWide(int cp) {
|
||||
<b class="fc"> if (cp < 0x1100) return false;</b>
|
||||
<b class="pc"> if (cp <= 0x115F) return true; // Hangul Jamo</b>
|
||||
<b class="pc"> if (cp <= 0x115F) return true;</b>
|
||||
<b class="pc"> if (cp < 0x2E80) {</b>
|
||||
// Specific wide symbols below 0x2E80
|
||||
<b class="nc"> return cp == 0x2B50 // ⭐ STAR</b>
|
||||
|| cp == 0x2B55; // ⭕ HEAVY LARGE CIRCLE
|
||||
<b class="nc"> return cp == 0x2B50</b>
|
||||
|| cp == 0x2B55;
|
||||
}
|
||||
<b class="pc"> if (cp <= 0x303E) return true; // CJK Radicals, Kangxi, CJK Symbols</b>
|
||||
<b class="pc"> if (cp <= 0x303E) return true;</b>
|
||||
<b class="pc"> if (cp < 0x3041) return false;</b>
|
||||
<b class="pc"> if (cp <= 0xA4CF) return true; // Hiragana, Katakana, Bopomofo, CJK Unified</b>
|
||||
<b class="pc"> if (cp <= 0xA4CF) return true;</b>
|
||||
<b class="pc"> if (cp < 0xA960) return false;</b>
|
||||
<b class="pc"> if (cp <= 0xA97F) return true; // Hangul Jamo Extended-A</b>
|
||||
<b class="pc"> if (cp <= 0xA97F) return true;</b>
|
||||
<b class="pc"> if (cp < 0xAC00) return false;</b>
|
||||
<b class="pc"> if (cp <= 0xD7AF) return true; // Hangul Syllables</b>
|
||||
<b class="pc"> if (cp <= 0xD7AF) return true;</b>
|
||||
<b class="pc"> if (cp < 0xF900) return false;</b>
|
||||
<b class="pc"> if (cp <= 0xFAFF) return true; // CJK Compatibility Ideographs</b>
|
||||
<b class="pc"> if (cp <= 0xFAFF) return true;</b>
|
||||
<b class="pc"> if (cp < 0xFE10) return false;</b>
|
||||
<b class="pc"> if (cp <= 0xFE1F) return true; // Vertical Forms</b>
|
||||
<b class="pc"> if (cp <= 0xFE1F) return true;</b>
|
||||
<b class="pc"> if (cp < 0xFE30) return false;</b>
|
||||
<b class="pc"> if (cp <= 0xFE6F) return true; // CJK Compatibility Forms</b>
|
||||
<b class="pc"> if (cp <= 0xFE6F) return true;</b>
|
||||
<b class="pc"> if (cp < 0xFF00) return false;</b>
|
||||
<b class="pc"> if (cp <= 0xFF60) return true; // Fullwidth Latin, punctuation</b>
|
||||
<b class="pc"> if (cp <= 0xFF60) return true;</b>
|
||||
<b class="pc"> if (cp < 0xFFE0) return false;</b>
|
||||
<b class="pc"> if (cp <= 0xFFE6) return true; // Fullwidth Signs</b>
|
||||
<b class="pc"> if (cp <= 0xFFE6) return true;</b>
|
||||
<b class="pc"> if (cp < 0x1F004) return false;</b>
|
||||
<b class="pc"> if (cp <= 0x1FAFF) return true; // Emoji (mahjong, playing cards, flags,</b>
|
||||
// misc symbols, transport, 🍖 U+1F357, ...)
|
||||
<b class="pc"> if (cp <= 0x1FAFF) return true;</b>
|
||||
|
||||
<b class="nc"> if (cp < 0x20000) return false;</b>
|
||||
<b class="nc"> return cp <= 0x3FFFD; // CJK Extension B through G</b>
|
||||
<b class="nc"> return cp <= 0x3FFFD;</b>
|
||||
}
|
||||
}
|
||||
</code>
|
||||
@@ -273,7 +316,7 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -52,18 +52,18 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
82.4%
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(14/17)
|
||||
(14/14)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
<span class="percent">
|
||||
88.9%
|
||||
100%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(24/27)
|
||||
(22/22)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -84,23 +84,14 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
* <p>Each style stores the characters needed to draw table corners,
|
||||
* horizontal and vertical lines, and junctions.
|
||||
*/
|
||||
<b class="fc"> public enum BorderStyle {</b>
|
||||
|
||||
/**
|
||||
* Unicode box-drawing border style.
|
||||
*/
|
||||
<b class="fc"> UNICODE("╔","╗","╚","╝","═","║","╠","╣","╦","╩","╬","├","┤","┼"),</b>
|
||||
|
||||
/**
|
||||
* Plain ASCII border style.
|
||||
*/
|
||||
<b class="fc"> ASCII ("+","+","+","+","-","|","+","+","+","+","+","+","+","+"),</b>
|
||||
<b class="fc"> @SuppressWarnings("ALL")</b>
|
||||
public enum BorderStyle {
|
||||
|
||||
/**
|
||||
* Rounded Unicode border style.
|
||||
*/
|
||||
<b class="fc"> ROUNDED("╭","╮","╰","╯","─","│","├","┤","┬","┴","┼","├","┤","┼");</b>
|
||||
|
||||
/** Corner (tl/tr/bl/br), line (h/v), outer junction (ml/mr/mt/mb/x), and separator junction (sl/sr/sx) characters. */
|
||||
private final String tl,tr,bl,br,h,v,ml,mr,mt,mb,x,sl,sr,sx;
|
||||
|
||||
BorderStyle(String tl,String tr,String bl,String br,
|
||||
@@ -148,16 +139,6 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
<b class="fc"> public String v() { return v; }</b>
|
||||
|
||||
/**
|
||||
* @return the middle-left junction character.
|
||||
*/
|
||||
<b class="nc"> public String ml() { return ml; }</b>
|
||||
|
||||
/**
|
||||
* @return the middle-right junction character.
|
||||
*/
|
||||
<b class="nc"> public String mr() { return mr; }</b>
|
||||
|
||||
/**
|
||||
* @return the top-middle junction character.
|
||||
*/
|
||||
<b class="fc"> public String mt() { return mt; }</b>
|
||||
@@ -168,11 +149,6 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
<b class="fc"> public String mb() { return mb; }</b>
|
||||
|
||||
/**
|
||||
* @return the center junction character.
|
||||
*/
|
||||
<b class="nc"> public String x() { return x; }</b>
|
||||
|
||||
/**
|
||||
* @return the separator-left junction character.
|
||||
*/
|
||||
<b class="fc"> public String sl() { return sl; }</b>
|
||||
@@ -210,7 +186,7 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -59,7 +59,7 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/17)
|
||||
(0/16)
|
||||
</span>
|
||||
</td>
|
||||
<td class="coverageStat">
|
||||
@@ -75,7 +75,7 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
0%
|
||||
</span>
|
||||
<span class="absValue">
|
||||
(0/117)
|
||||
(0/131)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -135,14 +135,21 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
<b class="nc"> this.username = "";</b>
|
||||
}
|
||||
|
||||
// ── Setters ───────────────────────────────────────────────────────────────
|
||||
|
||||
/** Sets the username of the local player. */
|
||||
/**
|
||||
* Sets the username of the local player.
|
||||
*
|
||||
* @param username the username to assign.
|
||||
*/
|
||||
public void setUsername(String username) {
|
||||
<b class="nc"> this.username = username;</b>
|
||||
}
|
||||
|
||||
/** Updates the model stored in this view. */
|
||||
/**
|
||||
* Updates the model stored in this view.
|
||||
*
|
||||
* @param model the latest mini model to display.
|
||||
*/
|
||||
@Override
|
||||
public void setModel(MiniModel model) {
|
||||
<b class="nc"> this.model = model;</b>
|
||||
@@ -152,13 +159,14 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
* Registers the active JLine {@link LineReader}.
|
||||
* Once set, all output routes through {@link LineReader#printAbove} so the
|
||||
* prompt survives background-thread renders.
|
||||
*
|
||||
* @param lineReader the JLine reader to use for output; also provides the terminal reference.
|
||||
*/
|
||||
public void setLineReader(LineReader lineReader) {
|
||||
<b class="nc"> this.lineReader = lineReader;</b>
|
||||
<b class="nc"> this.terminal = lineReader.getTerminal();</b>
|
||||
}
|
||||
|
||||
// ── Public render entry points ────────────────────────────────────────────
|
||||
|
||||
/**
|
||||
* Default render: dispatches to the right view based on game stage.
|
||||
@@ -169,21 +177,20 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
<b class="nc"> GameStages stage = model.currentState.getGameStage();</b>
|
||||
<b class="nc"> if (stage == GameStages.TOTEM_CHOICE) {</b>
|
||||
<b class="nc"> display(buildTotemsContent());</b>
|
||||
<b class="nc"> printLine("\033[2mCommands: totem <pos>\033[0m");</b>
|
||||
<b class="nc"> } else if (stage == GameStages.ENDED) {</b>
|
||||
<b class="nc"> display(buildStandingContent() + "\nType 'rematch' to play again or 'quit' to exit");</b>
|
||||
<b class="nc"> display(buildStandingContent());</b>
|
||||
<b class="nc"> printLine("Type 'rematch' to play again or 'quit' to exit");</b>
|
||||
} else {
|
||||
<b class="nc"> display(buildBoardContent());</b>
|
||||
<b class="nc"> printLine("\033[2mCommands: slot <pos> | draw upper/lower tribe/building <pos> | totem <pos> | skip | clear | details buildings/events/characters | quit\033[0m");</b>
|
||||
}
|
||||
}
|
||||
|
||||
/** Renders the board + menu (top) and all players' hands in a grid (bottom). */
|
||||
public void renderBoard() {
|
||||
<b class="nc"> display(buildBoardContent());</b>
|
||||
}
|
||||
|
||||
/** Renders the totem-choice panel. */
|
||||
public void renderTotems() {
|
||||
<b class="nc"> display(buildTotemsContent());</b>
|
||||
<b class="nc"> printLine("\033[2mCommands: slot <pos> | draw upper/lower tribe/building <pos> | totem <pos> | skip | clear | details buildings/events/characters | quit\033[0m");</b>
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -206,10 +213,10 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
<b class="nc"> text += "\nPress any key to continue";</b>
|
||||
}
|
||||
}
|
||||
<b class="nc"> printLine(text);</b>
|
||||
<b class="nc"> render();</b>
|
||||
<b class="nc"> printLine("\033[31m" + text + "\033[0m");</b>
|
||||
}
|
||||
|
||||
// ── Content builders (return strings, do not print) ───────────────────────
|
||||
|
||||
/**
|
||||
* Builds the main view: board + menu side by side, followed by all players'
|
||||
@@ -227,6 +234,7 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
*/
|
||||
private String buildAllHandsContent() {
|
||||
<b class="nc"> List<Player> players = new ArrayList<>(model.players.values());</b>
|
||||
<b class="nc"> players.removeIf(p -> model.disconnectedPlayers.contains(p.getUserName()));</b>
|
||||
<b class="nc"> if (players.isEmpty()) return "";</b>
|
||||
|
||||
<b class="nc"> int n = players.size();</b>
|
||||
@@ -237,11 +245,23 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
<b class="nc"> for (int i = 0; i < leftCount; i++) leftSb.append(players.get(i).toString()).append("\n");</b>
|
||||
<b class="nc"> for (int i = leftCount; i < n; i++) rightSb.append(players.get(i).toString()).append("\n");</b>
|
||||
|
||||
<b class="nc"> if (rightSb.isEmpty()) return leftSb.toString();</b>
|
||||
String handsBlock;
|
||||
<b class="nc"> if (rightSb.isEmpty()) {</b>
|
||||
<b class="nc"> handsBlock = leftSb.toString();</b>
|
||||
} else {
|
||||
<b class="nc"> handsBlock = AsciiTable.sideBySide(</b>
|
||||
<b class="nc"> List.of(leftSb.toString().split("\n", -1)),</b>
|
||||
<b class="nc"> List.of(rightSb.toString().split("\n", -1)), 3);</b>
|
||||
}
|
||||
|
||||
<b class="nc"> return AsciiTable.sideBySide(</b>
|
||||
<b class="nc"> List.of(leftSb.toString().split("\n", -1)),</b>
|
||||
<b class="nc"> List.of(rightSb.toString().split("\n", -1)), 3);</b>
|
||||
<b class="nc"> if (!model.disconnectedPlayers.isEmpty()) {</b>
|
||||
<b class="nc"> var box = new AsciiTable(BorderStyle.ROUNDED, 1);</b>
|
||||
<b class="nc"> box.addHeader("Disconnected");</b>
|
||||
<b class="nc"> model.disconnectedPlayers.forEach(box::addRow);</b>
|
||||
<b class="nc"> handsBlock += "\n" + box.build();</b>
|
||||
}
|
||||
|
||||
<b class="nc"> return handsBlock;</b>
|
||||
}
|
||||
|
||||
private String buildTotemsContent() {
|
||||
@@ -254,31 +274,29 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
<b class="nc"> String current = model.currentState.getCurrentPlayer() != null</b>
|
||||
<b class="nc"> ? model.currentState.getCurrentPlayer().getUserName() + " — "</b>
|
||||
<b class="nc"> : "";</b>
|
||||
<b class="nc"> return current + "TOTEMS AVAILABLE:\n" + table.build() + "\nType: totem <pos>";</b>
|
||||
<b class="nc"> return current + "TOTEMS AVAILABLE:\n" + table.build();</b>
|
||||
}
|
||||
|
||||
private String buildStandingContent() {
|
||||
<b class="nc"> if (model.standingPlayers == null || model.standingPlayers.isEmpty()) return "";</b>
|
||||
<b class="nc"> StringBuilder sb = new StringBuilder();</b>
|
||||
<b class="nc"> int size = model.standingPlayers.size();</b>
|
||||
<b class="nc"> for (int i = 0; i < size / 2; i++) {</b>
|
||||
<b class="nc"> sb.append(AsciiTable.sideBySide(</b>
|
||||
<b class="nc"> List.of(model.standingPlayers.get(i * 2).toString().split("\n")),</b>
|
||||
<b class="nc"> List.of(model.standingPlayers.get(i * 2 + 1).toString().split("\n")), 2));</b>
|
||||
<b class="nc"> String banner = model.standingPlayers.get(0).getUserName().equals(username)</b>
|
||||
<b class="nc"> ? "WINNER!" : "GAME OVER";</b>
|
||||
<b class="nc"> List<String> lines = new ArrayList<>();</b>
|
||||
<b class="nc"> for (int i = 0; i < model.standingPlayers.size(); i++) {</b>
|
||||
<b class="nc"> var p = model.standingPlayers.get(i);</b>
|
||||
<b class="nc"> lines.add((i + 1) + ". " + p.getUserName()</b>
|
||||
<b class="nc"> + " (" + p.getTotem().toString() + ")"</b>
|
||||
<b class="nc"> + " \uD83C\uDF56:" + p.getFoodValue()</b>
|
||||
<b class="nc"> + " \uD83C\uDFC5:" + p.getPrestigeValue());</b>
|
||||
}
|
||||
<b class="nc"> sb.append("\n");</b>
|
||||
<b class="nc"> if (size % 2 != 0) {</b>
|
||||
<b class="nc"> sb.append(model.standingPlayers.get(size - 1)).append("\n");</b>
|
||||
}
|
||||
<b class="nc"> if (model.standingPlayers.get(0).getUserName().equals(username)) {</b>
|
||||
<b class="nc"> sb.append("GAME ENDED: !!!YOU WON!!!");</b>
|
||||
} else {
|
||||
<b class="nc"> sb.append("GAME ENDED: !!!YOU LOST!!!");</b>
|
||||
}
|
||||
<b class="nc"> return sb.toString();</b>
|
||||
<b class="nc"> int contentWidth = lines.stream().mapToInt(AsciiTable::displayWidth).max().orElse(0);</b>
|
||||
<b class="nc"> int pad = Math.max(0, (contentWidth - AsciiTable.displayWidth(banner)) / 2);</b>
|
||||
<b class="nc"> var table = new AsciiTable(BorderStyle.ROUNDED, 1);</b>
|
||||
<b class="nc"> table.addHeader(" ".repeat(pad) + banner);</b>
|
||||
<b class="nc"> lines.forEach(table::addRow);</b>
|
||||
<b class="nc"> return table.build();</b>
|
||||
}
|
||||
|
||||
// ── Core display primitive ────────────────────────────────────────────────
|
||||
|
||||
/**
|
||||
* Clears the terminal and displays {@code content}, horizontally centered.
|
||||
@@ -345,7 +363,6 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
<b class="nc"> return AsciiTable.displayWidth(line);</b>
|
||||
}
|
||||
|
||||
// ── Board / players stamp helpers ─────────────────────────────────────────
|
||||
|
||||
/**
|
||||
* Returns the board state as a multi-line string: turn order, upper cards,
|
||||
@@ -366,20 +383,20 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
|
||||
<b class="nc"> var upperCards = new AsciiTable(BorderStyle.ROUNDED, 2);</b>
|
||||
<b class="nc"> var lowerCards = new AsciiTable(BorderStyle.ROUNDED, 2);</b>
|
||||
<b class="nc"> upperCards.addHeader("Char/Events", "Building");</b>
|
||||
<b class="nc"> lowerCards.addHeader("Char/Events", "Building");</b>
|
||||
<b class="nc"> upperCards.addHeader("Char/\033[38;5;180mEvents\033[0m", "Building");</b>
|
||||
<b class="nc"> lowerCards.addHeader("Char/\033[38;5;180mEvents\033[0m", "Building");</b>
|
||||
|
||||
<b class="nc"> int maxU = Math.max(model.upperListTribeCards.size(), model.upperListBuildingCards.size());</b>
|
||||
<b class="nc"> for (int i = 0; i < maxU; i++) {</b>
|
||||
<b class="nc"> String t = i < model.upperListTribeCards.size() ? i + model.upperListTribeCards.get(i).toStringBoard() : "";</b>
|
||||
<b class="nc"> String b = i < model.upperListBuildingCards.size() ? i + model.upperListBuildingCards.get(i).toString() : "";</b>
|
||||
<b class="nc"> String t = i < model.upperListTribeCards.size() ? i + ":" + model.upperListTribeCards.get(i).toStringBoard() : "";</b>
|
||||
<b class="nc"> String b = i < model.upperListBuildingCards.size() ? i + ":" + model.upperListBuildingCards.get(i).toStringBoard() : "";</b>
|
||||
<b class="nc"> upperCards.addRow(t, b);</b>
|
||||
}
|
||||
|
||||
<b class="nc"> int maxL = Math.max(model.lowerListTribeCards.size(), model.lowerListBuildingCards.size());</b>
|
||||
<b class="nc"> for (int i = 0; i < maxL; i++) {</b>
|
||||
<b class="nc"> String t = i < model.lowerListTribeCards.size() ? i + model.lowerListTribeCards.get(i).toStringBoard() : "";</b>
|
||||
<b class="nc"> String b = i < model.lowerListBuildingCards.size() ? i + model.lowerListBuildingCards.get(i).toString() : "";</b>
|
||||
<b class="nc"> String t = i < model.lowerListTribeCards.size() ? i + ":" + model.lowerListTribeCards.get(i).toStringBoard() : "";</b>
|
||||
<b class="nc"> String b = i < model.lowerListBuildingCards.size() ? i + ":" + model.lowerListBuildingCards.get(i).toStringBoard() : "";</b>
|
||||
<b class="nc"> lowerCards.addRow(t, b);</b>
|
||||
}
|
||||
|
||||
@@ -422,7 +439,7 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -62,7 +62,7 @@ it.polimi.ingsw.gc14.View</div>
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -62,7 +62,7 @@ it.polimi.ingsw.gc14.View</div>
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -62,7 +62,7 @@ it.polimi.ingsw.gc14.View</div>
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -62,7 +62,7 @@ it.polimi.ingsw.gc14.View</div>
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -62,7 +62,7 @@ it.polimi.ingsw.gc14.View</div>
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -62,7 +62,7 @@ it.polimi.ingsw.gc14.View</div>
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -62,7 +62,7 @@ it.polimi.ingsw.gc14.View</div>
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -62,7 +62,7 @@ it.polimi.ingsw.gc14.View</div>
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -62,7 +62,7 @@ it.polimi.ingsw.gc14.View</div>
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -62,7 +62,7 @@ it.polimi.ingsw.gc14.View</div>
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -88,7 +88,7 @@ Current scope: <a href="../../index.html">all classes</a>
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -62,7 +62,7 @@ it.polimi.ingsw.gc14.Network.RMI.Common</div>
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div style="float:right;">generated on 2026-06-14 21:53</div>
|
||||
<div style="float:right;">generated on 2026-06-19 22:53</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||