From e49c4cf4e8632a2aea60e87de0c106d2bd9fbf7d Mon Sep 17 00:00:00 2001 From: John Date: Thu, 16 Jun 2022 17:28:59 -0400 Subject: [PATCH] Fixed serialization bugs, bomb bug during dialogue --- src/DialogueMenu.java | 1 - src/FileManager.java | 4 +++- src/GamePanel.java | 33 +++++++++++++++++++++++---------- src/Player.java | 4 ++-- 4 files changed, 28 insertions(+), 14 deletions(-) diff --git a/src/DialogueMenu.java b/src/DialogueMenu.java index 70201d6..fb3d6ab 100644 --- a/src/DialogueMenu.java +++ b/src/DialogueMenu.java @@ -46,7 +46,6 @@ public class DialogueMenu extends TextBox implements Serializable { for (String s: newText) { currentLineWidth += metrics.stringWidth(s + " "); if (currentLineWidth - metrics.stringWidth(" ") < (GamePanel.GAME_WIDTH - PORTRAIT_WIDTH - PADDING*5)) { - System.out.println(s + " " + currentLineWidth); lines.set(lastLineIndex, lines.get(lastLineIndex) + s + " "); } else { currentLineWidth = metrics.stringWidth(s); diff --git a/src/FileManager.java b/src/FileManager.java index bf2eb86..62eeb73 100644 --- a/src/FileManager.java +++ b/src/FileManager.java @@ -28,15 +28,17 @@ public class FileManager { public static Object readObjectFromFile(String fileLocation, List allowedObject) throws IOException, ClassNotFoundException { ObjectInputStream objectStream; + Object o; FileInputStream fileStream = new FileInputStream(fileLocation); if (!allowedObject.contains("Any")) { objectStream = new SafeObjectInputStream(fileStream, allowedObject); } else { objectStream = new ObjectInputStream(fileStream); } + o = objectStream.readObject(); objectStream.close(); fileStream.close(); - return objectStream.readObject(); + return o; } public static void writeObjectToFile(String fileLocation, Object o) throws IOException { diff --git a/src/GamePanel.java b/src/GamePanel.java index 5bd288c..e117d3e 100644 --- a/src/GamePanel.java +++ b/src/GamePanel.java @@ -17,6 +17,7 @@ import java.io.Serializable; import java.nio.file.Files; import java.nio.file.Path; import java.util.ArrayList; +import java.util.ConcurrentModificationException; import javax.sound.sampled.LineUnavailableException; import javax.sound.sampled.UnsupportedAudioFileException; import javax.swing.*; @@ -42,7 +43,7 @@ public class GamePanel extends JPanel implements Runnable, KeyListener, Serializ // keeps track of how many ticks has elapsed since last frame change public int playerFrameCounter = 0; public int enemyFrameCounter = 0; - public boolean isPaused, isDialogue, waitForDialogue; + public boolean isPaused, isDialogue, waitForDialogue, mouseAlreadyTranslated; public PauseMenu pauseMenu; public DialogueMenu dialogueMenu; public ArrayList dialogueArray = new ArrayList(); @@ -143,13 +144,22 @@ public class GamePanel extends JPanel implements Runnable, KeyListener, Serializ addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent e) { try { - player.mousePressed(e); + if (isDialogue || isPaused) { + mouseAlreadyTranslated = true; + keyPressed(new KeyEvent(new Component() {}, 0, 0, 0, KeyEvent.VK_ENTER)); + } else { + player.mousePressed(e); + } } catch (SpriteException | IOException ex) { throw new RuntimeException(ex); } } public void mouseReleased(MouseEvent e) { - player.mouseReleased(e); + if (mouseAlreadyTranslated) { + mouseAlreadyTranslated = false; + } else if (!isDialogue && !isPaused) { + player.mouseReleased(e); + } } @@ -265,7 +275,6 @@ public class GamePanel extends JPanel implements Runnable, KeyListener, Serializ g.fillRect(0, 0, GAME_WIDTH, GAME_HEIGHT); try { if (waitForDialogue) { - System.out.println(dialogueArray); dialogueMenu.currentFrame = dialogueArray.get(0).length(); dialogueMenu.frameCounter = 0; dialogueMenu.draw(g, dialogueArray.get(0), Color.white, Color.black); @@ -274,7 +283,7 @@ public class GamePanel extends JPanel implements Runnable, KeyListener, Serializ } } catch (IndexOutOfBoundsException e) { isDialogue = false; - throw new RuntimeException(e); + // throw new RuntimeException(e); } } } @@ -385,7 +394,7 @@ public class GamePanel extends JPanel implements Runnable, KeyListener, Serializ // atomic save to prevent EOF errors FileManager.writeObjectToFile("local\\temp_state.dat", this); Files.move(Path.of("local", "temp_state.dat"), Path.of("local", "game_state.dat"), ATOMIC_MOVE); - } catch (IOException e) { + } catch (IOException | ConcurrentModificationException e) { e.printStackTrace(); } repaint(); @@ -421,10 +430,14 @@ public class GamePanel extends JPanel implements Runnable, KeyListener, Serializ if (e.getKeyCode() == KeyEvent.VK_ESCAPE) { isPaused = !isPaused; } else if (e.getKeyCode() == KeyEvent.VK_ENTER) { - dialogueMenu.currentFrame = 0; - dialogueMenu.frameCounter = 0; - dialogueArray.remove(0); - waitForDialogue = false; + if (!waitForDialogue) { + waitForDialogue = true; + } else { + dialogueMenu.currentFrame = 0; + dialogueMenu.frameCounter = 0; + dialogueArray.remove(0); + waitForDialogue = false; + } } else { player.keyPressed(e); } diff --git a/src/Player.java b/src/Player.java index 190db2b..5c99405 100644 --- a/src/Player.java +++ b/src/Player.java @@ -28,9 +28,9 @@ public class Player extends GenericSprite { public static int mouseX; public static int mouseY; - public boolean leftMouseDown; + public transient boolean leftMouseDown; - public boolean rightMouseDown; + public transient boolean rightMouseDown; boolean holdingSteel; boolean canPlaceSteel;