package ruscz.game.gameOfProd.LevelEditor; import javax.swing.*; import java.util.LinkedList; public class DetailedCellInfo extends JPanel { private LinkedList radioButtons; private LinkedList textFields; private LevelEditor editor; private int i; private int j; public DetailedCellInfo(LevelEditor editor, int i, int j) { this.radioButtons = new LinkedList<>(); this.textFields = new LinkedList<>(); this.editor = editor; this.i = i; this.j = j; } public void displayDetailedCellInfo(String type) { removeAll(); setVisible(false); radioButtons.clear(); textFields.clear(); if (type.equals("BLOCK")) { trueFalseInfo("Visible", "visible", "hidden", 0); upperLowerInfo(); } else if (type.equals("INTER")) { trueFalseInfo("Visible", "visible", "hidden", 0); fieldInfo("Dialog Name", "dialog", 100); } else if (type.equals("TRIGGER")) { trueFalseInfo("Active", "active", "inactive", 0); fieldInfo("Dialog Name", "dialog", 100); } else if (type.equals("MOVETO")) { trueFalseInfo("Visible", "visible", "hidden", 0); fieldInfo("Target Map Name", "map name", 100); fieldInfo("Target Door Id", "door id", 200); directionInfo(300); } else if (type.equals("DOOR")) { trueFalseInfo("Vertical", "vertical", "horizontal", 0); fieldInfo("Dialog Name", "dialog", 100); } else if (type.equals("DOORTO")) { trueFalseInfo("Vertical", "vertical", "horizontal", 0); fieldInfo("Dialog Name", "dialog", 100); fieldInfo("Target Map Name", "map name", 200); fieldInfo("Target Door Id", "door id", 300); directionInfo(400); } else if (type.equals("CHEST")) { trueFalseInfo("Shown as Chest", "chest", "item", 0); fieldInfo("Inventory Name", "inventory", 100); } setInfo(); } private void trueFalseInfo(String title, String trueLabel, String falseLabel, int offset) { JLabel label = new JLabel("
Is " + title + "
"); label.setBounds(0, offset, 260, 20); JRadioButton yes = new JRadioButton("Yes"); yes.setBounds(75, offset + 30, 70, 20); yes.setSelected(true); yes.setName(trueLabel); radioButtons.add(yes); JRadioButton no = new JRadioButton("No"); no.setBounds(150, offset + 30, 70, 20); no.setName(falseLabel); radioButtons.add(no); ButtonGroup group = new ButtonGroup(); group.add(yes); group.add(no); add(label); add(yes); add(no); repaint(); setVisible(true); } private void fieldInfo(String title, String fieldName, int offset) { JLabel label = new JLabel("
" + title + "
"); label.setBounds(0, offset, 260, 20); JTextField field = new JTextField(); field.setBounds(80, offset + 30, 100, 20); field.setName(fieldName); textFields.add(field); add(label); add(field); repaint(); setVisible(true); } private void upperLowerInfo() { JLabel label = new JLabel("
Half Block
"); label.setBounds(0, 100, 260, 20); JRadioButton up = new JRadioButton("Upper"); up.setBounds(0, 130, 70, 20); up.setName("upper"); JRadioButton low = new JRadioButton("Lower"); low.setBounds(100, 130, 70, 20); low.setName("lower"); JRadioButton none = new JRadioButton("None"); none.setBounds(200, 130, 70, 20); none.setSelected(true); none.setName("full"); ButtonGroup group = new ButtonGroup(); group.add(up); group.add(low); group.add(none); radioButtons.add(up); radioButtons.add(low); add(label); add(up); add(low); add(none); repaint(); setVisible(true); } private void directionInfo(int offset) { JLabel label = new JLabel("
Direction Out
"); label.setBounds(0, offset, 260, 20); JRadioButton up = new JRadioButton("Up"); up.setBounds(110, offset + 30, 70, 20); up.setSelected(true); up.setName("up"); JRadioButton down = new JRadioButton("Down"); down.setBounds(110, offset + 90, 70, 20); down.setName("down"); JRadioButton left = new JRadioButton("Left"); left.setBounds(75, offset + 60, 70, 20); left.setName("left"); JRadioButton right = new JRadioButton("Right"); right.setBounds(150, offset + 60, 70, 20); right.setName("right"); ButtonGroup group = new ButtonGroup(); group.add(up); group.add(down); group.add(left); group.add(right); radioButtons.add(up); radioButtons.add(down); radioButtons.add(left); radioButtons.add(right); add(label); add(up); add(down); add(left); add(right); repaint(); setVisible(true); } public String getCellInfo(String type) { String info = type; if (type.equals("BLOCK")) { info = getVisibleInfo(type); if (info.equals(type)) info += getUpperLowerInfo(); } else if (type.equals("INTER")) { info = getVisibleInfo(type); if (getFieldInfo("dialog", true) == null) return null; info += getFieldInfo("dialog", true); } else if (type.equals("TRIGGER")) { if (getFieldInfo("dialog", true) == null) return null; info += getFieldInfo("dialog", true); info += getTrueFalseInfo("active", "inactive"); } else if (type.equals("MOVETO")) { info = getVisibleInfo(type); if (getFieldIntegerInfo("door id") == null) return null; info += getFieldIntegerInfo("door id"); info += getDirectionInfo(); if (getFieldInfo("map name", true) == null) return null; info += getFieldInfo("map name", true); } else if (type.equals("DOOR")) { info = getDoorInfo(type); info += getTrueFalseInfo("vertical", "horizontal"); info += getFieldInfo("dialog", false); } else if (type.equals("DOORTO")) { info = getDoorInfo(type); info += getLockedInfo(); info += getTrueFalseInfo("vertical", "horizontal"); info += getFieldInfo("dialog", false); if (getFieldIntegerInfo("door id") == null) return null; info += getFieldIntegerInfo("door id"); info += getDirectionInfo(); if (getFieldInfo("map name", true) == null) return null; info += getFieldInfo("map name", true); } else if (type.equals("CHEST")) { if (getFieldInfo("inventory", true) == null) return null; info += getFieldInfo("inventory", true); info += getTrueFalseInfo("chest", "item"); } editor.hideError(); return info; } private String getVisibleInfo(String type) { String info = ""; for (JRadioButton button : radioButtons) { if (button.getName().equals("visible") && button.isSelected()) { info = type.toUpperCase(); break; } else if (button.getName().equals("hidden") && button.isSelected()) { info = type.toLowerCase(); break; } } return info; } private String getUpperLowerInfo() { String info = ""; for (JRadioButton button : radioButtons) { if (button.getName().equals("upper") && button.isSelected()) { info += ",u"; break; } else if (button.getName().equals("lower") && button.isSelected()) { info += ",d"; break; } } return info; } private String getFieldInfo(String fieldName, boolean isRequired) { String info = ""; for (JTextField field : textFields) { if (field.getName().equals(fieldName)) { if (isRequired && field.getText().trim().length() == 0) { editor.displayError("The " + field.getName() + " field cannot stay empty."); return null; } if(field.getText().trim().length() != 0) { info += "," + field.getText().trim(); } break; } } return info; } private String getFieldIntegerInfo(String fieldName) { String info = ""; for (JTextField field : textFields) { if (field.getName().equals(fieldName)) { try { info += "," + Integer.parseInt(field.getText().trim()); } catch (NumberFormatException ex) { editor.displayError("The " + field.getName() + " field must be an Integer."); return null; } } } return info; } private String getTrueFalseInfo(String trueLabel, String falseLabel) { String info = ""; for (JRadioButton button : radioButtons) { if (button.getName().equals(trueLabel) && button.isSelected()) { info += ",true"; break; } if (button.getName().equals(falseLabel) && button.isSelected()) { info += ",false"; break; } } return info; } private String getDirectionInfo() { String info = ""; for (JRadioButton button : radioButtons) { if (button.getName().equals("up") && button.isSelected()) { info += ",1"; break; } else if (button.getName().equals("down") && button.isSelected()) { info += ",3"; break; } else if (button.getName().equals("left") && button.isSelected()) { info += ",4"; break; } else if (button.getName().equals("right") && button.isSelected()) { info += ",2"; break; } } return info; } private String getDoorInfo(String type) { String info = ""; if (j == 0 || editor.getCellArray()[i][j+1].split(",")[0].equals(type)) { info = type.toLowerCase(); } else { info = type; } return info; } private String getLockedInfo() { String info = ""; for (JTextField field : textFields) { if (field.getName().equals("dialog") && field.getText().trim().length() != 0) { info += ",locked"; } } return info; } private void setInfo() { String[] info = editor.getCellArray()[i][j].split(","); System.out.println(editor.getCellArray()[i][j]); String type = info[0]; if (type.equals("BLOCK") || type.equals("block")) { setTrueFalseInfo(type); if (info.length > 1) setUpperLowerInfo(info[1]); } else if (type.equals("INTER") || type.equals("inter")) { setTrueFalseInfo(type); setFieldInfo("dialog", info[1]); } else if (type.equals("TRIGGER")) { setFieldInfo("dialog", info[1]); if (info.length > 2) setTrueFalseInfo(info[2]); } else if (type.equals("MOVETO") || type.equals("moveto")) { setTrueFalseInfo(type); setFieldInfo("door id", info[1]); setDirectionInfo(info[2]); setFieldInfo("map name", info[3]); } else if (type.equals("DOOR") || type.equals("door")) { setTrueFalseInfo(info[1]); if (info.length > 2) setFieldInfo("dialog", info[2]); } else if (type.equals("DOORTO") || type.equals("doorto")) { if (info[1].equals("locked")) { setTrueFalseInfo(info[2]); setFieldInfo("dialog", info[3]); setFieldInfo("door id", info[4]); setDirectionInfo(info[5]); setFieldInfo("map name", info[6]); } else { setTrueFalseInfo(info[1]); setFieldInfo("door id", info[2]); setDirectionInfo(info[3]); setFieldInfo("map name", info[4]); } } else if (type.equals("CHEST")) { setFieldInfo("inventory", info[1]); if (info.length > 2) setTrueFalseInfo(info[2]); } } private void setTrueFalseInfo(String value) { if (value.equals("false")) { for (JRadioButton btn : radioButtons) { if (btn.getName().equals("inactive")) { btn.setSelected(true); return; } else if (btn.getName().equals("horizontal")) { btn.setSelected(true); return; } else if (btn.getName().equals("item")) { btn.setSelected(true); return; } } } else if (value.equals(value.toLowerCase())) { for (JRadioButton btn : radioButtons) { if (btn.getName().equals("hidden")) { btn.setSelected(true); return; } } } } private void setUpperLowerInfo(String value) { String name = ""; switch (value) { case "u": name = "upper"; break; case "d": name = "lower"; break; } for (JRadioButton btn : radioButtons) { if (btn.getName().equals(name)) { btn.setSelected(true); return; } } } private void setFieldInfo(String fieldName, String value) { for (JTextField field : textFields) { if (field.getName().equals(fieldName)) { field.setText(value); return; } } } private void setDirectionInfo(String value) { String name = ""; switch (value) { case "1": name = "up"; break; case "2": name = "right"; break; case "3": name = "down"; break; case "4": name = "left"; break; } for (JRadioButton btn : radioButtons) { if (btn.getName().equals(name)) { btn.setSelected(true); return; } } } }