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]
main
Jessica Syder 8 years ago
parent cfa6fc37e0
commit 85eb66d508

@ -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(

@ -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<String, ControlKey> savedKeyState
= (Map<String, ControlKey>)decoder.readObject();
decoder.close();
= (Map<String, ControlKey>)xmlDecoder.readObject();
xmlDecoder.close();
this.keyState = savedKeyState;
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (URISyntaxException e) {
} catch (IOException e) {
e.printStackTrace();
}
}

@ -1,33 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<java version="1.8.0_121" class="java.beans.XMLDecoder">
<object class="java.util.HashMap">
<void method="put">
<string>SPACE</string>
<object class="visualiser.gameController.Keys.VMGKey"/>
</void>
<void method="put">
<string>SHIFT</string>
<object class="visualiser.gameController.Keys.SailsToggleKey"/>
</void>
<void method="put">
<string>DOWN</string>
<object class="visualiser.gameController.Keys.DownWindKey"/>
</void>
<void method="put">
<string>X</string>
<object class="visualiser.gameController.Keys.ZoomOutKey"/>
</void>
<void method="put">
<string>ENTER</string>
<object class="visualiser.gameController.Keys.TackGybeKey"/>
</void>
<void method="put">
<string>Z</string>
<object class="visualiser.gameController.Keys.ZoomInKey"/>
</void>
<void method="put">
<string>UP</string>
<object class="visualiser.gameController.Keys.UpWindKey"/>
</void>
</object>
</java>
Loading…
Cancel
Save