1 package nl.tudelft.goal.ut2004.visualizer.gui.action;
2
3 import java.awt.event.ActionEvent;
4
5 import javax.swing.AbstractAction;
6 import javax.swing.Action;
7
8 import nl.tudelft.goal.ut2004.visualizer.controller.ServerController;
9
10 import cz.cuni.amis.pogamut.ut2004.communication.messages.gbcommands.Pause;
11 import cz.cuni.amis.pogamut.ut2004.communication.messages.gbinfomessages.GameInfo;
12 import cz.cuni.amis.pogamut.ut2004.server.IUT2004Server;
13 import cz.cuni.amis.utils.flag.FlagListener;
14
15 public class PauseResumeAction extends AbstractAction {
16
17 public PauseResumeAction() {
18 putValue(Action.SHORT_DESCRIPTION, "Pause or resume the game");
19
20 ServerController controller = ServerController.getInstance();
21 controller.getServerDefinition().getServerFlag()
22 .addListener(new FlagListener<IUT2004Server>() {
23
24 @Override
25 public void flagChanged(IUT2004Server changedValue) {
26 if (changedValue == null) {
27 setEnabled(false);
28 } else {
29 setEnabled(true);
30 updateStatus();
31
32 }
33 }
34 });
35
36 updateStatus();
37 }
38
39 private void updateStatus() {
40
41 ServerController controller = ServerController.getInstance();
42 IUT2004Server server = controller.getServer();
43
44 if (server == null) {
45 putValue(Action.NAME, "Pause");
46 setEnabled(false);
47 return;
48 }
49
50 setEnabled(true);
51 GameInfo info = server.getWorldView().getSingle(GameInfo.class);
52
53 if (info.isGamePaused()) {
54 putValue(Action.NAME, "Resume");
55 } else {
56 putValue(Action.NAME, "Pause");
57 }
58 }
59
60 @Override
61 public void actionPerformed(ActionEvent e) {
62 ServerController controller = ServerController.getInstance();
63 IUT2004Server server = controller.getServer();
64
65 assert server != null;
66
67 GameInfo info = server.getWorldView().getSingle(GameInfo.class);
68
69 Pause pauseResume;
70
71 if (info.isGamePaused()) {
72 pauseResume = new Pause(false, false);
73 putValue(Action.NAME, "Pause");
74 } else {
75 pauseResume = new Pause(true, true);
76 putValue(Action.NAME, "Resume");
77 }
78
79 server.getAct().act(pauseResume);
80 }
81
82 }