Refactor: moved "Savegames" class into savegames package. Moved ListOfListeners into util package.

This commit is contained in:
Oskar Wiksten
2013-01-13 16:22:49 +01:00
parent 16a69bf48c
commit be2e54978d
24 changed files with 123 additions and 123 deletions

View File

@@ -10,6 +10,7 @@ import com.gpl.rpg.AndorsTrail.context.ViewContext;
import com.gpl.rpg.AndorsTrail.context.WorldContext;
import com.gpl.rpg.AndorsTrail.model.ModelContainer;
import com.gpl.rpg.AndorsTrail.resource.ResourceLoader;
import com.gpl.rpg.AndorsTrail.savegames.Savegames;
public final class WorldSetup {

View File

@@ -18,8 +18,8 @@ import android.widget.TextView;
import com.gpl.rpg.AndorsTrail.AndorsTrailApplication;
import com.gpl.rpg.AndorsTrail.AndorsTrailPreferences;
import com.gpl.rpg.AndorsTrail.R;
import com.gpl.rpg.AndorsTrail.Savegames;
import com.gpl.rpg.AndorsTrail.Savegames.FileHeader;
import com.gpl.rpg.AndorsTrail.savegames.Savegames;
import com.gpl.rpg.AndorsTrail.savegames.Savegames.FileHeader;
import com.gpl.rpg.AndorsTrail.model.ModelContainer;
public final class LoadSaveActivity extends Activity implements OnClickListener {

View File

@@ -11,7 +11,7 @@ import android.os.Bundle;
import com.gpl.rpg.AndorsTrail.AndorsTrailApplication;
import com.gpl.rpg.AndorsTrail.R;
import com.gpl.rpg.AndorsTrail.Savegames;
import com.gpl.rpg.AndorsTrail.savegames.Savegames;
import com.gpl.rpg.AndorsTrail.WorldSetup;
import com.gpl.rpg.AndorsTrail.WorldSetup.OnResourcesLoadedListener;
import com.gpl.rpg.AndorsTrail.WorldSetup.OnSceneLoadedListener;

View File

@@ -7,7 +7,7 @@ import com.gpl.rpg.AndorsTrail.AndorsTrailPreferences;
import com.gpl.rpg.AndorsTrail.Dialogs;
import com.gpl.rpg.AndorsTrail.AndorsTrailApplication;
import com.gpl.rpg.AndorsTrail.R;
import com.gpl.rpg.AndorsTrail.Savegames;
import com.gpl.rpg.AndorsTrail.savegames.Savegames;
import com.gpl.rpg.AndorsTrail.context.ViewContext;
import com.gpl.rpg.AndorsTrail.context.WorldContext;
import com.gpl.rpg.AndorsTrail.controller.CombatController;

View File

@@ -4,9 +4,9 @@ import com.gpl.rpg.AndorsTrail.AndorsTrailApplication;
import com.gpl.rpg.AndorsTrail.AndorsTrailPreferences;
import com.gpl.rpg.AndorsTrail.Dialogs;
import com.gpl.rpg.AndorsTrail.R;
import com.gpl.rpg.AndorsTrail.Savegames;
import com.gpl.rpg.AndorsTrail.savegames.Savegames;
import com.gpl.rpg.AndorsTrail.WorldSetup;
import com.gpl.rpg.AndorsTrail.Savegames.FileHeader;
import com.gpl.rpg.AndorsTrail.savegames.Savegames.FileHeader;
import com.gpl.rpg.AndorsTrail.controller.Constants;
import com.gpl.rpg.AndorsTrail.resource.tiles.TileManager;

View File

@@ -5,7 +5,7 @@ import java.util.ArrayList;
import com.gpl.rpg.AndorsTrail.VisualEffectCollection;
import com.gpl.rpg.AndorsTrail.context.ViewContext;
import com.gpl.rpg.AndorsTrail.context.WorldContext;
import com.gpl.rpg.AndorsTrail.controller.listeners.PlayerStatsListeners;
import com.gpl.rpg.AndorsTrail.model.listeners.PlayerStatsListeners;
import com.gpl.rpg.AndorsTrail.model.ability.ActorCondition;
import com.gpl.rpg.AndorsTrail.model.ability.ActorConditionEffect;
import com.gpl.rpg.AndorsTrail.model.ability.ActorConditionType;

View File

@@ -2,7 +2,7 @@ package com.gpl.rpg.AndorsTrail.controller.listeners;
import com.gpl.rpg.AndorsTrail.model.AttackResult;
import com.gpl.rpg.AndorsTrail.model.actor.Monster;
import com.gpl.rpg.AndorsTrail.model.listeners.ListOfListeners;
import com.gpl.rpg.AndorsTrail.util.ListOfListeners;
public final class CombatActionListeners extends ListOfListeners<CombatActionListener> implements CombatActionListener {

View File

@@ -1,7 +1,7 @@
package com.gpl.rpg.AndorsTrail.controller.listeners;
import com.gpl.rpg.AndorsTrail.model.actor.Monster;
import com.gpl.rpg.AndorsTrail.model.listeners.ListOfListeners;
import com.gpl.rpg.AndorsTrail.util.ListOfListeners;
import com.gpl.rpg.AndorsTrail.util.Coord;
public final class CombatSelectionListeners extends ListOfListeners<CombatSelectionListener> implements CombatSelectionListener {

View File

@@ -1,7 +1,7 @@
package com.gpl.rpg.AndorsTrail.controller.listeners;
import com.gpl.rpg.AndorsTrail.model.actor.Monster;
import com.gpl.rpg.AndorsTrail.model.listeners.ListOfListeners;
import com.gpl.rpg.AndorsTrail.util.ListOfListeners;
public final class CombatTurnListeners extends ListOfListeners<CombatTurnListener> implements CombatTurnListener {

View File

@@ -1,6 +1,6 @@
package com.gpl.rpg.AndorsTrail.controller.listeners;
import com.gpl.rpg.AndorsTrail.model.listeners.ListOfListeners;
import com.gpl.rpg.AndorsTrail.util.ListOfListeners;
public final class GameRoundListeners extends ListOfListeners<GameRoundListener> implements GameRoundListener {

View File

@@ -1,6 +1,6 @@
package com.gpl.rpg.AndorsTrail.controller.listeners;
import com.gpl.rpg.AndorsTrail.model.listeners.ListOfListeners;
import com.gpl.rpg.AndorsTrail.util.ListOfListeners;
import com.gpl.rpg.AndorsTrail.model.map.PredefinedMap;
import com.gpl.rpg.AndorsTrail.util.Coord;

View File

@@ -1,7 +1,7 @@
package com.gpl.rpg.AndorsTrail.controller.listeners;
import com.gpl.rpg.AndorsTrail.model.actor.Monster;
import com.gpl.rpg.AndorsTrail.model.listeners.ListOfListeners;
import com.gpl.rpg.AndorsTrail.util.ListOfListeners;
import com.gpl.rpg.AndorsTrail.model.map.PredefinedMap;
import com.gpl.rpg.AndorsTrail.util.CoordRect;

View File

@@ -1,7 +1,7 @@
package com.gpl.rpg.AndorsTrail.controller.listeners;
import com.gpl.rpg.AndorsTrail.model.actor.Monster;
import com.gpl.rpg.AndorsTrail.model.listeners.ListOfListeners;
import com.gpl.rpg.AndorsTrail.util.ListOfListeners;
import com.gpl.rpg.AndorsTrail.model.map.PredefinedMap;
import com.gpl.rpg.AndorsTrail.util.Coord;
import com.gpl.rpg.AndorsTrail.util.CoordRect;

View File

@@ -1,6 +1,6 @@
package com.gpl.rpg.AndorsTrail.controller.listeners;
import com.gpl.rpg.AndorsTrail.model.listeners.ListOfListeners;
import com.gpl.rpg.AndorsTrail.util.ListOfListeners;
import com.gpl.rpg.AndorsTrail.model.map.PredefinedMap;
import com.gpl.rpg.AndorsTrail.util.Coord;

View File

@@ -1,6 +1,6 @@
package com.gpl.rpg.AndorsTrail.controller.listeners;
import com.gpl.rpg.AndorsTrail.model.listeners.ListOfListeners;
import com.gpl.rpg.AndorsTrail.util.ListOfListeners;
public final class QuickSlotListeners extends ListOfListeners<QuickSlotListener> implements QuickSlotListener {

View File

@@ -1,7 +1,7 @@
package com.gpl.rpg.AndorsTrail.controller.listeners;
import com.gpl.rpg.AndorsTrail.controller.VisualEffectController.VisualEffectAnimation;
import com.gpl.rpg.AndorsTrail.model.listeners.ListOfListeners;
import com.gpl.rpg.AndorsTrail.util.ListOfListeners;
public final class VisualEffectFrameListeners extends ListOfListeners<VisualEffectFrameListener> implements VisualEffectFrameListener {

View File

@@ -2,7 +2,7 @@ package com.gpl.rpg.AndorsTrail.controller.listeners;
import com.gpl.rpg.AndorsTrail.model.actor.Monster;
import com.gpl.rpg.AndorsTrail.model.item.Loot;
import com.gpl.rpg.AndorsTrail.model.listeners.ListOfListeners;
import com.gpl.rpg.AndorsTrail.util.ListOfListeners;
import com.gpl.rpg.AndorsTrail.model.map.MapObject;
import java.util.Collection;

View File

@@ -2,6 +2,7 @@ package com.gpl.rpg.AndorsTrail.model.listeners;
import com.gpl.rpg.AndorsTrail.model.ability.ActorCondition;
import com.gpl.rpg.AndorsTrail.model.actor.Actor;
import com.gpl.rpg.AndorsTrail.util.ListOfListeners;
public final class ActorConditionListeners extends ListOfListeners<ActorConditionListener> implements ActorConditionListener {

View File

@@ -1,7 +1,7 @@
package com.gpl.rpg.AndorsTrail.model.listeners;
import com.gpl.rpg.AndorsTrail.model.actor.Actor;
import com.gpl.rpg.AndorsTrail.model.listeners.ListOfListeners;
import com.gpl.rpg.AndorsTrail.util.ListOfListeners;
public final class ActorStatsListeners extends ListOfListeners<ActorStatsListener> implements ActorStatsListener {

View File

@@ -1,4 +1,4 @@
package com.gpl.rpg.AndorsTrail.controller.listeners;
package com.gpl.rpg.AndorsTrail.model.listeners;
import com.gpl.rpg.AndorsTrail.model.actor.Player;

View File

@@ -1,7 +1,7 @@
package com.gpl.rpg.AndorsTrail.controller.listeners;
package com.gpl.rpg.AndorsTrail.model.listeners;
import com.gpl.rpg.AndorsTrail.model.actor.Player;
import com.gpl.rpg.AndorsTrail.model.listeners.ListOfListeners;
import com.gpl.rpg.AndorsTrail.util.ListOfListeners;
public final class PlayerStatsListeners extends ListOfListeners<PlayerStatsListener> implements PlayerStatsListener {

View File

@@ -1,4 +1,4 @@
package com.gpl.rpg.AndorsTrail;
package com.gpl.rpg.AndorsTrail.savegames;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
@@ -21,11 +21,10 @@ import java.util.regex.Pattern;
import android.content.Context;
import android.os.Environment;
import com.gpl.rpg.AndorsTrail.AndorsTrailApplication;
import com.gpl.rpg.AndorsTrail.context.ViewContext;
import com.gpl.rpg.AndorsTrail.context.WorldContext;
import com.gpl.rpg.AndorsTrail.controller.Constants;
import com.gpl.rpg.AndorsTrail.controller.Controller;
import com.gpl.rpg.AndorsTrail.controller.MovementController;
import com.gpl.rpg.AndorsTrail.model.ModelContainer;
import com.gpl.rpg.AndorsTrail.util.L;
@@ -35,97 +34,96 @@ public final class Savegames {
public static final int LOAD_RESULT_SUCCESS = 0;
public static final int LOAD_RESULT_UNKNOWN_ERROR = 1;
public static final int LOAD_RESULT_FUTURE_VERSION = 2;
public static boolean saveWorld(WorldContext world, Context androidContext, int slot, String displayInfo) {
try {
// Create the savegame in a temporary memorystream first to ensure that the savegame can
// be created correctly. We don't want to trash the user's file unneccessarily if there is an error.
ByteArrayOutputStream bos = new ByteArrayOutputStream();
saveWorld(world, bos, displayInfo);
byte[] savegame = bos.toByteArray();
bos.close();
bos = null;
FileOutputStream fos = getOutputFile(androidContext, slot);
fos.write(savegame);
fos.close();
return true;
} catch (IOException e) {
L.log("Error saving world: " + e.toString());
return false;
}
}
public static int loadWorld(WorldContext world, ViewContext view, Context androidContext, int slot) {
try {
FileInputStream fos = getInputFile(androidContext, slot);
int result = loadWorld(world, view, fos);
fos.close();
return result;
} catch (IOException e) {
if (AndorsTrailApplication.DEVELOPMENT_DEBUGMESSAGES) {
L.log("Error loading world: " + e.toString());
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
e.printStackTrace(pw);
L.log("Load error: " + sw.toString());
public static boolean saveWorld(WorldContext world, Context androidContext, int slot, String displayInfo) {
try {
// Create the savegame in a temporary memorystream first to ensure that the savegame can
// be created correctly. We don't want to trash the user's file unneccessarily if there is an error.
ByteArrayOutputStream bos = new ByteArrayOutputStream();
saveWorld(world, bos, displayInfo);
byte[] savegame = bos.toByteArray();
bos.close();
FileOutputStream fos = getOutputFile(androidContext, slot);
fos.write(savegame);
fos.close();
return true;
} catch (IOException e) {
L.log("Error saving world: " + e.toString());
return false;
}
}
public static int loadWorld(WorldContext world, ViewContext view, Context androidContext, int slot) {
try {
FileInputStream fos = getInputFile(androidContext, slot);
int result = loadWorld(world, view, fos);
fos.close();
return result;
} catch (IOException e) {
if (AndorsTrailApplication.DEVELOPMENT_DEBUGMESSAGES) {
L.log("Error loading world: " + e.toString());
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
e.printStackTrace(pw);
L.log("Load error: " + sw.toString());
}
return LOAD_RESULT_UNKNOWN_ERROR;
}
}
private static FileOutputStream getOutputFile(Context androidContext, int slot) throws IOException {
if (slot == SLOT_QUICKSAVE) {
return androidContext.openFileOutput(Constants.FILENAME_SAVEGAME_QUICKSAVE, Context.MODE_PRIVATE);
} else {
ensureSavegameDirectoryExists();
return new FileOutputStream(getSlotFile(slot));
}
}
private static void ensureSavegameDirectoryExists() {
File root = Environment.getExternalStorageDirectory();
}
}
private static FileOutputStream getOutputFile(Context androidContext, int slot) throws IOException {
if (slot == SLOT_QUICKSAVE) {
return androidContext.openFileOutput(Constants.FILENAME_SAVEGAME_QUICKSAVE, Context.MODE_PRIVATE);
} else {
ensureSavegameDirectoryExists();
return new FileOutputStream(getSlotFile(slot));
}
}
private static void ensureSavegameDirectoryExists() {
File root = Environment.getExternalStorageDirectory();
File dir = new File(root, Constants.FILENAME_SAVEGAME_DIRECTORY);
if (!dir.exists()) dir.mkdir();
}
private static FileInputStream getInputFile(Context androidContext, int slot) throws IOException {
if (slot == SLOT_QUICKSAVE) {
return androidContext.openFileInput(Constants.FILENAME_SAVEGAME_QUICKSAVE);
} else {
return new FileInputStream(getSlotFile(slot));
}
}
private static File getSlotFile(int slot) {
File root = getSavegameDirectory();
}
private static FileInputStream getInputFile(Context androidContext, int slot) throws IOException {
if (slot == SLOT_QUICKSAVE) {
return androidContext.openFileInput(Constants.FILENAME_SAVEGAME_QUICKSAVE);
} else {
return new FileInputStream(getSlotFile(slot));
}
}
private static File getSlotFile(int slot) {
File root = getSavegameDirectory();
return new File(root, Constants.FILENAME_SAVEGAME_FILENAME_PREFIX + slot);
}
private static File getSavegameDirectory() {
File root = Environment.getExternalStorageDirectory();
}
private static File getSavegameDirectory() {
File root = Environment.getExternalStorageDirectory();
return new File(root, Constants.FILENAME_SAVEGAME_DIRECTORY);
}
}
public static void saveWorld(WorldContext world, OutputStream outStream, String displayInfo) throws IOException {
DataOutputStream dest = new DataOutputStream(outStream);
final int flags = 0;
FileHeader.writeToParcel(dest, world.model.player.getName(), displayInfo);
world.maps.writeToParcel(dest, flags);
world.model.writeToParcel(dest, flags);
dest.close();
}
DataOutputStream dest = new DataOutputStream(outStream);
final int flags = 0;
FileHeader.writeToParcel(dest, world.model.player.getName(), displayInfo);
world.maps.writeToParcel(dest, flags);
world.model.writeToParcel(dest, flags);
dest.close();
}
public static int loadWorld(WorldContext world, ViewContext view, InputStream inState) throws IOException {
DataInputStream src = new DataInputStream(inState);
final FileHeader header = new FileHeader(src);
if (header.fileversion > AndorsTrailApplication.CURRENT_VERSION) return LOAD_RESULT_FUTURE_VERSION;
world.maps.readFromParcel(src, world, view, header.fileversion);
world.model = new ModelContainer(src, world, view, header.fileversion);
src.close();
onWorldLoaded(world, view);
return LOAD_RESULT_SUCCESS;
}
DataInputStream src = new DataInputStream(inState);
final FileHeader header = new FileHeader(src);
if (header.fileversion > AndorsTrailApplication.CURRENT_VERSION) return LOAD_RESULT_FUTURE_VERSION;
world.maps.readFromParcel(src, world, view, header.fileversion);
world.model = new ModelContainer(src, world, view, header.fileversion);
src.close();
onWorldLoaded(world, view);
return LOAD_RESULT_SUCCESS;
}
private static void onWorldLoaded(WorldContext world, ViewContext view) {
view.actorStatsController.recalculatePlayerStats(world.model.player);
view.controller.resetMapsNotRecentlyVisited();
@@ -139,11 +137,11 @@ public final class Savegames {
if (!f.exists()) return null;
}
FileInputStream fos = getInputFile(androidContext, slot);
DataInputStream src = new DataInputStream(fos);
final FileHeader header = new FileHeader(src);
src.close();
fos.close();
return header;
DataInputStream src = new DataInputStream(fos);
final FileHeader header = new FileHeader(src);
src.close();
fos.close();
return header;
} catch (Exception e) {
return null;
}
@@ -192,20 +190,20 @@ public final class Savegames {
public FileHeader(DataInputStream src) throws IOException {
int fileversion = src.readInt();
if (fileversion == 11) fileversion = 5; // Fileversion 5 had no version identifier, but the first byte was 11.
this.fileversion = fileversion;
if (fileversion >= 14) { // Before fileversion 14 (0.6.7), we had no file header.
this.playerName = src.readUTF();
this.displayInfo = src.readUTF();
} else {
this.playerName = null;
this.displayInfo = null;
}
this.fileversion = fileversion;
if (fileversion >= 14) { // Before fileversion 14 (0.6.7), we had no file header.
this.playerName = src.readUTF();
this.displayInfo = src.readUTF();
} else {
this.playerName = null;
this.displayInfo = null;
}
}
public static void writeToParcel(DataOutputStream dest, String playerName, String displayInfo) throws IOException {
dest.writeInt(AndorsTrailApplication.CURRENT_VERSION);
dest.writeUTF(playerName);
dest.writeUTF(displayInfo);
dest.writeUTF(playerName);
dest.writeUTF(displayInfo);
}
}
}

View File

@@ -1,4 +1,4 @@
package com.gpl.rpg.AndorsTrail.model.listeners;
package com.gpl.rpg.AndorsTrail.util;
import java.lang.ref.WeakReference;
import java.util.ArrayList;

View File

@@ -5,7 +5,7 @@ import com.gpl.rpg.AndorsTrail.R;
import com.gpl.rpg.AndorsTrail.activity.HeroinfoActivity;
import com.gpl.rpg.AndorsTrail.context.ViewContext;
import com.gpl.rpg.AndorsTrail.context.WorldContext;
import com.gpl.rpg.AndorsTrail.controller.listeners.PlayerStatsListener;
import com.gpl.rpg.AndorsTrail.model.listeners.PlayerStatsListener;
import com.gpl.rpg.AndorsTrail.model.actor.Actor;
import com.gpl.rpg.AndorsTrail.model.actor.Player;
import com.gpl.rpg.AndorsTrail.model.listeners.ActorStatsListener;