2020-05-23 22:20:14 +02:00

478 lines
15 KiB
Java

package ruscz.game.gameOfProd.LevelEditor;
import javax.swing.*;
import java.util.LinkedList;
public class DetailedCellInfo extends JPanel {
private LinkedList<JRadioButton> radioButtons;
private LinkedList<JTextField> 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("<html><div style='text-align: center; width: 260'>Is " + title + "</div></html>");
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("<html><div style='text-align: center; width: 260'>" + title + "</div></html>");
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("<html><div style='text-align: center; width: 260'>Half Block</div></html>");
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("<html><div style='text-align: center; width: 260'>Direction Out</div></html>");
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;
}
}
}
}