package nl.tudelft.bw4t.client.gui.menu;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import nl.tudelft.bw4t.client.controller.ClientController;
import nl.tudelft.bw4t.client.controller.ClientMapController;
import nl.tudelft.bw4t.client.gui.BW4TClientGUI;
import nl.tudelft.bw4t.client.gui.listeners.GoToBlockActionListener;
import nl.tudelft.bw4t.client.gui.listeners.GoToRoomActionListener;
import nl.tudelft.bw4t.client.gui.listeners.MessageSenderActionListener;
import nl.tudelft.bw4t.client.gui.listeners.PutdownActionListener;
import nl.tudelft.bw4t.client.message.BW4TMessage;
import nl.tudelft.bw4t.client.message.MessageType;
import nl.tudelft.bw4t.map.ColorTranslator;
import nl.tudelft.bw4t.map.Zone;
import nl.tudelft.bw4t.map.view.ViewBlock;
import nl.tudelft.bw4t.map.view.ViewEntity;
public class RoomMenus {
private static ClientController controller;
/**
* Used for building the pop up menu when clicking on the agent while it is
* near a box
*
* @param box
* , the box that the robot is at.
*/
public static void buildPopUpMenuForBeingAtBlock(ViewBlock box, Zone room,
BW4TClientGUI gui) {
RoomMenus.controller = gui.getController();
ViewEntity ourEntity = gui.getController().getMapController()
.getTheBot();
String label = room.getName();
gui.getjPopupMenu().removeAll();
String colorAsString = BasicMenuOperations.getColor(box.getColor()
.getName(), ourEntity);
// Robot commands
BasicMenuOperations.addSectionTitleToPopupMenu("Command my robot to:",
gui.getjPopupMenu());
BasicMenuOperations.addBlockPickUpMenuItem(gui, box);
// Message sending
gui.getjPopupMenu().addSeparator();
BasicMenuOperations.addSectionTitleToPopupMenu("Tell: ",
gui.getjPopupMenu());
BasicMenuOperations.addMenuItemToPopupMenu(new BW4TMessage(
MessageType.ROOMCONTAINS, label, colorAsString, null), gui);
BasicMenuOperations.addMenuItemToPopupMenu(new BW4TMessage(
MessageType.AMGETTINGCOLOR, label, colorAsString, null), gui);
BasicMenuOperations.addMenuItemToPopupMenu(new BW4TMessage(
MessageType.ATBOX, null, colorAsString, null), gui);
gui.getjPopupMenu().addSeparator();
JMenuItem menuItem = new JMenuItem("Close menu");
gui.getjPopupMenu().add(menuItem);
}
/**
* Used for building a pop up menu when clicking on a box
*
* @param box
* , the box that was clicked on
*/
public static void buildPopUpMenuForBlock(ViewBlock box, Zone room,
ClientController controller) {
String label = room.getName();
ViewEntity ourEntity = controller.getMapController().getTheBot();
String colorAsString = BasicMenuOperations.getColor(box.getColor()
.getName(), ourEntity);
RoomMenus.controller = controller;
BW4TClientGUI gui = controller.getGui();
gui.getjPopupMenu().removeAll();
// Robot commands
BasicMenuOperations.addSectionTitleToPopupMenu("Command my robot to:",
gui.getjPopupMenu());
BasicMenuOperations.addNavigateObstacleMenuItem(gui);
JMenuItem menuItem = new JMenuItem("Go to " + box.getColor() + " block");
menuItem.addActionListener(new GoToBlockActionListener(box
.getObjectId(), controller));
gui.getjPopupMenu().add(menuItem);
// Message sending
gui.getjPopupMenu().addSeparator();
BasicMenuOperations.addSectionTitleToPopupMenu("Tell: ",
gui.getjPopupMenu());
BasicMenuOperations.addMenuItemToPopupMenu(new BW4TMessage(
MessageType.ROOMCONTAINS, label, colorAsString, null), gui);
BasicMenuOperations.addMenuItemToPopupMenu(new BW4TMessage(
MessageType.AMGETTINGCOLOR, label, colorAsString, null), gui);
gui.getjPopupMenu().addSeparator();
menuItem = new JMenuItem("Close menu");
gui.getjPopupMenu().add(menuItem);
}
/**
* Used for building a pop up menu when clicking on a room
*
* @param room
* , the room that was clicked on
*/
public static void buildPopUpMenuRoom(Zone room, BW4TClientGUI gui) {
RoomMenus.controller = gui.getController();
ClientMapController cmc = controller.getMapController();
ViewEntity ourEntity = cmc.getTheBot();
ViewBlock holding = cmc.getTheBot().getTopBlock();
String label = room.getName();
gui.getjPopupMenu().removeAll();
// Robot commands
BasicMenuOperations.addSectionTitleToPopupMenu("Command my robot to: ",
gui.getjPopupMenu());
BasicMenuOperations.addNavigateObstacleMenuItem(gui);
JMenuItem menuItem = new JMenuItem("Go to " + label);
menuItem.addActionListener(new GoToRoomActionListener(label, controller));
gui.getjPopupMenu().add(menuItem);
if (holding != null) {
menuItem = new JMenuItem("Put down block");
menuItem.addActionListener(new PutdownActionListener(controller));
gui.getjPopupMenu().add(menuItem);
}
gui.getjPopupMenu().addSeparator();
// Message sending
BasicMenuOperations.addSectionTitleToPopupMenu("Tell: ",
gui.getjPopupMenu());
BasicMenuOperations.addMenuItemToPopupMenu(new BW4TMessage(
MessageType.INROOM, label, null, null), gui);
JMenu submenu = BasicMenuOperations.addSubMenuToPopupMenu(label
+ " contains ", gui.getjPopupMenu());
for (String color : ColorTranslator.getAllColors()) {
String color2 = BasicMenuOperations.getColor(color, ourEntity);
menuItem = new JMenuItem(color2);
menuItem.addActionListener(new MessageSenderActionListener(
new BW4TMessage(MessageType.ROOMCONTAINS, label, color2,
null), controller));
submenu.add(menuItem);
if (!color2.equals(color)) {
break;
}
}
submenu = BasicMenuOperations.addSubMenuToPopupMenu(label
+ " contains ", gui.getjPopupMenu());
// option for each amount of blocks (e.g.: Room X contains -> 3 -> Pink)
for (int i = 0; i < 6; i++) {
JMenu submenuColor = new JMenu("" + i);
submenu.add(submenuColor);
for (String color : ColorTranslator.getAllColors()) {
String color2 = BasicMenuOperations.getColor(color, ourEntity);
menuItem = new JMenuItem(color2);
menuItem.addActionListener(new MessageSenderActionListener(
new BW4TMessage(MessageType.ROOMCONTAINSAMOUNT, label,
color2, i), controller));
submenuColor.add(menuItem);
if (!color2.equals(color)) {
break;
}
}
}
BasicMenuOperations.addMenuItemToPopupMenu(new BW4TMessage(
MessageType.CHECKED, label, null, null), gui);
submenu = BasicMenuOperations.addSubMenuToPopupMenu(label
+ " has been checked by ", gui.getjPopupMenu());
for (String p : controller.getOtherPlayers()) {
menuItem = new JMenuItem("" + p);
menuItem.addActionListener(new MessageSenderActionListener(
new BW4TMessage(MessageType.CHECKED, label, null, p),
controller));
submenu.add(menuItem);
}
BasicMenuOperations.addMenuItemToPopupMenu(new BW4TMessage(
MessageType.ROOMISEMPTY, label, null, null), gui);
String holdingColor = holding != null ? BasicMenuOperations.getColor(
holding.getColor().getName(), ourEntity) : "";
if (holding != null) {
BasicMenuOperations.addMenuItemToPopupMenu(new BW4TMessage(
MessageType.ABOUTTODROPOFFBLOCK, null, holdingColor, null),
gui);
} else {
BasicMenuOperations.addMenuItemToPopupMenu(new BW4TMessage(
MessageType.DROPPEDOFFBLOCK, null, null, null), gui);
}
if (holding != null) {
BasicMenuOperations.addMenuItemToPopupMenu(new BW4TMessage(
MessageType.HASCOLOR, null, holdingColor, null), gui);
submenu = BasicMenuOperations.addSubMenuToPopupMenu("I have a "
+ holdingColor + " block from ", gui.getjPopupMenu());
for (Zone roomInfo : cmc.getRooms()) {
menuItem = new JMenuItem(roomInfo.getName());
menuItem.addActionListener(new MessageSenderActionListener(
new BW4TMessage(MessageType.HASCOLOR, roomInfo
.getName(), holdingColor, null), controller));
submenu.add(menuItem);
}
}
BasicMenuOperations.addSectionTitleToPopupMenu("Ask:",
gui.getjPopupMenu());
BasicMenuOperations.addMenuItemToPopupMenu(new BW4TMessage(
MessageType.ISANYBODYGOINGTOROOM, label, null, null), gui);
BasicMenuOperations.addMenuItemToPopupMenu(new BW4TMessage(
MessageType.WHATISINROOM, label, null, null), gui);
BasicMenuOperations.addMenuItemToPopupMenu(new BW4TMessage(
MessageType.HASANYBODYCHECKEDROOM, label, null, null), gui);
BasicMenuOperations.addMenuItemToPopupMenu(new BW4TMessage(
MessageType.WHOISINROOM, label, null, null), gui);
gui.getjPopupMenu().addSeparator();
menuItem = new JMenuItem("Close menu");
gui.getjPopupMenu().add(menuItem);
}
}