From 4d80f1b41da0e174e129c8cd9c02a0ff201a8f23 Mon Sep 17 00:00:00 2001 From: Oskar Wiksten Date: Mon, 24 Jun 2013 21:08:29 +0200 Subject: [PATCH] Minor refactoring: Move code that happens after loading a game into Savegames.onWorldLoaded. --- .../com/gpl/rpg/AndorsTrail/WorldSetup.java | 6 +-- .../model/map/TMXMapTranslator.java | 53 +++++++++++-------- .../rpg/AndorsTrail/savegames/Savegames.java | 10 ++-- 3 files changed, 37 insertions(+), 32 deletions(-) diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/WorldSetup.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/WorldSetup.java index 9b5e3e1ca..f7b428f5f 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/WorldSetup.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/WorldSetup.java @@ -139,11 +139,7 @@ public final class WorldSetup { private int continueWorld() { Context ctx = androidContext.get(); - int result = Savegames.loadWorld(world, controllers, ctx, loadFromSlot); - if (result == Savegames.LOAD_RESULT_SUCCESS) { - controllers.movementController.prepareMapAsCurrentMap(world.model.currentMap, ctx.getResources(), false); - } - return result; + return Savegames.loadWorld(world, controllers, ctx, loadFromSlot); } private void createNewWorld() { diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/map/TMXMapTranslator.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/map/TMXMapTranslator.java index 523ef40a6..df7695466 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/map/TMXMapTranslator.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/map/TMXMapTranslator.java @@ -29,11 +29,11 @@ import android.content.res.Resources; public final class TMXMapTranslator { private final ArrayList maps = new ArrayList(); - + public void read(Resources r, int xmlResourceId, String name) { maps.add(TMXMapFileParser.readObjectMap(r, xmlResourceId, name)); } - + public static LayeredTileMap readLayeredTileMap(Resources res, TileCache tileCache, PredefinedMap map) { TMXLayerMap resultMap = TMXMapFileParser.readLayerMap(res, map.xmlResourceId, map.name); return transformMap(resultMap, tileCache); @@ -44,34 +44,35 @@ public final class TMXMapTranslator { } public ArrayList transformMaps(Collection maps, MonsterTypeCollection monsterTypes, DropListCollection dropLists) { ArrayList result = new ArrayList(); - + for (TMXObjectMap m : maps) { assert(m.name != null); assert(m.name.length() > 0); assert(m.width > 0); assert(m.height > 0); - + boolean isOutdoors = false; for (TMXProperty p : m.properties) { if(p.name.equalsIgnoreCase("outside")) isOutdoors = (Integer.parseInt(p.value) != 0); else if(AndorsTrailApplication.DEVELOPMENT_VALIDATEDATA) L.log("OPTIMIZE: Map " + m.name + " has unrecognized property \"" + p.name + "\"."); } - + final Size mapSize = new Size(m.width, m.height); ArrayList mapObjects = new ArrayList(); ArrayList spawnAreas = new ArrayList(); - + for (TMXObjectGroup group : m.objectGroups) { for (TMXObject object : group.objects) { final CoordRect position = getTMXObjectPosition(object, m); - + final Coord topLeft = position.topLeft; + if (object.type == null) { - if (AndorsTrailApplication.DEVELOPMENT_VALIDATEDATA) - L.log("WARNING: Map " + m.name + ", object \"" + object.name + "\" has null type."); + if (AndorsTrailApplication.DEVELOPMENT_VALIDATEDATA) + L.log("WARNING: Map " + m.name + ", object \"" + object.name + "\"@" + topLeft.toString() + " has null type."); } else if (object.type.equalsIgnoreCase("sign")) { String phraseID = object.name; for (TMXProperty p : object.properties) { - if (AndorsTrailApplication.DEVELOPMENT_VALIDATEDATA) L.log("OPTIMIZE: Map " + m.name + ", sign " + object.name + " has unrecognized property \"" + p.name + "\"."); + if (AndorsTrailApplication.DEVELOPMENT_VALIDATEDATA) L.log("OPTIMIZE: Map " + m.name + ", sign " + object.name + "@" + topLeft.toString() + " has unrecognized property \"" + p.name + "\"."); } mapObjects.add(MapObject.createMapSignEvent(position, phraseID)); } else if (object.type.equalsIgnoreCase("mapchange")) { @@ -80,7 +81,7 @@ public final class TMXMapTranslator { for (TMXProperty p : object.properties) { if(p.name.equalsIgnoreCase("map")) map = p.value; else if(p.name.equalsIgnoreCase("place")) place = p.value; - else if(AndorsTrailApplication.DEVELOPMENT_VALIDATEDATA) L.log("OPTIMIZE: Map " + m.name + ", mapchange " + object.name + " has unrecognized property \"" + p.name + "\"."); + else if(AndorsTrailApplication.DEVELOPMENT_VALIDATEDATA) L.log("OPTIMIZE: Map " + m.name + ", mapchange " + object.name + "@" + topLeft.toString() + " has unrecognized property \"" + p.name + "\"."); } mapObjects.add(MapObject.createNewMapEvent(position, object.name, map, place)); } else if (object.type.equalsIgnoreCase("spawn")) { @@ -88,22 +89,28 @@ public final class TMXMapTranslator { int maxQuantity = 1; int spawnChance = 10; for (TMXProperty p : object.properties) { + if (AndorsTrailApplication.DEVELOPMENT_VALIDATEDATA) { + if (p.value.equals("")) { + L.log("OPTIMIZE: Map " + m.name + ", spawn " + object.name + "@" + topLeft.toString() + " has property \"" + p.name + "\" without value."); + continue; + } + } if (p.name.equalsIgnoreCase("quantity")) { maxQuantity = Integer.parseInt(p.value); } else if (p.name.equalsIgnoreCase("spawnchance")) { spawnChance = Integer.parseInt(p.value); } else if (AndorsTrailApplication.DEVELOPMENT_VALIDATEDATA) { - L.log("OPTIMIZE: Map " + m.name + ", spawn " + object.name + " has unrecognized property \"" + p.name + "\"."); + L.log("OPTIMIZE: Map " + m.name + ", spawn " + object.name + "@" + topLeft.toString() + " has unrecognized property \"" + p.name + "\"."); } } - + if (types.isEmpty()) { if (AndorsTrailApplication.DEVELOPMENT_VALIDATEDATA) { - L.log("OPTIMIZE: Map " + m.name + " contains spawn \"" + object.name + "\" that does not correspond to any monsters. The spawn will be removed."); + L.log("OPTIMIZE: Map " + m.name + " contains spawn \"" + object.name + "\"@" + topLeft.toString() + " that does not correspond to any monsters. The spawn will be removed."); } continue; } - + String[] monsterTypeIDs = new String[types.size()]; boolean isUnique = types.get(0).isUnique; for (int i = 0; i < monsterTypeIDs.length; ++i) { @@ -115,13 +122,13 @@ public final class TMXMapTranslator { ,new Range(1000, spawnChance) ,monsterTypeIDs ,isUnique - ); + ); spawnAreas.add(area); } else if (object.type.equalsIgnoreCase("key")) { QuestProgress requireQuestStage = QuestProgress.parseQuestProgress(object.name); if (requireQuestStage == null) { if (AndorsTrailApplication.DEVELOPMENT_VALIDATEDATA) { - L.log("OPTIMIZE: Map " + m.name + " contains key area that cannot be parsed as a quest stage."); + L.log("OPTIMIZE: Map " + m.name + " contains key area at " + topLeft.toString() + " that cannot be parsed as a quest stage."); } continue; } @@ -130,10 +137,10 @@ public final class TMXMapTranslator { if (p.name.equalsIgnoreCase("phrase")) { phraseID = p.value; } else if (AndorsTrailApplication.DEVELOPMENT_VALIDATEDATA) { - L.log("OPTIMIZE: Map " + m.name + ", key " + object.name + " has unrecognized property \"" + p.name + "\"."); + L.log("OPTIMIZE: Map " + m.name + ", key " + object.name + "@" + topLeft.toString() + " has unrecognized property \"" + p.name + "\"."); } } - + mapObjects.add(MapObject.createNewKeyArea(position, phraseID, requireQuestStage)); } else if (object.type.equals("rest")) { mapObjects.add(MapObject.createNewRest(position, object.name)); @@ -155,7 +162,7 @@ public final class TMXMapTranslator { result.add(new PredefinedMap(m.xmlResourceId, m.name, mapSize, _eventObjects, _spawnAreas, isOutdoors)); } - + return result; } @@ -245,7 +252,7 @@ public final class TMXMapTranslator { HashMap layersPerLayerName, HashSet usedTileIDs, SetOfLayerNames layerNames - ) { + ) { final MapLayer layerGround = transformMapLayer(layersPerLayerName, layerNames.groundLayerName, srcMap, tileCache, area, usedTileIDs); final MapLayer layerObjects = transformMapLayer(layersPerLayerName, layerNames.objectsLayerName, srcMap, tileCache, area, usedTileIDs); final MapLayer layerAbove = transformMapLayer(layersPerLayerName, layerNames.aboveLayersName, srcMap, tileCache, area, usedTileIDs); @@ -257,7 +264,7 @@ public final class TMXMapTranslator { private static TMXLayer findLayer(HashMap layersPerLayerName, String layerName, String mapName) { if (layerName == null) return null; if (layerName.length() == 0) return null; - TMXLayer result = layersPerLayerName.get(layerName); + TMXLayer result = layersPerLayerName.get(layerName.toLowerCase()); if (AndorsTrailApplication.DEVELOPMENT_VALIDATEDATA) { if (result == null) { L.log("WARNING: Cannot find maplayer \"" + layerName + "\" requested by map \"" + mapName + "\"."); @@ -342,7 +349,7 @@ public final class TMXMapTranslator { L.log("WARNING: Cannot find tile for gid " + gid); return false; } - + private static final class Tile { public String tilesetName; public int localId; diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/savegames/Savegames.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/savegames/Savegames.java index d43ba033e..7d4df6c8f 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/savegames/Savegames.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/savegames/Savegames.java @@ -19,6 +19,7 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; import android.content.Context; +import android.content.res.Resources; import android.os.Environment; import com.gpl.rpg.AndorsTrail.AndorsTrailApplication; @@ -56,7 +57,7 @@ public final class Savegames { public static int loadWorld(WorldContext world, ControllerContext controllers, Context androidContext, int slot) { try { FileInputStream fos = getInputFile(androidContext, slot); - int result = loadWorld(world, controllers, fos); + int result = loadWorld(androidContext.getResources(), world, controllers, fos); fos.close(); return result; } catch (IOException e) { @@ -110,7 +111,7 @@ public final class Savegames { dest.close(); } - public static int loadWorld(WorldContext world, ControllerContext controllers, InputStream inState) throws IOException { + public static int loadWorld(Resources res, WorldContext world, ControllerContext controllers, 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; @@ -119,14 +120,15 @@ public final class Savegames { world.model = new ModelContainer(src, world, controllers, header.fileversion); src.close(); - onWorldLoaded(world, controllers); + onWorldLoaded(res, world, controllers); return LOAD_RESULT_SUCCESS; } - private static void onWorldLoaded(WorldContext world, ControllerContext controllers) { + private static void onWorldLoaded(Resources res, WorldContext world, ControllerContext controllers) { controllers.actorStatsController.recalculatePlayerStats(world.model.player); controllers.mapController.resetMapsNotRecentlyVisited(); + controllers.movementController.prepareMapAsCurrentMap(world.model.currentMap, res, false); } public static FileHeader quickload(Context androidContext, int slot) {