GabrieleRadice
2026-06-19 18:34:28 +02:00
26 changed files with 371 additions and 4153 deletions
+5 -5
View File
@@ -68,11 +68,11 @@ java -jar ClientTUI.jar
All'avvio il client chiede interattivamente:
| Campo | Valori accettati |
|---|---|
| `Username` | stringa libera, max 32 caratteri |
| `Number of players [2-5]` | intero tra 2 e 5 |
| `Network [rmi/tcp]` | `rmi` oppure `tcp` |
| Campo | Valori accettati |
|---|------------------------------------------------------|
| `Username` | stringa libera, max 10 caratteri |
| `Number of players [2-5]` | intero tra 2 e 5 |
| `Network [rmi/tcp]` | `rmi` oppure `tcp` |
| `Server IP [localhost]` | indirizzo IP del server; invio vuoto usa `localhost` |
### Comandi disponibili in-game (TUI)
Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 146 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 127 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
@@ -192,7 +192,7 @@ public class ClientLauncherTUI {
System.out.println("Errore: " + err);
return false;
}
System.out.println("Connected via RMI.");
System.out.println("Connected via RMI, waiting for other players...");
controller.setClient(client);
} else if (networkStr.equals("tcp")) {
@@ -204,7 +204,7 @@ public class ClientLauncherTUI {
System.out.println("Errore: " + err);
return false;
}
System.out.println("Connected via TCP.");
System.out.println("Connected via TCP, waiting for other players...");
controller.setClient(client);
} else {
@@ -20,7 +20,7 @@ public class Player implements Serializable {
/**
* The maximum length allowed for the username string.
*/
private static final int MAX_USERNAME_LENGTH = 32;
private static final int MAX_USERNAME_LENGTH = 10;
/**
* Identifier for the {@code Player} when displaying the game through the GUI.
@@ -93,7 +93,7 @@ public class RMIServer extends UnicastRemoteObject implements IGameServer {
synchronized (controller) {
if (playerList.isEmpty() && controller.getModel()==null) {
if (playerList.isEmpty() &&(controller.getModel()==null || controller.getModel().getCurrentState().getGameStage().equals(GameStages.WAITING))) {
controller.setModel(new Game(preferredInt));
playerList.setLimit(preferredInt);
System.out.println("Game Created With :"+preferredInt+" Players");
@@ -160,7 +160,7 @@ public class TCPServer {
synchronized (controller) {
String username = eventAddPlayer.getUsername();
//reconnect players after a server crash
if (playerList.isEmpty()&& controller.getModel()==null) {
if (playerList.isEmpty() &&(controller.getModel()==null || controller.getModel().getCurrentState().getGameStage().equals(GameStages.WAITING))) {
Game model = new Game(eventAddPlayer.getProposedNPlayer());
controller.setModel(model);
playerList.setLimit(eventAddPlayer.getProposedNPlayer());
@@ -558,8 +558,13 @@ public class MainFXMLController {
int i = 0;
for (TribeCard card : controller.getMiniModel().upperListTribeCards) {
final int index = i;
StackPane img = createCard(card, true, true, upperList);
img.setOnMouseClicked(e -> controller.drawUpperTribeCard(index));
StackPane img;
if(!card.isEventCard()) {
img = createCard(card, true, true, upperList);
img.setOnMouseClicked(e -> controller.drawUpperTribeCard(index));
} else {
img = createCard(card, false, false, upperList);
}
upperList.getChildren().add(img);
i++;
}
@@ -575,8 +580,13 @@ public class MainFXMLController {
int i = 0;
for (TribeCard card : controller.getMiniModel().lowerListTribeCards) {
final int index = i;
StackPane img = createCard(card, true, true, lowerList);
img.setOnMouseClicked(e -> controller.drawLowerTribeCard(index));
StackPane img;
if(!card.isEventCard()) {
img = createCard(card, true, true, lowerList);
img.setOnMouseClicked(e -> controller.drawLowerTribeCard(index));
} else {
img = createCard(card, false, false, lowerList);
}
lowerList.getChildren().add(img);
i++;
}
@@ -619,8 +629,6 @@ public class MainFXMLController {
back.fitHeightProperty().bind(board.sceneProperty().get().heightProperty().subtract(56).divide(4).multiply(0.94));
back.setPreserveRatio(true);
addClip(back);
addShadow(back);
addHoverZoom(back);
board.getChildren().add(back);
}
@@ -90,6 +90,7 @@ public class TUI implements IView {
GameStages stage = model.currentState.getGameStage();
if (stage == GameStages.TOTEM_CHOICE) {
display(buildTotemsContent());
printLine("Type: totem <pos>");
} else if (stage == GameStages.ENDED) {
display(buildStandingContent());
printLine("Type 'rematch' to play again or 'quit' to exit");
@@ -184,7 +185,7 @@ public class TUI implements IView {
String current = model.currentState.getCurrentPlayer() != null
? model.currentState.getCurrentPlayer().getUserName() + ""
: "";
return current + "TOTEMS AVAILABLE:\n" + table.build() + "\nType: totem <pos>";
return current + "TOTEMS AVAILABLE:\n" + table.build();
}
private String buildStandingContent() {
File diff suppressed because it is too large Load Diff
-616
View File
@@ -1,616 +0,0 @@
<mxGraphModel dx="0" dy="0" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="0" pageScale="1" background="none" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="node21" parent="1" vertex="1" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;b&gt;Artist&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;">
<mxGeometry x="842" y="371" width="92" height="30" as="geometry" />
</mxCell>
<mxCell id="node7" parent="1" vertex="1" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;b&gt;Builder&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;">
<mxGeometry x="757" y="311" width="103" height="30" as="geometry" />
</mxCell>
<mxCell id="node13" parent="1" vertex="1" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;b&gt;Building0&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;">
<mxGeometry x="967" y="191" width="122" height="30" as="geometry" />
</mxCell>
<mxCell id="node6" parent="1" vertex="1" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;b&gt;Building1&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;">
<mxGeometry x="448" y="191" width="120" height="30" as="geometry" />
</mxCell>
<mxCell id="node37" parent="1" vertex="1" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;b&gt;Building10&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;">
<mxGeometry x="723" y="131" width="130" height="30" as="geometry" />
</mxCell>
<mxCell id="node10" parent="1" vertex="1" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;b&gt;Building11&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;">
<mxGeometry x="564" y="131" width="128" height="30" as="geometry" />
</mxCell>
<mxCell id="node11" parent="1" vertex="1" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;b&gt;Building13&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;">
<mxGeometry x="883" y="131" width="130" height="30" as="geometry" />
</mxCell>
<mxCell id="node17" parent="1" vertex="1" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;b&gt;Building4&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;">
<mxGeometry x="807" y="191" width="122" height="30" as="geometry" />
</mxCell>
<mxCell id="node14" parent="1" vertex="1" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;b&gt;Building8&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;">
<mxGeometry x="647" y="191" width="122" height="30" as="geometry" />
</mxCell>
<mxCell id="node26" parent="1" vertex="1" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;b&gt;BuildingCard&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;">
<mxGeometry x="594" y="11" width="149" height="30" as="geometry" />
</mxCell>
<mxCell id="node36" parent="1" vertex="1" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;i&gt;&amp;lt;&amp;lt;interface&amp;gt;&amp;gt;&lt;/i&gt;&lt;br/&gt;&lt;b&gt;BuildingEffect&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;">
<mxGeometry x="-11" y="-169" width="158" height="35" as="geometry" />
</mxCell>
<mxCell id="node24" parent="1" vertex="1" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;b&gt;CavePaintings&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;">
<mxGeometry x="88" y="371" width="161" height="30" as="geometry" />
</mxCell>
<mxCell id="node1" parent="1" vertex="1" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;b&gt;Character&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;">
<mxGeometry x="285" y="191" width="126" height="30" as="geometry" />
</mxCell>
<mxCell id="node34" parent="1" vertex="1" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;i&gt;&amp;lt;&amp;lt;enumeration&amp;gt;&amp;gt;&lt;/i&gt;&lt;br/&gt;&lt;b&gt;CharacterType&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;">
<mxGeometry x="386" y="11" width="164" height="35" as="geometry" />
</mxCell>
<mxCell id="node28" parent="1" vertex="1" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;b&gt;CurrentState&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;">
<mxGeometry x="634" y="731" width="148" height="30" as="geometry" />
</mxCell>
<mxCell id="node9" parent="1" vertex="1" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;i&gt;&amp;lt;&amp;lt;enumeration&amp;gt;&amp;gt;&lt;/i&gt;&lt;br/&gt;&lt;b&gt;EffectType&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;">
<mxGeometry x="641" y="-169" width="134" height="35" as="geometry" />
</mxCell>
<mxCell id="node19" parent="1" vertex="1" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;b&gt;EventCard&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;">
<mxGeometry x="103" y="191" width="131" height="30" as="geometry" />
</mxCell>
<mxCell id="node4" parent="1" vertex="1" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;i&gt;&amp;lt;&amp;lt;enumeration&amp;gt;&amp;gt;&lt;/i&gt;&lt;br/&gt;&lt;b&gt;EventType&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;">
<mxGeometry x="-58" y="11" width="132" height="35" as="geometry" />
</mxCell>
<mxCell id="node8" parent="1" vertex="1" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;i&gt;&amp;lt;&amp;lt;enumeration&amp;gt;&amp;gt;&lt;/i&gt;&lt;br/&gt;&lt;b&gt;GameStages&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;">
<mxGeometry x="635" y="611" width="147" height="35" as="geometry" />
</mxCell>
<mxCell id="node23" parent="1" vertex="1" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;b&gt;Gatherer&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;">
<mxGeometry x="510" y="371" width="117" height="30" as="geometry" />
</mxCell>
<mxCell id="node15" parent="1" vertex="1" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;b&gt;Hunt&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;">
<mxGeometry x="325" y="371" width="87" height="30" as="geometry" />
</mxCell>
<mxCell id="node18" parent="1" vertex="1" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;b&gt;Hunter&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;">
<mxGeometry x="597" y="311" width="102" height="30" as="geometry" />
</mxCell>
<mxCell id="node31" parent="1" vertex="1" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;b&gt;Inventor&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;">
<mxGeometry x="911" y="311" width="114" height="30" as="geometry" />
</mxCell>
<mxCell id="node16" parent="1" vertex="1" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;b&gt;MiniModel&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;">
<mxGeometry x="544" y="911" width="129" height="30" as="geometry" />
</mxCell>
<mxCell id="node29" parent="1" vertex="1" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;b&gt;Order2&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;">
<mxGeometry x="757" y="851" width="103" height="30" as="geometry" />
</mxCell>
<mxCell id="node25" parent="1" vertex="1" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;b&gt;Order3&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;">
<mxGeometry x="837" y="911" width="103" height="30" as="geometry" />
</mxCell>
<mxCell id="node30" parent="1" vertex="1" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;b&gt;Order4&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;">
<mxGeometry x="997" y="911" width="103" height="30" as="geometry" />
</mxCell>
<mxCell id="node5" parent="1" vertex="1" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;b&gt;Order5&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;">
<mxGeometry x="917" y="851" width="103" height="30" as="geometry" />
</mxCell>
<mxCell id="node3" parent="1" vertex="1" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;b&gt;OrderLogicCard&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;">
<mxGeometry x="882" y="731" width="172" height="30" as="geometry" />
</mxCell>
<mxCell id="node22" parent="1" vertex="1" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;b&gt;OrderPlayer&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;">
<mxGeometry x="938" y="611" width="140" height="30" as="geometry" />
</mxCell>
<mxCell id="node12" parent="1" vertex="1" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;b&gt;PlayableCard&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;">
<mxGeometry x="533" y="-229" width="151" height="30" as="geometry" />
</mxCell>
<mxCell id="node2" parent="1" vertex="1" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;b&gt;Player&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;">
<mxGeometry x="780" y="491" width="97" height="30" as="geometry" />
</mxCell>
<mxCell id="node35" parent="1" vertex="1" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;b&gt;Shaman&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;">
<mxGeometry x="672" y="371" width="112" height="30" as="geometry" />
</mxCell>
<mxCell id="node33" parent="1" vertex="1" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;b&gt;ShamanicRitual&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;">
<mxGeometry x="385" y="311" width="167" height="30" as="geometry" />
</mxCell>
<mxCell id="node20" parent="1" vertex="1" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;b&gt;Slot&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;">
<mxGeometry x="8" y="611" width="80" height="30" as="geometry" />
</mxCell>
<mxCell id="node27" parent="1" vertex="1" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;b&gt;Sustenance&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;">
<mxGeometry x="198" y="311" width="140" height="30" as="geometry" />
</mxCell>
<mxCell id="node0" parent="1" vertex="1" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;i&gt;&amp;lt;&amp;lt;enumeration&amp;gt;&amp;gt;&lt;/i&gt;&lt;br/&gt;&lt;b&gt;Totems&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;">
<mxGeometry x="-66" y="371" width="108" height="35" as="geometry" />
</mxCell>
<mxCell id="node32" parent="1" vertex="1" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;b&gt;TribeCard&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;">
<mxGeometry x="45" y="-49" width="126" height="30" as="geometry" />
</mxCell>
<mxCell id="edge9" edge="1" value="" parent="1" source="node21" target="node1" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=none;endArrow=block;endSize=12;strokeColor=#000082;exitX=0.500;exitY=0.001;exitDx=0;exitDy=0;entryX=0.250;entryY=0.001;entryDx=0;entryDy=0;">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="888" y="285" />
<mxPoint x="728" y="285" />
<mxPoint x="728" y="245" />
<mxPoint x="428" y="245" />
<mxPoint x="428" y="165" />
<mxPoint x="317" y="165" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="edge21" edge="1" value="" parent="1" source="node7" target="node1" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=none;endArrow=block;endSize=12;strokeColor=#000082;exitX=0.500;exitY=0.001;exitDx=0;exitDy=0;entryX=0.250;entryY=0.001;entryDx=0;entryDy=0;">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="808" y="285" />
<mxPoint x="728" y="285" />
<mxPoint x="728" y="245" />
<mxPoint x="428" y="245" />
<mxPoint x="428" y="165" />
<mxPoint x="317" y="165" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="edge35" edge="1" value="" parent="1" source="node13" target="node26" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=none;endArrow=block;endSize=12;strokeColor=#000082;exitX=0.500;exitY=0.001;exitDx=0;exitDy=0;entryX=0.500;entryY=0.001;entryDx=0;entryDy=0;">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="1028" y="105" />
<mxPoint x="568" y="105" />
<mxPoint x="568" y="-15" />
<mxPoint x="668" y="-15" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="edge16" edge="1" value="" parent="1" source="node6" target="node26" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=none;endArrow=block;endSize=12;strokeColor=#000082;exitX=0.750;exitY=0.001;exitDx=0;exitDy=0;entryX=0.500;entryY=0.001;entryDx=0;entryDy=0;">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="538" y="105" />
<mxPoint x="568" y="105" />
<mxPoint x="568" y="-15" />
<mxPoint x="668" y="-15" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="edge11" edge="1" value="" parent="1" source="node6" target="node34" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=diamondThinstartSize=12;endArrow=openThin;endSize=12;strokeColor=#595959;exitX=0.250;exitY=0.001;exitDx=0;exitDy=0;entryX=0.500;entryY=1.002;entryDx=0;entryDy=0;">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="478" y="85" />
<mxPoint x="468" y="85" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="edge34" edge="1" value="" parent="1" source="node37" target="node26" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=none;endArrow=block;endSize=12;strokeColor=#000082;exitX=0.500;exitY=0.001;exitDx=0;exitDy=0;entryX=0.500;entryY=0.001;entryDx=0;entryDy=0;">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="788" y="105" />
<mxPoint x="568" y="105" />
<mxPoint x="568" y="-15" />
<mxPoint x="668" y="-15" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="edge26" edge="1" value="" parent="1" source="node10" target="node26" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=none;endArrow=block;endSize=12;strokeColor=#000082;exitX=0.750;exitY=0.001;exitDx=0;exitDy=0;entryX=0.500;entryY=0.001;entryDx=0;entryDy=0;">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="660" y="105" />
<mxPoint x="568" y="105" />
<mxPoint x="568" y="-15" />
<mxPoint x="668" y="-15" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="edge19" edge="1" value="" parent="1" source="node10" target="node34" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=diamondThinstartSize=12;endArrow=openThin;endSize=12;strokeColor=#595959;exitX=0.250;exitY=0.002;exitDx=0;exitDy=0;entryX=0.500;entryY=1.002;entryDx=0;entryDy=0;">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="596" y="85" />
<mxPoint x="468" y="85" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="edge4" edge="1" value="" parent="1" source="node11" target="node26" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=none;endArrow=block;endSize=12;strokeColor=#000082;exitX=0.500;exitY=0.001;exitDx=0;exitDy=0;entryX=0.500;entryY=0.001;entryDx=0;entryDy=0;">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="948" y="105" />
<mxPoint x="568" y="105" />
<mxPoint x="568" y="-15" />
<mxPoint x="668" y="-15" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="edge15" edge="1" value="" parent="1" source="node17" target="node26" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=none;endArrow=block;endSize=12;strokeColor=#000082;exitX=0.500;exitY=0.001;exitDx=0;exitDy=0;entryX=0.500;entryY=0.001;entryDx=0;entryDy=0;">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="868" y="105" />
<mxPoint x="568" y="105" />
<mxPoint x="568" y="-15" />
<mxPoint x="668" y="-15" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="edge40" edge="1" value="" parent="1" source="node14" target="node26" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=none;endArrow=block;endSize=12;strokeColor=#000082;exitX=0.500;exitY=0.001;exitDx=0;exitDy=0;entryX=0.500;entryY=0.001;entryDx=0;entryDy=0;">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="708" y="105" />
<mxPoint x="568" y="105" />
<mxPoint x="568" y="-15" />
<mxPoint x="668" y="-15" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="edge17" edge="1" value="" parent="1" source="node26" target="node36" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=1;startArrow=none;endArrow=block;endSize=12;strokeColor=#008200;exitX=0.167;exitY=0.001;exitDx=0;exitDy=0;entryX=0.500;entryY=1.001;entryDx=0;entryDy=0;">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="618" y="-115" />
<mxPoint x="68" y="-115" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="edge10" edge="1" value="" parent="1" source="node26" target="node9" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=diamondThinstartSize=12;endArrow=openThin;endSize=12;strokeColor=#595959;exitX=0.833;exitY=0.002;exitDx=0;exitDy=0;entryX=0.500;entryY=1.001;entryDx=0;entryDy=0;">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="718" y="-35" />
<mxPoint x="708" y="-35" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="edge13" edge="1" value="" parent="1" source="node26" target="node12" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=none;endArrow=block;endSize=12;strokeColor=#000082;exitX=0.500;exitY=0.001;exitDx=0;exitDy=0;entryX=0.500;entryY=1.001;entryDx=0;entryDy=0;">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="668" y="-95" />
<mxPoint x="608" y="-95" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="edge51" edge="1" value="" parent="1" source="node24" target="node19" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=none;endArrow=block;endSize=12;strokeColor=#000082;exitX=0.500;exitY=0.001;exitDx=0;exitDy=0;entryX=0.750;entryY=0.001;entryDx=0;entryDy=0;">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="168" y="285" />
<mxPoint x="268" y="285" />
<mxPoint x="268" y="165" />
<mxPoint x="201" y="165" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="edge0" edge="1" value="" parent="1" source="node1" target="node34" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=diamondThinstartSize=12;endArrow=openThin;endSize=12;strokeColor=#595959;exitX=0.750;exitY=0.001;exitDx=0;exitDy=0;entryX=0.500;entryY=1.002;entryDx=0;entryDy=0;">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="380" y="85" />
<mxPoint x="468" y="85" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="edge1" edge="1" value="" parent="1" source="node1" target="node32" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=none;endArrow=block;endSize=12;strokeColor=#000082;exitX=0.250;exitY=0.002;exitDx=0;exitDy=0;entryX=0.500;entryY=0.001;entryDx=0;entryDy=0;">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="317" y="145" />
<mxPoint x="308" y="145" />
<mxPoint x="308" y="-75" />
<mxPoint x="108" y="-75" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="edge42" edge="1" value="" parent="1" source="node28" target="node8" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=diamondThinstartSize=12;endArrow=openThin;endSize=12;strokeColor=#595959;exitX=0.500;exitY=0.002;exitDx=0;exitDy=0;entryX=0.500;entryY=1.002;entryDx=0;entryDy=0;">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points" />
</mxGeometry>
</mxCell>
<mxCell id="edge8" edge="1" value="" parent="1" source="node28" target="node2" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=diamondThinstartSize=12;endArrow=openThin;endSize=12;strokeColor=#595959;exitX=0.500;exitY=0.001;exitDx=0;exitDy=0;entryX=0.500;entryY=0.001;entryDx=0;entryDy=0;">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="708" y="665" />
<mxPoint x="808" y="665" />
<mxPoint x="808" y="585" />
<mxPoint x="908" y="585" />
<mxPoint x="908" y="465" />
<mxPoint x="828" y="465" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="edge33" edge="1" value="" parent="1" source="node28" target="node20" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=diamondThinstartSize=12;endArrow=openThin;endSize=12;strokeColor=#595959;exitX=0.500;exitY=0.002;exitDx=0;exitDy=0;entryX=0.500;entryY=1.002;entryDx=0;entryDy=0;">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="708" y="685" />
<mxPoint x="48" y="685" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="edge20" edge="1" value="" parent="1" source="node19" target="node4" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=diamondThinstartSize=12;endArrow=openThin;endSize=12;strokeColor=#595959;exitX=0.250;exitY=0.001;exitDx=0;exitDy=0;entryX=0.500;entryY=1.001;entryDx=0;entryDy=0;">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="135" y="165" />
<mxPoint x="8" y="165" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="edge6" edge="1" value="" parent="1" source="node19" target="node32" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=none;endArrow=block;endSize=12;strokeColor=#000082;exitX=0.750;exitY=0.002;exitDx=0;exitDy=0;entryX=0.500;entryY=0.001;entryDx=0;entryDy=0;">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="201" y="145" />
<mxPoint x="308" y="145" />
<mxPoint x="308" y="-75" />
<mxPoint x="108" y="-75" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="edge5" edge="1" value="" parent="1" source="node23" target="node1" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=none;endArrow=block;endSize=12;strokeColor=#000082;exitX=0.500;exitY=0.001;exitDx=0;exitDy=0;entryX=0.250;entryY=0.001;entryDx=0;entryDy=0;">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="568" y="285" />
<mxPoint x="728" y="285" />
<mxPoint x="728" y="245" />
<mxPoint x="428" y="245" />
<mxPoint x="428" y="165" />
<mxPoint x="317" y="165" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="edge31" edge="1" value="" parent="1" source="node15" target="node19" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=none;endArrow=block;endSize=12;strokeColor=#000082;exitX=0.500;exitY=0.001;exitDx=0;exitDy=0;entryX=0.750;entryY=0.001;entryDx=0;entryDy=0;">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="368" y="285" />
<mxPoint x="268" y="285" />
<mxPoint x="268" y="165" />
<mxPoint x="201" y="165" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="edge32" edge="1" value="" parent="1" source="node18" target="node1" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=none;endArrow=block;endSize=12;strokeColor=#000082;exitX=0.500;exitY=0.001;exitDx=0;exitDy=0;entryX=0.250;entryY=0.001;entryDx=0;entryDy=0;">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="648" y="285" />
<mxPoint x="728" y="285" />
<mxPoint x="728" y="245" />
<mxPoint x="428" y="245" />
<mxPoint x="428" y="165" />
<mxPoint x="317" y="165" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="edge47" edge="1" value="" parent="1" source="node31" target="node1" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=none;endArrow=block;endSize=12;strokeColor=#000082;exitX=0.500;exitY=0.001;exitDx=0;exitDy=0;entryX=0.250;entryY=0.001;entryDx=0;entryDy=0;">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="968" y="285" />
<mxPoint x="728" y="285" />
<mxPoint x="728" y="245" />
<mxPoint x="428" y="245" />
<mxPoint x="428" y="165" />
<mxPoint x="317" y="165" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="edge2" edge="1" value="" parent="1" source="node16" target="node26" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=diamondThinstartSize=12;endArrow=openThin;endSize=12;strokeColor=#595959;exitX=0.500;exitY=0.001;exitDx=0;exitDy=0;entryX=0.833;entryY=0.001;entryDx=0;entryDy=0;">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="608" y="785" />
<mxPoint x="1148" y="785" />
<mxPoint x="1148" y="185" />
<mxPoint x="1128" y="185" />
<mxPoint x="1128" y="-15" />
<mxPoint x="718" y="-15" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="edge48" edge="1" value="" parent="1" source="node16" target="node28" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=diamondThinstartSize=12;endArrow=openThin;endSize=12;strokeColor=#595959;exitX=0.500;exitY=0.001;exitDx=0;exitDy=0;entryX=0.500;entryY=0.001;entryDx=0;entryDy=0;">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="608" y="785" />
<mxPoint x="808" y="785" />
<mxPoint x="808" y="705" />
<mxPoint x="708" y="705" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="edge14" edge="1" value="" parent="1" source="node16" target="node3" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=diamondThinstartSize=12;endArrow=openThin;endSize=12;strokeColor=#595959;exitX=0.500;exitY=0.001;exitDx=0;exitDy=0;entryX=0.250;entryY=0.002;entryDx=0;entryDy=0;">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="608" y="785" />
<mxPoint x="848" y="785" />
<mxPoint x="848" y="685" />
<mxPoint x="925" y="685" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="edge36" edge="1" value="" parent="1" source="node16" target="node2" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=diamondThinstartSize=12;endArrow=openThin;endSize=12;strokeColor=#595959;exitX=0.500;exitY=0.001;exitDx=0;exitDy=0;entryX=0.500;entryY=0.001;entryDx=0;entryDy=0;">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="608" y="585" />
<mxPoint x="908" y="585" />
<mxPoint x="908" y="465" />
<mxPoint x="828" y="465" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="edge18" edge="1" value="" parent="1" source="node16" target="node20" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=diamondThinstartSize=12;endArrow=openThin;endSize=12;strokeColor=#595959;exitX=0.500;exitY=0.001;exitDx=0;exitDy=0;entryX=0.500;entryY=1.001;entryDx=0;entryDy=0;">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="608" y="785" />
<mxPoint x="48" y="785" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="edge37" edge="1" value="" parent="1" source="node16" target="node0" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=diamondThinstartSize=12;endArrow=openThin;endSize=12;strokeColor=#595959;exitX=0.500;exitY=0.001;exitDx=0;exitDy=0;entryX=0.500;entryY=1.002;entryDx=0;entryDy=0;">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="608" y="785" />
<mxPoint x="-12" y="785" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="edge23" edge="1" value="" parent="1" source="node16" target="node32" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=diamondThinstartSize=12;endArrow=openThin;endSize=12;strokeColor=#595959;exitX=0.500;exitY=0.001;exitDx=0;exitDy=0;entryX=0.500;entryY=1.001;entryDx=0;entryDy=0;">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="608" y="785" />
<mxPoint x="108" y="785" />
<mxPoint x="108" y="485" />
<mxPoint x="68" y="485" />
<mxPoint x="68" y="145" />
<mxPoint x="108" y="145" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="edge3" edge="1" value="" parent="1" source="node29" target="node3" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=none;endArrow=block;endSize=12;strokeColor=#000082;exitX=0.500;exitY=0.001;exitDx=0;exitDy=0;entryX=0.500;entryY=1.001;entryDx=0;entryDy=0;">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="808" y="825" />
<mxPoint x="968" y="825" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="edge7" edge="1" value="" parent="1" source="node25" target="node3" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=none;endArrow=block;endSize=12;strokeColor=#000082;exitX=0.500;exitY=0.001;exitDx=0;exitDy=0;entryX=0.500;entryY=1.001;entryDx=0;entryDy=0;">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="888" y="825" />
<mxPoint x="968" y="825" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="edge44" edge="1" value="" parent="1" source="node30" target="node3" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=none;endArrow=block;endSize=12;strokeColor=#000082;exitX=0.500;exitY=0.001;exitDx=0;exitDy=0;entryX=0.500;entryY=1.001;entryDx=0;entryDy=0;">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="1048" y="825" />
<mxPoint x="968" y="825" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="edge27" edge="1" value="" parent="1" source="node5" target="node3" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=none;endArrow=block;endSize=12;strokeColor=#000082;exitX=0.500;exitY=0.002;exitDx=0;exitDy=0;entryX=0.500;entryY=1.002;entryDx=0;entryDy=0;">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points" />
</mxGeometry>
</mxCell>
<mxCell id="edge28" edge="1" value="" parent="1" source="node3" target="node22" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=diamondThinstartSize=12;endArrow=openThin;endSize=12;strokeColor=#595959;exitX=0.250;exitY=0.001;exitDx=0;exitDy=0;entryX=0.500;entryY=0.002;entryDx=0;entryDy=0;">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="925" y="705" />
<mxPoint x="928" y="705" />
<mxPoint x="928" y="665" />
<mxPoint x="1108" y="665" />
<mxPoint x="1108" y="565" />
<mxPoint x="1008" y="565" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="edge49" edge="1" value="" parent="1" source="node3" target="node22" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=1;startArrow=none;endArrow=openThin;endSize=12;strokeColor=#595959;exitX=0.750;exitY=0.001;exitDx=0;exitDy=0;entryX=0.500;entryY=1.001;entryDx=0;entryDy=0;">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="1011" y="705" />
<mxPoint x="1008" y="705" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="edge41" edge="1" value="" parent="1" source="node3" target="node2" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=diamondThinstartSize=12;endArrow=openThin;endSize=12;strokeColor=#595959;exitX=0.250;exitY=0.001;exitDx=0;exitDy=0;entryX=0.500;entryY=0.001;entryDx=0;entryDy=0;">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="925" y="705" />
<mxPoint x="928" y="705" />
<mxPoint x="928" y="665" />
<mxPoint x="908" y="665" />
<mxPoint x="908" y="465" />
<mxPoint x="828" y="465" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="edge29" edge="1" value="" parent="1" source="node22" target="node2" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=diamondThinstartSize=12;endArrow=openThin;endSize=12;strokeColor=#595959;exitX=0.500;exitY=0.001;exitDx=0;exitDy=0;entryX=0.500;entryY=0.001;entryDx=0;entryDy=0;">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="1008" y="585" />
<mxPoint x="908" y="585" />
<mxPoint x="908" y="465" />
<mxPoint x="828" y="465" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="edge43" edge="1" value="" parent="1" source="node2" target="node21" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=diamondThinstartSize=12;endArrow=openThin;endSize=12;strokeColor=#595959;exitX=0.500;exitY=0.001;exitDx=0;exitDy=0;entryX=0.500;entryY=1.001;entryDx=0;entryDy=0;">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="828" y="425" />
<mxPoint x="888" y="425" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="edge45" edge="1" value="" parent="1" source="node2" target="node7" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=diamondThinstartSize=12;endArrow=openThin;endSize=12;strokeColor=#595959;exitX=0.500;exitY=0.001;exitDx=0;exitDy=0;entryX=0.500;entryY=1.001;entryDx=0;entryDy=0;">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="828" y="425" />
<mxPoint x="808" y="425" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="edge25" edge="1" value="" parent="1" source="node2" target="node26" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=diamondThinstartSize=12;endArrow=openThin;endSize=12;strokeColor=#595959;exitX=0.500;exitY=0.001;exitDx=0;exitDy=0;entryX=0.833;entryY=0.001;entryDx=0;entryDy=0;">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="828" y="425" />
<mxPoint x="1108" y="425" />
<mxPoint x="1108" y="185" />
<mxPoint x="1128" y="185" />
<mxPoint x="1128" y="-15" />
<mxPoint x="718" y="-15" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="edge38" edge="1" value="" parent="1" source="node2" target="node23" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=diamondThinstartSize=12;endArrow=openThin;endSize=12;strokeColor=#595959;exitX=0.500;exitY=0.001;exitDx=0;exitDy=0;entryX=0.500;entryY=1.001;entryDx=0;entryDy=0;">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="828" y="425" />
<mxPoint x="568" y="425" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="edge46" edge="1" value="" parent="1" source="node2" target="node18" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=diamondThinstartSize=12;endArrow=openThin;endSize=12;strokeColor=#595959;exitX=0.500;exitY=0.001;exitDx=0;exitDy=0;entryX=0.500;entryY=1.001;entryDx=0;entryDy=0;">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="828" y="425" />
<mxPoint x="648" y="425" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="edge12" edge="1" value="" parent="1" source="node2" target="node31" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=diamondThinstartSize=12;endArrow=openThin;endSize=12;strokeColor=#595959;exitX=0.500;exitY=0.001;exitDx=0;exitDy=0;entryX=0.500;entryY=1.001;entryDx=0;entryDy=0;">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="828" y="425" />
<mxPoint x="968" y="425" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="edge22" edge="1" value="" parent="1" source="node2" target="node35" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=diamondThinstartSize=12;endArrow=openThin;endSize=12;strokeColor=#595959;exitX=0.500;exitY=0.001;exitDx=0;exitDy=0;entryX=0.500;entryY=1.001;entryDx=0;entryDy=0;">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="828" y="425" />
<mxPoint x="728" y="425" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="edge30" edge="1" value="" parent="1" source="node2" target="node0" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=diamondThinstartSize=12;endArrow=openThin;endSize=12;strokeColor=#595959;exitX=0.500;exitY=0.002;exitDx=0;exitDy=0;entryX=0.500;entryY=1.002;entryDx=0;entryDy=0;">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="828" y="445" />
<mxPoint x="-12" y="445" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="edge52" edge="1" value="" parent="1" source="node35" target="node1" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=none;endArrow=block;endSize=12;strokeColor=#000082;exitX=0.500;exitY=0.001;exitDx=0;exitDy=0;entryX=0.250;entryY=0.001;entryDx=0;entryDy=0;">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="728" y="245" />
<mxPoint x="428" y="245" />
<mxPoint x="428" y="165" />
<mxPoint x="317" y="165" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="edge50" edge="1" value="" parent="1" source="node33" target="node19" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=none;endArrow=block;endSize=12;strokeColor=#000082;exitX=0.500;exitY=0.001;exitDx=0;exitDy=0;entryX=0.750;entryY=0.001;entryDx=0;entryDy=0;">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="468" y="285" />
<mxPoint x="268" y="285" />
<mxPoint x="268" y="165" />
<mxPoint x="201" y="165" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="edge39" edge="1" value="" parent="1" source="node27" target="node19" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=none;endArrow=block;endSize=12;strokeColor=#000082;exitX=0.500;exitY=0.001;exitDx=0;exitDy=0;entryX=0.750;entryY=0.001;entryDx=0;entryDy=0;">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="268" y="165" />
<mxPoint x="201" y="165" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="edge24" edge="1" value="" parent="1" source="node32" target="node12" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=none;endArrow=block;endSize=12;strokeColor=#000082;exitX=0.500;exitY=0.002;exitDx=0;exitDy=0;entryX=0.500;entryY=1.001;entryDx=0;entryDy=0;">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="108" y="-95" />
<mxPoint x="608" y="-95" />
</Array>
</mxGeometry>
</mxCell>
</root>
</mxGraphModel>
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -793,7 +793,7 @@ class GameTest {
void optionalMethodsShouldRejectWrongPlayerAndInvalidIndexes() {
Game game = new Game(3);
List<Player> players = addPlayers(game, 3, "optional_invalid_");
List<Player> players = addPlayers(game, 3, "invalid");
giveOptionalEffectToAllPlayers(players.get(0), players.get(1), players.get(2));
@@ -936,7 +936,7 @@ class GameTest {
void roundShouldAdvanceAfterOnlyOptionalPlayerSkipsOptionalCard() {
Game game = new Game(3);
List<Player> players = addPlayers(game, 3, "single_optional_");
List<Player> players = addPlayers(game, 3, "single");
players.get(0).getBuildingCards().add(new BuildingCard(12, 1, 1, 1));
@@ -1082,7 +1082,7 @@ class GameTest {
void drawBuildingShouldReturnFalseIfPlayerCannotPay() {
Game game = new Game(3);
addPlayers(game, 3, "no_food_upper_building_");
addPlayers(game, 3, "no_food");
for (int safety = 0; safety < 300; safety++) {
@@ -1333,7 +1333,7 @@ class GameTest {
void disconnectedCurrentPlayerDuringSlotChoiceShouldAdvanceTurn() {
Game game = new Game(3);
addPlayers(game, 3, "disconnect_slot_");
addPlayers(game, 3, "disconnect_slot");
Player current = game.getCurrentState().getCurrentPlayer();
assertNotNull(current);
@@ -1349,7 +1349,7 @@ class GameTest {
void disconnectedPlayerShouldReturnFalseIfAlreadyDisconnected() {
Game game = new Game(3);
addPlayers(game, 3, "disconnect_twice_");
addPlayers(game, 3, "disconnect");
Player current = game.getCurrentState().getCurrentPlayer();
@@ -1376,7 +1376,7 @@ class GameTest {
void clearDisconnectedShouldEmptyDisconnectedPlayersMap() {
Game game = new Game(3);
addPlayers(game, 3, "clear_disconnect_");
addPlayers(game, 3, "disconnect");
Player current = game.getCurrentState().getCurrentPlayer();
@@ -1393,7 +1393,7 @@ class GameTest {
void drawLowerBuildingShouldReturnFalseIfPlayerCannotPay() {
Game game = new Game(3);
addPlayers(game, 3, "no_food_lower_building_");
addPlayers(game, 3, "no_food");
for (int safety = 0; safety < 300; safety++) {
@@ -1455,7 +1455,7 @@ class GameTest {
void drawLowerBuildingShouldRejectWrongPlayer() {
Game game = new Game(3);
List<Player> players = addPlayers(game, 3, "wrong_lower_building_");
List<Player> players = addPlayers(game, 3, "wrong");
for (int safety = 0; safety < 300; safety++) {
@@ -1572,7 +1572,7 @@ class GameTest {
void slotChoiceShouldNotAddFoodWhenChoosingNonASlot() {
Game game = new Game(5);
addPlayers(game, 5, "slot_non_a_");
addPlayers(game, 5, "non_a");
Player current = game.getCurrentState().getCurrentPlayer();
assertNotNull(current);
@@ -1589,7 +1589,7 @@ class GameTest {
void endGameShouldAddExactBuildingPrestigeValues() {
Game game = new Game(3);
List<Player> players = addPlayers(game, 3, "final_building_scoring_");
List<Player> players = addPlayers(game, 3, "build_scor");
giveOptionalEffectToAllPlayers(players.get(0), players.get(1), players.get(2));
@@ -1653,7 +1653,7 @@ class GameTest {
void endGameShouldAddExactBuilderPrestigeValues() {
Game game = new Game(3);
List<Player> players = addPlayers(game, 3, "final_builder_scoring_");
List<Player> players = addPlayers(game, 3, "builder_scor");
giveOptionalEffectToAllPlayers(players.get(0), players.get(1), players.get(2));
@@ -1709,7 +1709,7 @@ class GameTest {
void endGameShouldAddExactInventorPrestigeValues() {
Game game = new Game(3);
List<Player> players = addPlayers(game, 3, "final_inventor_scoring_");
List<Player> players = addPlayers(game, 3, "inventor_scor");
giveOptionalEffectToAllPlayers(players.get(0), players.get(1), players.get(2));
@@ -157,8 +157,8 @@ class Order2Test {
@Test
void toStringTest() {
String usr1 = "wPIshEUhiOpRRnIBFfM89s2$@q$9FGbz";
String usr2 = "L*Ncw1rjjrF2xn%H@4P1iC@&NNIooQQk";
String usr1 = "test1";
String usr2 = "test2";
Player p1 = new Player(usr1);
Player p2 = new Player(usr2);
@@ -182,9 +182,9 @@ class Order3Test {
}
@Test
void toStringTest() {
String usr1 = "wPIshEUhiOpRRnIBFfM89s2$@q$9FGbz";
String usr2 = "L*Ncw1rjjrF2xn%H@4P1iC@&NNIooQQk";
String usr3 = "L*Ncw1rjjrF2xn%H@4d1iC@&NNIooQQk";
String usr1 = "test1";
String usr2 = "test2";
String usr3 = "test3";
Player p1 = new Player(usr1);
Player p2 = new Player(usr2);
@@ -273,10 +273,10 @@ class Order4Test {
@Test
void toStringTest() {
String usr1 = "wPIshEUhiOpRRnIBFfM89s2$@q$9FGbz";
String usr2 = "L*Ncw1rjjrF2xn%H@4P1iC@&NNIooQQk";
String usr3 = "L*Ncw1rjjrF2xn%H@4d1iC@&NNIooQQk";
String usr4 = "L*Ncw1rjkrF2xn%H@4d1iC@&NNIooQQk";
String usr1 = "test1";
String usr2 = "test2";
String usr3 = "test3";
String usr4 = "test4";
Player p1 = new Player(usr1);
Player p2 = new Player(usr2);
@@ -331,7 +331,5 @@ class Order4Test {
assertTrue(order.toString().contains("+1🍖"));
assertTrue(order.toString().contains("--"));
assertTrue(order.toString().contains("-1🍖/-2🏅"));
//TODO testare IndexOutOfBoundsException
}
}
@@ -362,11 +362,11 @@ class Order5Test {
}
@Test
void toStringTest() {
String usr1 = "wPIshEUhiOpRRnIBFfM89s2$@q$9FGbz";
String usr2 = "L*Ncw1rjjrF2xn%H@4P1iC@&NNIooQQk";
String usr3 = "L*Ncw1rjjrF2xn%H@4d1iC@&NNIooQQk";
String usr4 = "L*Ncw1rjkrF2xn%H@4d1iC@&NNIooQQk";
String usr5 = "L*pcw1rjjrF2xn%H@4d1iC@&NNIooQQk";
String usr1 = "test1";
String usr2 = "test2";
String usr3 = "test3";
String usr4 = "test4";
String usr5 = "test5";
Player p1 = new Player(usr1);
Player p2 = new Player(usr2);
@@ -429,7 +429,6 @@ class Order5Test {
assertTrue(order.toString().contains("--"));
assertTrue(order.toString().contains("-1🍖/-2🏅"));
//TODO capire come è testato IndexOutOfBoundsExceptions
}
}
@@ -18,7 +18,7 @@ class PlayerTest {
String usr = "test";
Player p = new Player(usr);
assertEquals(usr, p.getUserName());
assertTrue(p.getUserName().length() <= 32);
assertTrue(p.getUserName().length() <= 10);
assertFalse(p.getUserName().isEmpty());
}
@@ -153,12 +153,12 @@ class PlayerTest {
@Test
void setUserName() {
String UserName = "abcdabcdabcdabcdabcdabcdabcdabcd";
String UserName = "abcdabcdab";
Player p = new Player(UserName);
assertEquals(0, p.getFoodValue());
assertEquals(0, p.getPrestigeValue());
assertEquals(32, p.getUserName().length());
String username = "abcdabcdabcda";
assertEquals(10, p.getUserName().length());
String username = "abcdabcdab";
p = new Player(username);
//Constructor default values testing
@@ -173,7 +173,7 @@ class PlayerTest {
assertTrue(p.getArtists().isEmpty());
assertTrue(p.getBuildingCards().isEmpty());
assertTrue(p.getUserName().length() <= 32);
assertTrue(p.getUserName().length() <= 10);
assertFalse(p.getUserName().isEmpty());
}
@@ -210,7 +210,7 @@ class PlayerTest {
assertTrue(artistString.contains("Artists:"));
assertTrue(artistString.contains("BUILDING CARDS"));
Player onlyBuilder = new Player("onlyBuilder");
Player onlyBuilder = new Player("onlyBuilde");
onlyBuilder.getBuilders().add(new Builder(1, 1, 1));
String builderString = onlyBuilder.toString();