Add support for JmeSystem.StorageFolderType in saveGame and loadGame
git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@10022 75d07b2b-3a1a-0410-a2c5-0572b91ccdca
This commit is contained in:
parent
ecb8b0508d
commit
feff63fda2
@ -62,10 +62,31 @@ public class SaveGame {
|
|||||||
* @param data The Savable to save
|
* @param data The Savable to save
|
||||||
*/
|
*/
|
||||||
public static void saveGame(String gamePath, String dataName, Savable data) {
|
public static void saveGame(String gamePath, String dataName, Savable data) {
|
||||||
|
saveGame(gamePath, dataName, data, JmeSystem.StorageFolderType.External);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Saves a savable in a system-dependent way.
|
||||||
|
* @param gamePath A unique path for this game, e.g. com/mycompany/mygame
|
||||||
|
* @param dataName A unique name for this savegame, e.g. "save_001"
|
||||||
|
* @param data The Savable to save
|
||||||
|
* @param storageType The specific type of folder to use to save the data
|
||||||
|
*/
|
||||||
|
public static void saveGame(String gamePath, String dataName, Savable data, JmeSystem.StorageFolderType storageType) {
|
||||||
|
if (storageType == null) {
|
||||||
|
Logger.getLogger(SaveGame.class.getName()).log(Level.SEVERE, "Base Storage Folder Type is null, using External!");
|
||||||
|
storageType = JmeSystem.StorageFolderType.External;
|
||||||
|
}
|
||||||
|
|
||||||
BinaryExporter ex = BinaryExporter.getInstance();
|
BinaryExporter ex = BinaryExporter.getInstance();
|
||||||
OutputStream os = null;
|
OutputStream os = null;
|
||||||
try {
|
try {
|
||||||
File daveFolder = new File(JmeSystem.getStorageFolder().getAbsolutePath() + File.separator + gamePath.replace('/', File.separatorChar));
|
File baseFolder = JmeSystem.getStorageFolder(storageType);
|
||||||
|
if (baseFolder == null) {
|
||||||
|
Logger.getLogger(SaveGame.class.getName()).log(Level.SEVERE, "Error creating save file!");
|
||||||
|
throw new IllegalStateException("SaveGame dataset cannot be created");
|
||||||
|
}
|
||||||
|
File daveFolder = new File(baseFolder.getAbsolutePath() + File.separator + gamePath.replace('/', File.separatorChar));
|
||||||
if (!daveFolder.exists() && !daveFolder.mkdirs()) {
|
if (!daveFolder.exists() && !daveFolder.mkdirs()) {
|
||||||
Logger.getLogger(SaveGame.class.getName()).log(Level.SEVERE, "Error creating save file!");
|
Logger.getLogger(SaveGame.class.getName()).log(Level.SEVERE, "Error creating save file!");
|
||||||
throw new IllegalStateException("SaveGame dataset cannot be created");
|
throw new IllegalStateException("SaveGame dataset cannot be created");
|
||||||
@ -79,6 +100,7 @@ public class SaveGame {
|
|||||||
}
|
}
|
||||||
os = new GZIPOutputStream(new BufferedOutputStream(new FileOutputStream(saveFile)));
|
os = new GZIPOutputStream(new BufferedOutputStream(new FileOutputStream(saveFile)));
|
||||||
ex.save(data, os);
|
ex.save(data, os);
|
||||||
|
Logger.getLogger(SaveGame.class.getName()).log(Level.INFO, "Saving data to: {0}", saveFile.getAbsolutePath());
|
||||||
} catch (IOException ex1) {
|
} catch (IOException ex1) {
|
||||||
Logger.getLogger(SaveGame.class.getName()).log(Level.SEVERE, "Error saving data: {0}", ex1);
|
Logger.getLogger(SaveGame.class.getName()).log(Level.SEVERE, "Error saving data: {0}", ex1);
|
||||||
ex1.printStackTrace();
|
ex1.printStackTrace();
|
||||||
@ -103,7 +125,18 @@ public class SaveGame {
|
|||||||
* @return The savable that was saved
|
* @return The savable that was saved
|
||||||
*/
|
*/
|
||||||
public static Savable loadGame(String gamePath, String dataName) {
|
public static Savable loadGame(String gamePath, String dataName) {
|
||||||
return loadGame(gamePath, dataName, null);
|
return loadGame(gamePath, dataName, null, JmeSystem.StorageFolderType.External);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Loads a savable that has been saved on this system with saveGame() before.
|
||||||
|
* @param gamePath A unique path for this game, e.g. com/mycompany/mygame
|
||||||
|
* @param dataName A unique name for this savegame, e.g. "save_001"
|
||||||
|
* @param storageType The specific type of folder to use to save the data
|
||||||
|
* @return The savable that was saved
|
||||||
|
*/
|
||||||
|
public static Savable loadGame(String gamePath, String dataName, JmeSystem.StorageFolderType storageType) {
|
||||||
|
return loadGame(gamePath, dataName, null, storageType);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -114,10 +147,32 @@ public class SaveGame {
|
|||||||
* @return The savable that was saved or null if none was found
|
* @return The savable that was saved or null if none was found
|
||||||
*/
|
*/
|
||||||
public static Savable loadGame(String gamePath, String dataName, AssetManager manager) {
|
public static Savable loadGame(String gamePath, String dataName, AssetManager manager) {
|
||||||
|
return loadGame(gamePath, dataName, manager, JmeSystem.StorageFolderType.External);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Loads a savable that has been saved on this system with saveGame() before.
|
||||||
|
* @param gamePath A unique path for this game, e.g. com/mycompany/mygame
|
||||||
|
* @param dataName A unique name for this savegame, e.g. "save_001"
|
||||||
|
* @param manager Link to an AssetManager if required for loading the data (e.g. models with textures)
|
||||||
|
* @param storageType The specific type of folder to use to save the data
|
||||||
|
* @return The savable that was saved or null if none was found
|
||||||
|
*/
|
||||||
|
public static Savable loadGame(String gamePath, String dataName, AssetManager manager, JmeSystem.StorageFolderType storageType) {
|
||||||
|
if (storageType == null) {
|
||||||
|
Logger.getLogger(SaveGame.class.getName()).log(Level.SEVERE, "Base Storage Folder Type is null, using External!");
|
||||||
|
storageType = JmeSystem.StorageFolderType.External;
|
||||||
|
}
|
||||||
|
|
||||||
InputStream is = null;
|
InputStream is = null;
|
||||||
Savable sav = null;
|
Savable sav = null;
|
||||||
try {
|
try {
|
||||||
File file = new File(JmeSystem.getStorageFolder().getAbsolutePath() + File.separator + gamePath.replace('/', File.separatorChar) + File.separator + dataName);
|
File baseFolder = JmeSystem.getStorageFolder(storageType);
|
||||||
|
if (baseFolder == null) {
|
||||||
|
Logger.getLogger(SaveGame.class.getName()).log(Level.SEVERE, "Error reading base storage folder!");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
File file = new File(baseFolder.getAbsolutePath() + File.separator + gamePath.replace('/', File.separatorChar) + File.separator + dataName);
|
||||||
if(!file.exists()){
|
if(!file.exists()){
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@ -127,6 +182,7 @@ public class SaveGame {
|
|||||||
imp.setAssetManager(manager);
|
imp.setAssetManager(manager);
|
||||||
}
|
}
|
||||||
sav = imp.load(is);
|
sav = imp.load(is);
|
||||||
|
Logger.getLogger(SaveGame.class.getName()).log(Level.INFO, "Loading data from: {0}", file.getAbsolutePath());
|
||||||
} catch (IOException ex) {
|
} catch (IOException ex) {
|
||||||
Logger.getLogger(SaveGame.class.getName()).log(Level.SEVERE, "Error loading data: {0}", ex);
|
Logger.getLogger(SaveGame.class.getName()).log(Level.SEVERE, "Error loading data: {0}", ex);
|
||||||
ex.printStackTrace();
|
ex.printStackTrace();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user