diff --git a/src/Middleware.java b/src/Middleware.java index 23b0eaa..3c2f42d 100644 --- a/src/Middleware.java +++ b/src/Middleware.java @@ -7,8 +7,8 @@ public class Middleware { public static ArrayList allOldCode = new ArrayList(); public static ArrayList allNewCode = new ArrayList(); - private final int oldCode; - private final int newCode; + public final int oldCode; + public final int newCode; public boolean isDestroyed = false; Middleware(int oldCode, int newCode) { @@ -48,7 +48,7 @@ public class Middleware { // duck typing equals check // if it has the same oldCode, assume it is the same; this is because oldCodes should be unique // also makes some corner cases easier - return this.oldCode == m.oldCode; + return this.oldCode == m.oldCode || this.newCode == m.newCode; } catch (ClassCastException e) { return false; } diff --git a/src/SettingPanel.java b/src/SettingPanel.java index 511274a..53406f0 100644 --- a/src/SettingPanel.java +++ b/src/SettingPanel.java @@ -105,13 +105,22 @@ public class SettingPanel extends JPanel implements Runnable, KeyListener{ //call the draw methods in each class to update positions as things move public void draw(Graphics g, int playerFrame, int enemyFrame){ + String oldText; + int middlewareIndex; background.draw(g); title.draw(g,null, Color.black); for (TextBox t: textBoxArray) { + oldText = t.text; + middlewareIndex = GamePanel.middlewareArray.indexOf(new Middleware(Integer.parseInt(t.id), -1)); + t.text += "(" + (middlewareIndex > -1 ? (char)GamePanel.middlewareArray.get(middlewareIndex).newCode:(char)Integer.parseInt(t.id)) + ")"; t.draw(g, null, Color.cyan); + t.text = oldText; } + oldText = textBoxArray.get(currentBox).text; + middlewareIndex = GamePanel.middlewareArray.indexOf(new Middleware(Integer.parseInt(textBoxArray.get(currentBox).id), -1)); + textBoxArray.get(currentBox).text += "(" + (middlewareIndex > -1 ? (char)GamePanel.middlewareArray.get(middlewareIndex).newCode:(char)Integer.parseInt(textBoxArray.get(currentBox).id)) + ")"; textBoxArray.get(currentBox).draw(g, Color.gray, Color.blue); - + textBoxArray.get(currentBox).text = oldText; if (waitForKey) { g.setColor(new Color(255, 255, 255, 100)); g.fillRect(0, 0, GAME_WIDTH, GAME_HEIGHT); @@ -161,11 +170,15 @@ public class SettingPanel extends JPanel implements Runnable, KeyListener{ public void changeKeyBind() { if (lastKeyCode != -1) { - System.out.println(lastKeyCode); - // newCode is -1 as it does not matter - GamePanel.middlewareArray.remove(new Middleware(Integer.parseInt(textBoxArray.get(currentBox).id), -1)); + boolean canRemove = true; + while (canRemove) { + // newCode is -1 as it does not matter + canRemove = GamePanel.middlewareArray.remove(new Middleware(Integer.parseInt(textBoxArray.get(currentBox).id), lastKeyCode)); + } + // add actual middleware GamePanel.middlewareArray.add(new Middleware(Integer.parseInt(textBoxArray.get(currentBox).id), lastKeyCode)); - System.out.println(GamePanel.middlewareArray.get(0)); + // add middleware to redirect default key + GamePanel.middlewareArray.add(new Middleware(-1, Integer.parseInt(textBoxArray.get(currentBox).id))); // lastKeyCode is set to -1 to prevent endless execution lastKeyCode = -1; } diff --git a/src/TextBox.java b/src/TextBox.java index 8d9f4b6..50cc885 100644 --- a/src/TextBox.java +++ b/src/TextBox.java @@ -5,7 +5,7 @@ public class TextBox extends Rectangle { int xWidth, yHeight; int newX, newY; Font font; - String text; + public String text; public final String id; public TextBox(int y, int xWidth, int yHeight, int totalWidth, Font font, String text, String id) {