From 85eb66d508fca2a93ce9f2b11735e809d4ea8ecd Mon Sep 17 00:00:00 2001 From: Jessica Syder Date: Mon, 4 Sep 2017 12:30:01 +1200 Subject: [PATCH] Keybindings can be saved and loaded, and work when Jar'd! - trying to solve jar file reading issue - learnt a lot about jars including their lack of file structure - changed location of keybindings settings to outside of jar - added new folder/file that is generated on first run #story[1197] --- .../src/main/java/visualiser/app/App.java | 1 + .../gameController/Keys/KeyFactory.java | 47 ++++++++++++------- .../visualiser/userSettings/keyFactory.xml | 33 ------------- 3 files changed, 32 insertions(+), 49 deletions(-) delete mode 100644 racevisionGame/src/main/resources/visualiser/userSettings/keyFactory.xml diff --git a/racevisionGame/src/main/java/visualiser/app/App.java b/racevisionGame/src/main/java/visualiser/app/App.java index cc3b0e1e..186bc094 100644 --- a/racevisionGame/src/main/java/visualiser/app/App.java +++ b/racevisionGame/src/main/java/visualiser/app/App.java @@ -51,6 +51,7 @@ public class App extends Application { @Override public void init() { + // load the user's personalised key bindings keyFactory.load(); ImageView splash = new ImageView(new Image( diff --git a/racevisionGame/src/main/java/visualiser/gameController/Keys/KeyFactory.java b/racevisionGame/src/main/java/visualiser/gameController/Keys/KeyFactory.java index b4d55201..a783f268 100644 --- a/racevisionGame/src/main/java/visualiser/gameController/Keys/KeyFactory.java +++ b/racevisionGame/src/main/java/visualiser/gameController/Keys/KeyFactory.java @@ -3,7 +3,6 @@ package visualiser.gameController.Keys; import java.beans.XMLDecoder; import java.beans.XMLEncoder; import java.io.*; -import java.net.URISyntaxException; import java.util.HashMap; import java.util.Map; @@ -71,16 +70,15 @@ public class KeyFactory { */ public void save(){ try { - XMLEncoder encoder = new XMLEncoder(new BufferedOutputStream( - new FileOutputStream(getClass().getResource( - "/visualiser/userSettings/keyFactory.xml") - .toURI().getPath()))); - encoder.writeObject(this.keyState); - encoder.close(); + // open the filestream and write to it + FileOutputStream fos = new FileOutputStream( + System.getProperty("user.dir")+ + "/settings/keyBindings.xml"); + XMLEncoder xmlEncoder = new XMLEncoder(fos); + xmlEncoder.writeObject(this.keyState); + xmlEncoder.close(); } catch (FileNotFoundException e) { e.printStackTrace(); - } catch (URISyntaxException e) { - e.printStackTrace(); } } @@ -89,18 +87,35 @@ public class KeyFactory { */ public void load(){ try { - XMLDecoder decoder = new XMLDecoder(new BufferedInputStream( - new FileInputStream(getClass().getResource( - "/visualiser/userSettings/keyFactory.xml") - .toURI().getPath()))); + // access settings folder, create if it doesn't exist + File settingsFolder = new File( + System.getProperty("user.dir")+"/settings"); + if (!settingsFolder.exists()){ + settingsFolder.mkdir(); + } + // access keybindings xml file, create if it doesn't exist + File savedFile = new File( + settingsFolder+"/keyBindings.xml"); + if (!savedFile.exists()){ + savedFile.createNewFile(); + FileOutputStream fos = new FileOutputStream(savedFile); + XMLEncoder xmlEncoder = new XMLEncoder(fos); + xmlEncoder.writeObject(this.keyState); + xmlEncoder.close(); + } + + // load the saved settings into the game + InputStream is = new FileInputStream(savedFile); + XMLDecoder xmlDecoder = new XMLDecoder(is); Map savedKeyState - = (Map)decoder.readObject(); - decoder.close(); + = (Map)xmlDecoder.readObject(); + xmlDecoder.close(); this.keyState = savedKeyState; + } catch (FileNotFoundException e) { e.printStackTrace(); - } catch (URISyntaxException e) { + } catch (IOException e) { e.printStackTrace(); } } diff --git a/racevisionGame/src/main/resources/visualiser/userSettings/keyFactory.xml b/racevisionGame/src/main/resources/visualiser/userSettings/keyFactory.xml deleted file mode 100644 index ae05a188..00000000 --- a/racevisionGame/src/main/resources/visualiser/userSettings/keyFactory.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - SPACE - - - - SHIFT - - - - DOWN - - - - X - - - - ENTER - - - - Z - - - - UP - - - - \ No newline at end of file