mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-03-07 20:31:51 +09:00
Former-commit-id: 1647fa32ef6894bd7db44f741f07c2f4dcdf9054 Former-commit-id: 0e5810dcfbe1fd59b13e7cabe9f1e93c5542da2d
176 lines
4.5 KiB
Java
176 lines
4.5 KiB
Java
package org.newdawn.slick;
|
|
|
|
import java.io.IOException;
|
|
import java.util.HashMap;
|
|
|
|
import javax.jnlp.ServiceManager;
|
|
|
|
import org.newdawn.slick.muffin.FileMuffin;
|
|
import org.newdawn.slick.muffin.Muffin;
|
|
import org.newdawn.slick.muffin.WebstartMuffin;
|
|
import org.newdawn.slick.util.Log;
|
|
|
|
/**
|
|
* A utility to allow game setup/state to be stored locally. This utility will adapt to the
|
|
* current enviornment (webstart or file based). Note that this will not currently
|
|
* work in an applet.
|
|
*
|
|
* @author kappaOne
|
|
*/
|
|
public class SavedState {
|
|
/** file name of where the scores will be saved */
|
|
private String fileName;
|
|
/** Type of Muffin to use */
|
|
private Muffin muffin;
|
|
/** hash map where int data will be stored */
|
|
private HashMap numericData = new HashMap();
|
|
/** hash map where string data will be stored */
|
|
private HashMap stringData = new HashMap();
|
|
|
|
/**
|
|
* Create and Test to see if the app is running
|
|
* as webstart or local app and select the appropriate
|
|
* muffin type
|
|
*
|
|
* @param fileName name of muffin where data will be saved
|
|
* @throws SlickException Indicates a failure to load the stored state
|
|
*/
|
|
public SavedState(String fileName) throws SlickException {
|
|
this.fileName = fileName;
|
|
|
|
if (isWebstartAvailable()) {
|
|
muffin = new WebstartMuffin();
|
|
}
|
|
else {
|
|
muffin = new FileMuffin();
|
|
}
|
|
|
|
try {
|
|
load();
|
|
} catch (IOException e) {
|
|
throw new SlickException("Failed to load state on startup",e);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Get number stored at given location
|
|
*
|
|
* @param nameOfField The name of the number to retrieve
|
|
* @return The number saved at this location
|
|
*/
|
|
public double getNumber(String nameOfField) {
|
|
return getNumber(nameOfField, 0);
|
|
}
|
|
|
|
/**
|
|
* Get number stored at given location
|
|
*
|
|
* @param nameOfField The name of the number to retrieve
|
|
* @param defaultValue The value to return if the specified value hasn't been set
|
|
* @return The number saved at this location
|
|
*/
|
|
public double getNumber(String nameOfField, double defaultValue) {
|
|
Double value = ((Double)numericData.get(nameOfField));
|
|
|
|
if (value == null) {
|
|
return defaultValue;
|
|
}
|
|
|
|
return value.doubleValue();
|
|
}
|
|
|
|
/**
|
|
* Save the given value at the given location
|
|
* will overwrite any previous value at this location
|
|
*
|
|
* @param nameOfField The name to store the value against
|
|
* @param value The value to store
|
|
*/
|
|
public void setNumber(String nameOfField, double value){
|
|
numericData.put(nameOfField, new Double(value));
|
|
}
|
|
|
|
/**
|
|
* Get the String at the given location
|
|
*
|
|
* @param nameOfField location of string
|
|
* @return String stored at the location given
|
|
*/
|
|
public String getString(String nameOfField) {
|
|
return getString(nameOfField, null);
|
|
}
|
|
|
|
/**
|
|
* Get the String at the given location
|
|
*
|
|
* @param nameOfField location of string
|
|
* @param defaultValue The value to return if the specified value hasn't been set
|
|
* @return String stored at the location given
|
|
*/
|
|
public String getString(String nameOfField, String defaultValue) {
|
|
String value = (String) stringData.get(nameOfField);
|
|
|
|
if (value == null) {
|
|
return defaultValue;
|
|
}
|
|
|
|
return value;
|
|
}
|
|
|
|
/**
|
|
* Save the given value at the given location
|
|
* will overwrite any previous value at this location
|
|
*
|
|
* @param nameOfField location to store int
|
|
* @param value The value to store
|
|
*/
|
|
public void setString(String nameOfField, String value){
|
|
stringData.put(nameOfField, value);
|
|
}
|
|
|
|
/**
|
|
* Save the stored data to file/muffin
|
|
*
|
|
* @throws IOException Indicates it wasn't possible to store the state
|
|
*/
|
|
public void save() throws IOException {
|
|
muffin.saveFile(numericData, fileName + "_Number");
|
|
muffin.saveFile(stringData, fileName + "_String");
|
|
}
|
|
|
|
/**
|
|
* Load the data from file/muffin
|
|
*
|
|
* @throws IOException Indicates it wasn't possible to load the state
|
|
*/
|
|
public void load() throws IOException {
|
|
numericData = muffin.loadFile(fileName + "_Number");
|
|
stringData = muffin.loadFile(fileName + "_String");
|
|
}
|
|
|
|
/**
|
|
* Will delete all current data held in Score
|
|
*/
|
|
public void clear() {
|
|
numericData.clear();
|
|
stringData.clear();
|
|
}
|
|
|
|
/**
|
|
* Quick test to see if running through Java webstart
|
|
*
|
|
* @return True if jws running
|
|
*/
|
|
private boolean isWebstartAvailable() {
|
|
try {
|
|
Class.forName("javax.jnlp.ServiceManager");
|
|
// this causes to go and see if the service is available
|
|
ServiceManager.lookup("javax.jnlp.PersistenceService");
|
|
Log.info("Webstart detected using Muffins");
|
|
} catch (Exception e) {
|
|
Log.info("Using Local File System");
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
} |