Coverage Summary for Class: CloudPanel (it.polimi.ingsw.Client.GUI.Panels)
Class |
Class, %
|
Method, %
|
Branch, %
|
Line, %
|
CloudPanel |
0%
(0/1)
|
0%
(0/3)
|
0%
(0/16)
|
0%
(0/44)
|
1 package it.polimi.ingsw.Client.GUI.Panels;
2
3 import it.polimi.ingsw.Client.GUI.Components.CloudComponent;
4 import it.polimi.ingsw.Client.GUI.Listeners.GUISocketListener;
5 import it.polimi.ingsw.Controller.Actions.ChooseCloudTile;
6 import it.polimi.ingsw.Controller.Actions.EndTurnOfActionPhase;
7 import it.polimi.ingsw.Controller.Actions.MoveMotherNature;
8 import it.polimi.ingsw.Model.Cloud;
9 import it.polimi.ingsw.Model.PlayerBoard;
10 import it.polimi.ingsw.Network.SocketWrapper;
11 import it.polimi.ingsw.Server.Messages.Events.Requests.PlayerActionRequest;
12
13 import javax.swing.*;
14 import java.awt.*;
15 import java.io.IOException;
16 import java.util.ArrayList;
17 import java.util.List;
18
19 import static it.polimi.ingsw.Client.GUI.IconLoader.cloudIcon;
20 import static it.polimi.ingsw.Client.GUI.IconLoader.sky;
21
22 /**
23 * Class used for printing all game's clouds and their students. It also permits to end user's turn
24 */
25 public class CloudPanel extends JPanel {
26
27 /**
28 * Contains GuiReader's information necessary to record user's requests during his turn
29 */
30 private final GUISocketListener guiSocketListener;
31
32 /**
33 * Create a new JPanel and draw all clouds (and their students)
34 *
35 * @param clouds clouds from model that needs to be drawn
36 * @param currentPlayer current Player's playerBoard
37 * @param guiSocketListener guiReader necessary for checking and saving actions requested by user
38 * @param sw socketWrapper to send messages to Server
39 */
40 public CloudPanel(List<Cloud> clouds, PlayerBoard currentPlayer, GUISocketListener guiSocketListener, SocketWrapper sw) {
41 this.guiSocketListener = guiSocketListener;
42 //create the label that contains all others components
43 JLabel backGroundLabel = new JLabel(sky);
44 backGroundLabel.setLayout(null);
45 backGroundLabel.setBounds(0, 0, 1080, 720);
46 this.add(backGroundLabel);
47 //list containing clouds' buttons
48 ArrayList<CloudComponent> cloudButtons = new ArrayList<>(clouds.size());
49 //create endTurn's button and set its layout
50 JButton endTurnButton = new JButton("END YOUR TURN");
51 endTurnButton.setBackground(new Color(255, 153, 51));
52 endTurnButton.setForeground(Color.BLACK);
53 endTurnButton.setFocusPainted(false);
54 //set visible only whether the player has played a chooseCloudTile action
55 endTurnButton.setVisible(guiSocketListener.getSuccessfulRequestsByType(ChooseCloudTile.class) == 1);
56 //add on-click action listener to endTurnButton
57 endTurnButton.addActionListener(e -> {
58 // skip execution of the action if a previous action still hasn't been processed by the server
59 if (guiSocketListener.awaitingPlayerActionFeedback()) {
60 JOptionPane.showMessageDialog(null, "Please wait for the server to process your previous" +
61 "request before making a new one");
62 return;
63 }
64 if (guiSocketListener.getSuccessfulRequestsByType(ChooseCloudTile.class) == 1) {
65
66 //create endTurn action and its playerActionRequest
67 EndTurnOfActionPhase endTurnOfActionPhase = new EndTurnOfActionPhase(currentPlayer.getId());
68 PlayerActionRequest playerActionRequest = new PlayerActionRequest(endTurnOfActionPhase);
69 //save action inside guiReader
70 guiSocketListener.savePlayerActionRequest(endTurnOfActionPhase);
71 try {
72 sw.sendMessage(playerActionRequest);
73 } catch (IOException ex) {
74 throw new RuntimeException(ex);
75 }
76 }
77 });
78 //for every cloud:
79 for (int i = 0; i < clouds.size(); i++) {
80 //create a new CloudComponent and add it on cloudButtons list
81 cloudButtons.add(new CloudComponent(cloudIcon, clouds.get(i)));
82 int finalI = i;
83 //add on-click action listener to cloudComponent
84 cloudButtons.get(cloudButtons.size() - 1).addActionListener(e -> {
85 // skip execution of the action if a previous action still hasn't been processed by the server
86 if (guiSocketListener.awaitingPlayerActionFeedback()) {
87 JOptionPane.showMessageDialog(null, "Please wait for the server to process your previous" +
88 "request before making a new one");
89 return;
90 }
91 if (guiSocketListener.getSuccessfulRequestsByType(MoveMotherNature.class) == 1) {
92 //create chooseCloudTile action and its playerActionRequest
93 ChooseCloudTile chooseCloudTile = new ChooseCloudTile(currentPlayer.getId(), finalI);
94 PlayerActionRequest playerActionRequest = new PlayerActionRequest(chooseCloudTile);
95 //save action inside guiReader
96 this.guiSocketListener.savePlayerActionRequest(chooseCloudTile);
97 try {
98 sw.sendMessage(playerActionRequest);
99 } catch (IOException ex) {
100 throw new RuntimeException(ex);
101 }
102 }
103 });
104
105 }
106 //--ABSOLUTE POSITIONING--
107 cloudButtons.get(0).setBounds(300, 125, 200, 200);
108 cloudButtons.get(1).setBounds(700, 125, 200, 200);
109 if (cloudButtons.size() == 3) cloudButtons.get(2).setBounds(300, 350, 200, 200);
110 if (cloudButtons.size() == 4) cloudButtons.get(3).setBounds(700, 350, 200, 200);
111 endTurnButton.setBounds(500, 550, 150, 75);
112 //add cloudButtons and endTurnButton to backgroundLabel
113 cloudButtons.forEach(backGroundLabel::add);
114 backGroundLabel.add(endTurnButton);
115 }
116 }