mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-03-10 05:41:51 +09:00
added sources for Slick
Former-commit-id: 1647fa32ef6894bd7db44f741f07c2f4dcdf9054 Former-commit-id: 0e5810dcfbe1fd59b13e7cabe9f1e93c5542da2d
This commit is contained in:
176
lib/slick-source/org/newdawn/slick/SavedState.java
Normal file
176
lib/slick-source/org/newdawn/slick/SavedState.java
Normal file
@@ -0,0 +1,176 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user