From a02ab17f2582572d673c8f723b6e0f62f9a97484 Mon Sep 17 00:00:00 2001 From: Oskar Wiksten Date: Sat, 8 Sep 2012 15:46:13 +0200 Subject: [PATCH] Bugfix: respawn all maps after resting. (Thanks Nyktos for finding it!) --- .../src/com/gpl/rpg/AndorsTrail/Savegames.java | 2 +- .../rpg/AndorsTrail/activity/DebugInterface.java | 3 +-- .../rpg/AndorsTrail/controller/Controller.java | 14 ++++++++------ .../controller/GameRoundController.java | 6 +++--- .../controller/MovementController.java | 1 + .../rpg/AndorsTrail/model/map/PredefinedMap.java | 16 ++++++---------- 6 files changed, 20 insertions(+), 22 deletions(-) diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/Savegames.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/Savegames.java index 7516e44d3..3bd347113 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/Savegames.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/Savegames.java @@ -128,7 +128,7 @@ public final class Savegames { private static void onWorldLoaded(WorldContext world) { ActorStatsController.recalculatePlayerCombatTraits(world.model.player); - Controller.resetMaps(world, true, true); + Controller.resetMapsNotRecentlyVisited(world); MovementController.moveBlockedActors(world); } diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/DebugInterface.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/DebugInterface.java index 21e57f6f7..4edaf576a 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/DebugInterface.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/DebugInterface.java @@ -119,8 +119,7 @@ public final class DebugInterface { @Override public void onClick(View arg0) { for(PredefinedMap map : world.maps.predefinedMaps) { - map.lastVisitTime = 1; - map.resetIfNotRecentlyVisited(true); + map.resetTemporaryData(); } mainActivity.showToast("DEBUG: maps respawned", Toast.LENGTH_SHORT); } diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/Controller.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/Controller.java index 7fc33e4ea..9718d1d6d 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/Controller.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/Controller.java @@ -85,7 +85,9 @@ public final class Controller { player.spawnPlace = area.id; player.spawnMap = world.model.currentMap.name; } - resetMaps(world, false, true); + for (PredefinedMap m : world.maps.predefinedMaps) { + m.resetTemporaryData(); + } if (area != null) { world.model.currentMap.spawnAll(world); } @@ -103,12 +105,12 @@ public final class Controller { return false; } - public static void resetMaps(final WorldContext world, boolean excludeCurrentMap, boolean resetEvenIfMapIsAlreadyReset) { + public static void resetMapsNotRecentlyVisited(final WorldContext world) { for (PredefinedMap m : world.maps.predefinedMaps) { - if (excludeCurrentMap) { - if (m == world.model.currentMap) continue; - } - m.resetIfNotRecentlyVisited(resetEvenIfMapIsAlreadyReset); + if (m == world.model.currentMap) continue; + if (m.isRecentlyVisited()) continue; + if (m.hasResetTemporaryData()) continue; + m.resetTemporaryData(); } } diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/GameRoundController.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/GameRoundController.java index 5f1c460f8..066638572 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/GameRoundController.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/GameRoundController.java @@ -53,9 +53,9 @@ public final class GameRoundController implements TimedMessageTask.Callback { model.uiSelections.isMainActivityVisible = false; } - private void onNewFullRound() { - Controller.resetMaps(world, true, false); - view.actorStatsController.applyConditionsToMonsters(model.currentMap, true); + public void onNewFullRound() { + Controller.resetMapsNotRecentlyVisited(world); + view.actorStatsController.applyConditionsToMonsters(model.currentMap, true); view.actorStatsController.applyConditionsToPlayer(model.player, true); } diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/MovementController.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/MovementController.java index efaa44ab4..32a061c5e 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/MovementController.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/MovementController.java @@ -89,6 +89,7 @@ public final class MovementController implements TimedMessageTask.Callback { } private static void playerVisitsMapFirstTime(final WorldContext world, PredefinedMap m) { + m.reset(); m.spawnAll(world); m.createAllContainerLoot(); m.visited = true; diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/map/PredefinedMap.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/map/PredefinedMap.java index 57ab6f7c3..7190746bb 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/map/PredefinedMap.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/map/PredefinedMap.java @@ -210,13 +210,12 @@ public final class PredefinedMap { groundBags.remove(loot); } public void reset() { - groundBags.clear(); + resetTemporaryData(); for(MonsterSpawnArea a : spawnAreas) { a.reset(); } - splatters.clear(); + groundBags.clear(); visited = false; - lastVisitTime = VISIT_RESET; } public boolean isRecentlyVisited() { @@ -226,13 +225,7 @@ public final class PredefinedMap { public void updateLastVisitTime() { lastVisitTime = System.currentTimeMillis(); } - public void resetIfNotRecentlyVisited(boolean resetEvenIfMapIsAlreadyReset) { - if (!resetEvenIfMapIsAlreadyReset) { - if (lastVisitTime == VISIT_RESET) return; - } - if (isRecentlyVisited()) return; - - // We reset all non-unique spawn areas. This keeps the savegame file smaller, thus reducing load and save times. Also keeps the running memory usage slightly lower. + public void resetTemporaryData() { for(MonsterSpawnArea a : spawnAreas) { if (a.isUnique) a.resetShops(); else a.reset(); @@ -240,6 +233,9 @@ public final class PredefinedMap { splatters.clear(); lastVisitTime = VISIT_RESET; } + public boolean hasResetTemporaryData() { + return lastVisitTime == VISIT_RESET; + } public void createAllContainerLoot() { for (MapObject o : eventObjects) {