diff --git a/src/BufferedImageWrapper.java b/src/BufferedImageWrapper.java index 955e3d6..3473ba3 100644 --- a/src/BufferedImageWrapper.java +++ b/src/BufferedImageWrapper.java @@ -7,7 +7,10 @@ import java.io.*; import java.util.Hashtable; public class BufferedImageWrapper implements Serializable { - public BufferedImage image; + transient public BufferedImage image; + public String imageString; + public Boolean flipImage = false; + public BufferedImageWrapper(int width, int height, int imageType) { image = new BufferedImage(width, height, imageType); } @@ -24,15 +27,44 @@ public class BufferedImageWrapper implements Serializable { this.image = image; } + public BufferedImageWrapper(String imageString) throws IOException { + image = GamePanel.getImage(imageString); + this.imageString = imageString; + } + + public BufferedImageWrapper(String imageString, boolean flip) throws IOException { + BufferedImage temporaryImage = GamePanel.getImage(imageString); + if (flip) { + image = GamePanel.flipImageHorizontally(temporaryImage); + } else { + image = temporaryImage; + } + flipImage = flip; + this.imageString = imageString; + } + public BufferedImageWrapper() {} @Serial private void writeObject(ObjectOutputStream out) throws IOException { - ImageIO.write(image, "png", out); // png is lossless + out.writeObject(flipImage); + if (imageString != null) { + out.writeObject(imageString); + } else { + ImageIO.write(image, "png", out); // png is lossless + } } @Serial private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException { - image = ImageIO.read(in); + Object o; + flipImage = (Boolean)in.readObject(); + o = in.readObject(); + if (o instanceof String) { + image = GamePanel.getImage((String)o); + this.imageString = (String)o; + } else { + image = ImageIO.read(in); + } } } diff --git a/src/GamePanel.java b/src/GamePanel.java index 13f67b2..a26c4c5 100644 --- a/src/GamePanel.java +++ b/src/GamePanel.java @@ -58,14 +58,14 @@ public class GamePanel extends JPanel implements Runnable, KeyListener, Serializ public Camera camera; // image imports begin here - public BufferedImageWrapper backgroundImage = new BufferedImageWrapper(getImage("img/backgrounds/pointyMountains.png")); - public BufferedImageWrapper box = new BufferedImageWrapper(getImage("img/tiles/boxes/box.png")); - public BufferedImageWrapper boxCoin = new BufferedImageWrapper(getImage("img/tiles/boxes/boxCoin.png")); - public BufferedImageWrapper cloud1 = new BufferedImageWrapper(getImage("img/backgrounds/cloud1.png")); - public BufferedImageWrapper cloud2 = new BufferedImageWrapper(getImage("img/backgrounds/cloud2.png")); - public BufferedImageWrapper cloud3 = new BufferedImageWrapper(getImage("img/backgrounds/cloud3.png")); + public BufferedImageWrapper backgroundImage = new BufferedImageWrapper(("img/backgrounds/pointyMountains.png")); + public BufferedImageWrapper box = new BufferedImageWrapper(("img/tiles/boxes/box.png")); + public BufferedImageWrapper boxCoin = new BufferedImageWrapper(("img/tiles/boxes/boxCoin.png")); + public BufferedImageWrapper cloud1 = new BufferedImageWrapper(("img/backgrounds/cloud1.png")); + public BufferedImageWrapper cloud2 = new BufferedImageWrapper(("img/backgrounds/cloud2.png")); + public BufferedImageWrapper cloud3 = new BufferedImageWrapper(("img/backgrounds/cloud3.png")); public BufferedImageWrapper bomb; - public BufferedImageWrapper onePortrait = new BufferedImageWrapper(getImage("img/dialogue/Gunther.png")); + public BufferedImageWrapper onePortrait = new BufferedImageWrapper(("img/dialogue/Gunther.png")); public GamePanel(JPanel gameFrame) throws IOException, SpriteException, UnsupportedAudioFileException, LineUnavailableException { @@ -80,24 +80,24 @@ public class GamePanel extends JPanel implements Runnable, KeyListener, Serializ try { // load player sprites from disk here for (int i = 0; i < 11; i++) { - BufferedImage sprite = getImage(String.format("img/walk/p1_walk%s.png", String.format("%1$2s", i+1).replace(' ', '0'))); + String sprite = (String.format("img/walk/p1_walk%s.png", String.format("%1$2s", i+1).replace(' ', '0'))); playerSpriteArray[1][0][i] = new BufferedImageWrapper(sprite); playerSpriteArray[1][1][i] = new BufferedImageWrapper(sprite); - playerSpriteArray[0][0][i] = new BufferedImageWrapper(flipImageHorizontally(sprite)); - playerSpriteArray[0][1][i] = new BufferedImageWrapper(flipImageHorizontally(sprite)); + playerSpriteArray[0][0][i] = new BufferedImageWrapper(sprite, true); + playerSpriteArray[0][1][i] = new BufferedImageWrapper(sprite, true); } for (int i = 0; i < 9; i++) { - explosionArray[i] = new BufferedImageWrapper(getImage("img/misc/bomb/sonicExplosion0" + i + ".png")); + explosionArray[i] = new BufferedImageWrapper(("img/misc/bomb/sonicExplosion0" + i + ".png")); } // load slime sprites from disk here // these variables were not defined above because they are temporary variables - BufferedImageWrapper[] temporarySlimeArray = {new BufferedImageWrapper(getImage("img/enemy/slime/slimeWalk1.png")), - new BufferedImageWrapper(getImage("img/enemy/slime/slimeWalk2.png")), - new BufferedImageWrapper(getImage("img/enemy/slime/slimeDead.png"))}; - BufferedImageWrapper[] flippedTemporarySlimeArray = {new BufferedImageWrapper(flipImageHorizontally(getImage("img/enemy/slime/slimeWalk1.png"))), - new BufferedImageWrapper(flipImageHorizontally(getImage("img/enemy/slime/slimeWalk2.png"))), - new BufferedImageWrapper(flipImageHorizontally(getImage("img/enemy/slime/slimeDead.png")))}; + BufferedImageWrapper[] temporarySlimeArray = {new BufferedImageWrapper(("img/enemy/slime/slimeWalk1.png")), + new BufferedImageWrapper(("img/enemy/slime/slimeWalk2.png")), + new BufferedImageWrapper(("img/enemy/slime/slimeDead.png"))}; + BufferedImageWrapper[] flippedTemporarySlimeArray = {new BufferedImageWrapper((("img/enemy/slime/slimeWalk1.png")), true), + new BufferedImageWrapper(("img/enemy/slime/slimeWalk2.png"), true), + new BufferedImageWrapper(("img/enemy/slime/slimeDead.png"), true)}; // please note that these sprites are reversed compared to the player sprites slimeSpriteArray[0][0] = temporarySlimeArray; slimeSpriteArray[0][1] = temporarySlimeArray; @@ -105,7 +105,7 @@ public class GamePanel extends JPanel implements Runnable, KeyListener, Serializ slimeSpriteArray[1][1] = flippedTemporarySlimeArray; // load bomb sprites - bomb = new BufferedImageWrapper(getImage("img/misc/bomb.png")); + bomb = new BufferedImageWrapper(("img/misc/bomb.png")); } catch (IOException e) { e.printStackTrace(); } @@ -350,12 +350,12 @@ public class GamePanel extends JPanel implements Runnable, KeyListener, Serializ // increment sprite image to be used and keeps it below 12 playerFrame = (playerFrame + 1) % 11; playerFrameCounter -= 5; -// // if the player has moved enough to justify a frame change, a new save will also be made -// try { -// FileManager.writeObjectToFile("local/game_state", new ArrayList()); // this is placeholder, replace with this -// } catch (IOException e) { -// e.printStackTrace(); -// } + // if the player has moved enough to justify a frame change, a new save will also be made + try { + FileManager.writeObjectToFile("local/game_state", this); // this is placeholder, replace with this + } catch (IOException e) { + e.printStackTrace(); + } } } repaint(); diff --git a/src/MapReader.java b/src/MapReader.java index f46fa8e..a501bea 100644 --- a/src/MapReader.java +++ b/src/MapReader.java @@ -103,6 +103,6 @@ public class MapReader implements Serializable { } } public static void newTile(String filePath) throws IOException, SpriteException { - GameFrame.game.map[x][y]=(new SingleTile(TileX,TileY, new BufferedImageWrapper(GamePanel.getImage(filePath)))); + GameFrame.game.map[x][y]=(new SingleTile(TileX,TileY, new BufferedImageWrapper((filePath)))); } } diff --git a/src/MenuPanel.java b/src/MenuPanel.java index e480007..ce853c7 100644 --- a/src/MenuPanel.java +++ b/src/MenuPanel.java @@ -39,7 +39,7 @@ public class MenuPanel extends JPanel implements Runnable, KeyListener{ public static boolean gameStart = false; // image imports begin here - public BufferedImageWrapper backgroundImage = new BufferedImageWrapper(GamePanel.getImage("img/backgrounds/pointyMountains.png")); + public BufferedImageWrapper backgroundImage = new BufferedImageWrapper(("img/backgrounds/pointyMountains.png")); public MenuPanel(CameraPanel gameFrame) throws IOException, SpriteException, UnsupportedAudioFileException, LineUnavailableException { this.gameFrame = gameFrame; diff --git a/src/Particle.java b/src/Particle.java index c6e52e3..e1eda69 100644 --- a/src/Particle.java +++ b/src/Particle.java @@ -19,7 +19,7 @@ public class Particle extends GenericSprite implements Serializable { super(x,y,length, length); this.xVelocity = xVelocity; this.yVelocity = yVelocity; - sprite = new BufferedImageWrapper(GamePanel.getImage(filePath)); + sprite = new BufferedImageWrapper((filePath)); } public void move(){ x+=xVelocity; diff --git a/src/Player.java b/src/Player.java index 25af147..6860476 100644 --- a/src/Player.java +++ b/src/Player.java @@ -279,7 +279,7 @@ public class Player extends GenericSprite { } } else if((GameFrame.game.map[x][y] == null||GameFrame.game.map[x][y].replaceAble)&&canPlaceSteel){ Tile temp = GameFrame.game.map[x][y]; - GameFrame.game.map[x][y] = new SingleTile(x*Tile.length - (GamePanel.GAME_WIDTH /2), y*Tile.length, new BufferedImageWrapper(GamePanel.getImage("img/tiles/boxes/steel.png"))); + GameFrame.game.map[x][y] = new SingleTile(x*Tile.length - (GamePanel.GAME_WIDTH /2), y*Tile.length, new BufferedImageWrapper(("img/tiles/boxes/steel.png"))); GameFrame.game.map[x][y].movable = true; GameFrame.game.map[x][y].previousBlock = temp; holdingSteel = false;