diff --git a/AndorsTrail/res/xml/blackwater_mountain0.tmx b/AndorsTrail/res/xml/blackwater_mountain0.tmx index d598c42cf..3cca9675c 100644 --- a/AndorsTrail/res/xml/blackwater_mountain0.tmx +++ b/AndorsTrail/res/xml/blackwater_mountain0.tmx @@ -55,7 +55,7 @@ - eJx9VFsOgjAQLE3xHsqnX8bEfx9f/ineQC+gyAFWOZRH8Fjuwm4YSmWSCaHtTKfbhUfuWhA/K+aV+WLemQ94ptakIOOl6q66XvSx9pJYMwVSHUE+1Jb5eM3aj31umXMb5pNJwbkmpP0XmufD8wVkk3E/6+cE3wA5Q5dFMM87CmSfGvYzD/M2DdbVslpe80cdag2yh2STsxRwpn94h15n/vKUcctfh6GmhnOSrsPa7rn2O+XBD/cxT4I7RBTR+4rft+yxdB1PflgbZAWe6G13ZZljPwNF56R87Nn2SdQXJXuclRc/PKf5yp1/w9hTIHOp+/5M1L3SDPNE7yMavR/radyXtFdsDns5lSfG1D+BoPbHrK8t9idqU/8N/K6lRj/QYlHK + eJx9VEsSgjAMrZ3iPZSlK8cZ935W7hRvgBcQ5ABRD+URPJaJJMOjFN5MhqHNe31JA1Xm/iB+1hwlx5PjzlHBM5WTgqwXyis1X/gx95rImQIpj8AfcotsmLPxQ53bzLktx4ODgnPvkNZfqp8P7+fgTdb9vNsTfAP4DK0XwSJrQyDnNHCeaZi2cbCv5tX8mj7ykGuQM8Sb1JJDTWN4hY5n+vKUdfPfhD6ngTpJ87C3B+79XuPo++eYJsEdIvLofc3vO9ZYuTbOvt8bjBo0UdvuyjzHegaK6qRsqPmfk2guCta4aFx9v07U/YahpkDmIXXfn5G+S36tHhaJ2Ue89X5spvFc0lmxPZzllJ8YU/8Egt6fZl0PcD6Rm/pv4HctNf8AzgJRyg== @@ -63,9 +63,9 @@ eJxjYGBgcGZlIAiIUTNUATl+g+kpokAvOihkRdDkmEuuvcQCkLto5bYiHGZTI93Rwr2kAEJ+IOQ+aoZ5IZI56GYWEukOGI3NX840TCMgAABj2w13 - + - eJwTZGBgEBzEGAaobR46wKeOEB+bWYSAIAGaWP349BDrd3IBpWYSG97kmkkNs/GlI2qaRao5yOZhM5sYd1ADUBLW5ORfAF3NCF8= + eJwTZGBgEBzEGAaobR46wKeOEB+bWYSAIAGaWP349BDrd3IBpWYSG97kmkkNs/GlI3LcSU7aJGQGLjFC+qkBKAlrcvIvAIBVCIE= @@ -75,7 +75,7 @@ - + diff --git a/AndorsTrail/res/xml/fields2.tmx b/AndorsTrail/res/xml/fields2.tmx index cefa24896..2cd05ab68 100644 --- a/AndorsTrail/res/xml/fields2.tmx +++ b/AndorsTrail/res/xml/fields2.tmx @@ -55,7 +55,7 @@ - eJytV1tuwjAQjKL0YBXiAJVQj9J/4kj88wHXLatmpWWYfdhlpEhg7N3Z2bFjpsnHYZ6m78dzfDyn+W/svLzOW8nYRsa8uYhPyCn4+YjjIu7FeQqt9WvP2TrWCzesS3he9zGvZqYvzpcYTPMM3hrM6emJ9d/IPJsj6otXp6K3VxWwnJGHKh623yUWi8O8OwLlczU5pAfMl+hdi7PxofJty3PcDFinrGf6Wo9k+8fzJ65bgWuPvpfAs9i/yIOyxtPXy9ucXvXC1mrjiSbYF7ZHLTw+Izyrsdi+sv3M3ifZ2ad72kN0LinXaA76RD+vZMwD04DxVl1Qwyx+z15WMF1H/Rr5LvOkRXY3GHkPCqSuzCcKPQeyXA18YHvQnM+oRdY35fyOc2RL9hR6zHKr3NksMr7/uRtuhfuQcseeV3VEfjYO9izTlQF5MF6RFlGebXn2ZsX3Nh7zpMRU747uQQvvXataZvdB/T16j9yMBh6q/yVQw+o6RbTPUfseL3jjVd+zOn4B8eZf4w== + eJytV1tqwzAQNME9WCk9QCH0KP2Pbch/PpLrNkszsJnOPuR2wGAr0j5mZyVlmmK8Habp8/6835/j4WfsNP+et4ixTYxFcxmv5NPw9ZLbZdya8wDk+vHwuQ6st9g4L4vz8hiLclb88nyzoTivEK1hnxGfnP9VzPM+srpEeQKjtepA+cw01NGw/zZbyo7S7h4gnovzYTVQumTtepycDhHvOj/brcB52nrFr9dI1T+RPnndQrGO8HtONMv1yzRoayJ+I79rUKtR+Fy9PeOE66J61COKR41X/HZtqb7y9azOk2rvQ09HyPYlxJrNYZ3gfRFjERQHKm7wwhxW9kd6GVC87tVrprtKkx7V3WDPOWiwvCqdANgHKl8r6cDXYA3emYuqboj5P/aRregp1piPrXNn86ji/cvdcGvchxA717zLI8fn7XDNKl4VOA4VV8ZF5mebn7XZ0b23pzRpNqHdvT3oEZ214LK6D+L37By5Og4idP9LMIfddUDW58z9iBai8a7uVR7fn2FgOQ== diff --git a/AndorsTrail/res/xml/fields4.tmx b/AndorsTrail/res/xml/fields4.tmx index 64e4143cf..22ac5dbb4 100644 --- a/AndorsTrail/res/xml/fields4.tmx +++ b/AndorsTrail/res/xml/fields4.tmx @@ -72,7 +72,7 @@ - + diff --git a/AndorsTrail/res/xml/fields5.tmx b/AndorsTrail/res/xml/fields5.tmx index 9c09a992d..ce2566cc9 100644 --- a/AndorsTrail/res/xml/fields5.tmx +++ b/AndorsTrail/res/xml/fields5.tmx @@ -50,12 +50,12 @@ - eJztlEsOgzAMRLOg4ipUPUiOwP1vAkhUBTS2E/+y6WKExMIvHo9dX6Wsu6rwfZefqP9IC6EnA9V+MqrAo1hXUTXQGywc1K/kFcXU8KR+rT5q+uUy48FcAAPlOYLL5TeCSXkbkSHEQ3vryeV2hJqvhSntRMRcW/dxBJO7hZE8j5ukqf85NYp7aJ50ot7eyrZyNWyrv71cbYa5efX27ZGjXr53flv5UTvD8TPuEuJn3sIvd8QNzvI4M09/7l0bzfCXdQ== + eJztlLsNgDAMRFOAWAXEIBmB/TcBJBAfnT/YcdJQnJAo/OLz2blPadmUhe+ULlH/kUZCbwaq/WZkgUex7qJqoDd4OKhfySuKaeFJ/Xp9tPTLZaYEcwQMlOcILpffCCblbUSGEA/tbUkutyPUfD1MaSci5qrdxxZM7hZG8krcJEv9+VAr7q6hs4l6u5bt5VrYXn+/cq0ZlmYW0as2Lxp+6fxq+VE7w/Fr3CXEr3kLT26LG1zL45p5+rlPrcQwl3M= - eJy1Vstug0AMRAi+Jf2D5trS5t5S+incQyLlzoH8bmOFUSaO92FCR0JEG7Njj2cNRZGHl/p6f60f/5O17bzelEXxPl+/l+vzcv2U6f3leWvvUBzzMNf3fMU4sce2ttetuCbAk+LSOFbX+766z2FT3zgFFp+HR9cl6OsbP4AcZL1ZiY9xqNIxbw6fxNBkPo9+Sq1fT3Byj1L+Zc6ltVqeiEE4xWdL9Q15sDfOiPWsV9+Y58fq3ksyjzYGr7fWZz2/xEsxH0w0HwQhT3m8pHVFvOg5kqbc12P1OAu9nCFd96pGQHLBPP+geE9POZbrORtzaDDWupnb01PEdpS7nrP/CejSKd0EfGZO82+pe7fCbGdAJ9F8UP09UQ4tvTd3C73EubPmAvYzzlJP79bcvmqvyx6t8Yzm1/CeG+119K8t7Z5ZnoMGuecmpQl6luLP2YvB+SHnifo3Uu0p/rVq1UDfQ/xLagX0txHPw4NxZpjfMw+Rn563Ap5T1oxk/tz3IzTm2D7ybcRAnDWbU4DGFtek9uMY6xvVM7+h8VmdPw1Lf6yx9jm1p3w8GOdIr+saJe4PM/pvzg== + eJy1Vstug0AMRAi+Jf2D5trS5t6m9FO4h0TKnQP53cYKo0yM92FCR0JEG7Njj2cNRZGHl/p2f63n/8nadlpvyqJ4n67f6/V5vX7K9P7yvLV3KI55mOt7umKc2GNb2+tWXBPgSXFpnKrb/VA95rCp75wCi8/Do+sSdPWdH0AOst6sxMc4VumYN4dPYmgyn0c/pdavJzi5Ryn/MufSWi1PxCCc4rOl+oY82BlnxHrWq2/M80P16CWZRxuD11vrs55f4qWYD0aaD4KQpzxe0roiXvQcSFPu66maz0IvZ0jXg6oRkFwwzz8o3tNTjuV6LsYc6o21duL29BSxLeWu5+x/Arq0SjcBn5nz9Fvq3q0w2xnQSTTvVX/PlMOe3pu7hV7i3FlzAfsZZ6mjd2tuX7XXZY99OddN82t4z432OvpncWt+eA4a5J6blCboWYo/Zy8G54ecR+rfQLWn+NeqVQN9D/EvqRXQ30Y8D4/GmWF+zzxEfnreCnhOWTOS+XPfj9CYY7vItxEDcdZsTgEaW1yj2o9jrG9Uz/yGxhd1/jQs/bHG2ufUnvJxb5wjva5rlLg/kwdwFg== diff --git a/AndorsTrail/res/xml/flagstone0.tmx b/AndorsTrail/res/xml/flagstone0.tmx index 30f85be45..2e41ccc9e 100644 --- a/AndorsTrail/res/xml/flagstone0.tmx +++ b/AndorsTrail/res/xml/flagstone0.tmx @@ -68,7 +68,7 @@ eJztVFsKwCAM8wre/7KDfQ1J06RWv1YQBppHY90cY8x/vXWaX63b+tG+mx3D3iq13x1PCL/Ll2l13qvix3kvGQ/ydOodMUznf0LRy3y5590+Vq+RTsTLMM7dVHKJfFY9KppKVrsz685317wq+19NR5uVe17xG2EUPnZ+N2v2lqI56NaN+kXVoct6OKnpZH2zX3YXmedMC2FRjx3aqBfEj/adzCJ/6zeb5cp8MD6EUzVVbkWzkqGjjbAPe5EkIQ== - + @@ -81,6 +81,12 @@ + + + + + + diff --git a/AndorsTrail/res/xml/loneford4.tmx b/AndorsTrail/res/xml/loneford4.tmx index 81ca54b31..f738f544b 100644 --- a/AndorsTrail/res/xml/loneford4.tmx +++ b/AndorsTrail/res/xml/loneford4.tmx @@ -68,7 +68,14 @@ eJwTZGBgEBzEmAGNJkaeFICuh5BbqGEPKf4m1x5izEXGAJjWBbc= - + + + + + + + + diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/VisualEffectCollection.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/VisualEffectCollection.java index 15b46c2d6..73d958f34 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/VisualEffectCollection.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/VisualEffectCollection.java @@ -25,7 +25,7 @@ public final class VisualEffectCollection { private static VisualEffect createEffect(DynamicTileLoader loader, int drawableID, ConstRange frameRange, int duration, int textColor) { int[] frameIconIDs = new int[frameRange.max - frameRange.current]; for(int i = 0; i < frameIconIDs.length; ++i) { - frameIconIDs[i] = loader.getTileID(drawableID, frameRange.current + i); + frameIconIDs[i] = loader.prepareTileID(drawableID, frameRange.current + i); } return new VisualEffect(frameIconIDs, duration, textColor); } diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/WorldSetup.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/WorldSetup.java index 1cf3f42f4..8374a34e7 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/WorldSetup.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/WorldSetup.java @@ -104,14 +104,20 @@ public final class WorldSetup { } private int continueWorld() { - return Savegames.loadWorld(world, androidContext.get(), loadFromSlot); + Context ctx = androidContext.get(); + int result = Savegames.loadWorld(world, ctx, loadFromSlot); + if (result == Savegames.LOAD_RESULT_SUCCESS) { + MovementController.loadCurrentTileMap(ctx.getResources(), world); + } + return result; } private void createNewWorld() { + Context ctx = androidContext.get(); world.model = new ModelContainer(); - world.model.player.initializeNewPlayer_(world.itemTypes, world.dropLists, newHeroName); + world.model.player.initializeNewPlayer(world.itemTypes, world.dropLists, newHeroName); Controller.playerRested(world, null); - MovementController.respawnPlayer(world); + MovementController.respawnPlayer(ctx.getResources(), world); } diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/ActorStatsController.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/ActorStatsController.java index ce52d9567..a9c747944 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/ActorStatsController.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/ActorStatsController.java @@ -16,7 +16,7 @@ import com.gpl.rpg.AndorsTrail.model.item.Inventory; import com.gpl.rpg.AndorsTrail.model.item.ItemTraits_OnEquip; import com.gpl.rpg.AndorsTrail.model.item.ItemTraits_OnUse; import com.gpl.rpg.AndorsTrail.model.item.ItemType; -import com.gpl.rpg.AndorsTrail.model.map.LayeredWorldMap; +import com.gpl.rpg.AndorsTrail.model.map.PredefinedMap; import com.gpl.rpg.AndorsTrail.model.map.MonsterSpawnArea; public class ActorStatsController { @@ -136,7 +136,7 @@ public class ActorStatsController { } } - public void applyConditionsToMonsters(LayeredWorldMap map, boolean isFullRound) { + public void applyConditionsToMonsters(PredefinedMap map, boolean isFullRound) { for (MonsterSpawnArea a : map.spawnAreas) { for (Monster m : a.monsters) { applyConditionsToMonster(m, isFullRound); diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/CombatController.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/CombatController.java index b73597f45..34b8c76cd 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/CombatController.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/CombatController.java @@ -20,7 +20,7 @@ import com.gpl.rpg.AndorsTrail.model.actor.Monster; import com.gpl.rpg.AndorsTrail.model.actor.MonsterType; import com.gpl.rpg.AndorsTrail.model.item.ItemTraits_OnUse; import com.gpl.rpg.AndorsTrail.model.item.Loot; -import com.gpl.rpg.AndorsTrail.model.map.LayeredWorldMap; +import com.gpl.rpg.AndorsTrail.model.map.PredefinedMap; import com.gpl.rpg.AndorsTrail.model.map.MonsterSpawnArea; import com.gpl.rpg.AndorsTrail.util.Coord; import com.gpl.rpg.AndorsTrail.view.MainView; @@ -105,7 +105,7 @@ public final class CombatController { } } public void setCombatSelection(Coord p) { - LayeredWorldMap map = model.currentMap; + PredefinedMap map = model.currentMap; Monster m = map.getMonsterAt(p); if (m != null) { setCombatSelection(m, p); diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/Controller.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/Controller.java index 0f9799196..3f12c2025 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/Controller.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/Controller.java @@ -10,7 +10,7 @@ import com.gpl.rpg.AndorsTrail.context.WorldContext; import com.gpl.rpg.AndorsTrail.model.ModelContainer; import com.gpl.rpg.AndorsTrail.model.actor.Monster; import com.gpl.rpg.AndorsTrail.model.actor.Player; -import com.gpl.rpg.AndorsTrail.model.map.LayeredWorldMap; +import com.gpl.rpg.AndorsTrail.model.map.PredefinedMap; import com.gpl.rpg.AndorsTrail.model.map.MapObject; import com.gpl.rpg.AndorsTrail.util.Coord; import com.gpl.rpg.AndorsTrail.view.MainView; @@ -67,8 +67,8 @@ public final class Controller { player.addExperience(-lostExp); model.statistics.addPlayerDeath(lostExp); playerRested(world, null); - MovementController.respawnPlayer(world); final MainActivity act = view.mainActivity; + MovementController.respawnPlayer(act.getResources(), world); act.updateStatus(); act.mainview.notifyMapChanged(); act.message(act.getResources().getString(R.string.combat_hero_dies, lostExp)); @@ -84,7 +84,7 @@ public final class Controller { player.spawnPlace = area.id; player.spawnMap = world.model.currentMap.name; } - for (LayeredWorldMap m : world.maps.predefinedMaps) { + for (PredefinedMap m : world.maps.predefinedMaps) { if (m.visited) m.spawnAll(world); } } @@ -102,7 +102,7 @@ public final class Controller { } public void resetMaps() { - for (LayeredWorldMap m : world.maps.predefinedMaps) { + for (PredefinedMap m : world.maps.predefinedMaps) { if (m == model.currentMap) continue; m.resetIfNotRecentlyVisited(); } diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/MovementController.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/MovementController.java index a7b08d9eb..54c251ed9 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/MovementController.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/MovementController.java @@ -1,5 +1,7 @@ package com.gpl.rpg.AndorsTrail.controller; +import android.content.res.Resources; + import com.gpl.rpg.AndorsTrail.AndorsTrailPreferences; import com.gpl.rpg.AndorsTrail.context.ViewContext; import com.gpl.rpg.AndorsTrail.context.WorldContext; @@ -7,9 +9,10 @@ import com.gpl.rpg.AndorsTrail.model.ModelContainer; import com.gpl.rpg.AndorsTrail.model.actor.Monster; import com.gpl.rpg.AndorsTrail.model.actor.Player; import com.gpl.rpg.AndorsTrail.model.item.Loot; -import com.gpl.rpg.AndorsTrail.model.map.LayeredWorldMap; +import com.gpl.rpg.AndorsTrail.model.map.PredefinedMap; import com.gpl.rpg.AndorsTrail.model.map.MapObject; import com.gpl.rpg.AndorsTrail.model.map.MonsterSpawnArea; +import com.gpl.rpg.AndorsTrail.model.map.TMXMapReader; import com.gpl.rpg.AndorsTrail.util.Coord; import com.gpl.rpg.AndorsTrail.util.L; @@ -25,14 +28,14 @@ public final class MovementController { } public void placePlayerAt(int objectType, String mapName, String placeName, int offset_x, int offset_y) { - placePlayerAt(world, objectType, mapName, placeName, offset_x, offset_y); + placePlayerAt(view.mainActivity.getResources(), world, objectType, mapName, placeName, offset_x, offset_y); view.mainActivity.clearMessages(); view.mainActivity.mainview.notifyMapChanged(); } - public static void placePlayerAt(final WorldContext world, int objectType, String mapName, String placeName, int offset_x, int offset_y) { + public static void placePlayerAt(final Resources res, final WorldContext world, int objectType, String mapName, String placeName, int offset_x, int offset_y) { if (mapName == null || placeName == null) return; - LayeredWorldMap newMap = world.maps.findPredefinedMap(mapName); + PredefinedMap newMap = world.maps.findPredefinedMap(mapName); if (newMap == null) { L.log("Cannot find map " + mapName); return; @@ -46,6 +49,7 @@ public final class MovementController { if (model.currentMap != null) model.currentMap.updateLastVisitTime(); model.currentMap = newMap; + loadCurrentTileMap(res, world); model.player.position.set(place.position.topLeft); model.player.position.x += Math.min(offset_x, place.position.size.width-1); model.player.position.y += Math.min(offset_y, place.position.size.height-1); @@ -55,12 +59,12 @@ public final class MovementController { else playerVisitsMap(world, newMap); } - private static void playerVisitsMapFirstTime(final WorldContext world, LayeredWorldMap m) { + private static void playerVisitsMapFirstTime(final WorldContext world, PredefinedMap m) { m.spawnAll(world); m.createAllContainerLoot(); m.visited = true; } - private static void playerVisitsMap(final WorldContext world, LayeredWorldMap m) { + private static void playerVisitsMap(final WorldContext world, PredefinedMap m) { // Respawn everything if a certain time has elapsed. if (!m.isRecentlyVisited()) m.spawnAll(world); } @@ -148,7 +152,7 @@ public final class MovementController { public void moveToNextIfPossible(boolean handleEvents) { final Player player = model.player; - final LayeredWorldMap currentMap = model.currentMap; + final PredefinedMap currentMap = model.currentMap; final Coord newPosition = player.nextPosition; for (MapObject o : currentMap.eventObjects) { @@ -173,8 +177,8 @@ public final class MovementController { } } - public static void respawnPlayer(final WorldContext world) { - placePlayerAt(world, MapObject.MAPEVENT_REST, world.model.player.spawnMap, world.model.player.spawnPlace, 0, 0); + public static void respawnPlayer(final Resources res, final WorldContext world) { + placePlayerAt(res, world, MapObject.MAPEVENT_REST, world.model.player.spawnMap, world.model.player.spawnPlace, 0, 0); } public static void moveBlockedActors(final WorldContext world) { @@ -196,7 +200,7 @@ public final class MovementController { // If any monsters somehow spawned on an unwalkable tile, we move the monster to a new position on the spawnarea // This could happen if we change some tile to non-walkable in a future version. - for (LayeredWorldMap map : world.maps.predefinedMaps) { + for (PredefinedMap map : world.maps.predefinedMaps) { for (MonsterSpawnArea a : map.spawnAreas) { for (Monster m : a.monsters) { if (!world.model.currentMap.isWalkable(m.rectPosition)) { @@ -208,4 +212,8 @@ public final class MovementController { } } } + + public static void loadCurrentTileMap(Resources res, WorldContext world) { + world.model.currentTileMap = TMXMapReader.readLayeredTileMap(res, world.tileStore, world.model.currentMap); + } } diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/ModelContainer.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/ModelContainer.java index 4ce01b862..ef873d48b 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/ModelContainer.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/ModelContainer.java @@ -6,14 +6,16 @@ import java.io.IOException; import com.gpl.rpg.AndorsTrail.context.WorldContext; import com.gpl.rpg.AndorsTrail.model.actor.Player; -import com.gpl.rpg.AndorsTrail.model.map.LayeredWorldMap; +import com.gpl.rpg.AndorsTrail.model.map.LayeredTileMap; +import com.gpl.rpg.AndorsTrail.model.map.PredefinedMap; public final class ModelContainer { public final Player player; public final InterfaceData uiSelections; public final GameStatistics statistics; - public LayeredWorldMap currentMap; + public PredefinedMap currentMap; + public LayeredTileMap currentTileMap; public ModelContainer() { player = new Player(); @@ -31,6 +33,7 @@ public final class ModelContainer { this.uiSelections.selectedMonster = currentMap.getMonsterAt(uiSelections.selectedPosition); } this.statistics = new GameStatistics(src, world, fileversion); + this.currentTileMap = null; } public void writeToParcel(DataOutputStream dest, int flags) throws IOException { diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/ability/ActorConditionTypeCollection.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/ability/ActorConditionTypeCollection.java index 910f6ba5f..86de06a5e 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/ability/ActorConditionTypeCollection.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/ability/ActorConditionTypeCollection.java @@ -27,13 +27,13 @@ public class ActorConditionTypeCollection { public void initialize(DynamicTileLoader tileLoader) { CombatTraits t = new CombatTraits(); t.attackChance = 5; - conditionTypes.add(new ActorConditionType("bless", "Bless", tileLoader.getTileID("items_tiles", 13+22*14), false, null, null, new AbilityModifierTraits(0, 0, 0, t))); + conditionTypes.add(new ActorConditionType("bless", "Bless", tileLoader.prepareTileID("items_tiles", 13+22*14), false, null, null, new AbilityModifierTraits(0, 0, 0, t))); t = new CombatTraits(); t.damagePotential.set(2, 2); - conditionTypes.add(new ActorConditionType("str", "Strength", tileLoader.getTileID("items_tiles", 0+25*14), false, null, null, new AbilityModifierTraits(0, 0, 0, t))); + conditionTypes.add(new ActorConditionType("str", "Strength", tileLoader.prepareTileID("items_tiles", 0+25*14), false, null, null, new AbilityModifierTraits(0, 0, 0, t))); - conditionTypes.add(new ActorConditionType("regen", "Regeneration", tileLoader.getTileID("items_tiles", 7+22*14), false, new StatsModifierTraits(VisualEffectCollection.EFFECT_RESTORE_HP, new ConstRange(1, 1), null), null, null)); - conditionTypes.add(new ActorConditionType("poison", "Poison", tileLoader.getTileID("items_tiles", 4+24*14), true, new StatsModifierTraits(VisualEffectCollection.EFFECT_POISON, new ConstRange(-1, -1), null), null, null)); + conditionTypes.add(new ActorConditionType("regen", "Regeneration", tileLoader.prepareTileID("items_tiles", 7+22*14), false, new StatsModifierTraits(VisualEffectCollection.EFFECT_RESTORE_HP, new ConstRange(1, 1), null), null, null)); + conditionTypes.add(new ActorConditionType("poison", "Poison", tileLoader.prepareTileID("items_tiles", 4+24*14), true, new StatsModifierTraits(VisualEffectCollection.EFFECT_POISON, new ConstRange(-1, -1), null), null, null)); } } diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/actor/Player.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/actor/Player.java index fac6647e4..cfc0eecd7 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/actor/Player.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/actor/Player.java @@ -44,7 +44,7 @@ public final class Player extends Actor { this.inventory = new Inventory(); } - public void initializeNewPlayer_(ItemTypeCollection types, DropListCollection dropLists, String name) { + public void initializeNewPlayer(ItemTypeCollection types, DropListCollection dropLists, String name) { CombatTraits combat = new CombatTraits(); combat.attackCost = 3; combat.attackChance = 60; diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/map/LayeredTileMap.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/map/LayeredTileMap.java new file mode 100644 index 000000000..a96b75e48 --- /dev/null +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/map/LayeredTileMap.java @@ -0,0 +1,20 @@ +package com.gpl.rpg.AndorsTrail.model.map; + +import com.gpl.rpg.AndorsTrail.util.Size; + +public final class LayeredTileMap { + public static int LAYER_GROUND = 0; + public static int LAYER_OBJECTS = 1; + public static int LAYER_ABOVE = 2; + + public final Size size; + public final MapLayer[] layers; + + public LayeredTileMap(Size size, MapLayer[] layers) { + this.size = size; + assert(size.width > 0); + assert(size.height > 0); + assert(layers.length == 3); + this.layers = layers; + } +} diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/map/MapCollection.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/map/MapCollection.java index 2833b31ef..35d5682e9 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/map/MapCollection.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/map/MapCollection.java @@ -11,12 +11,12 @@ import com.gpl.rpg.AndorsTrail.context.WorldContext; import com.gpl.rpg.AndorsTrail.util.L; public final class MapCollection { - public final ArrayList predefinedMaps = new ArrayList(); + public final ArrayList predefinedMaps = new ArrayList(); public MapCollection() {} - public LayeredWorldMap findPredefinedMap(String name) { - for (LayeredWorldMap m : predefinedMaps) { + public PredefinedMap findPredefinedMap(String name) { + for (PredefinedMap m : predefinedMaps) { if (m.name.equals(name)) return m; } if (AndorsTrailApplication.DEVELOPMENT_VALIDATEDATA) { @@ -26,7 +26,7 @@ public final class MapCollection { } public void reset() { - for (LayeredWorldMap m : predefinedMaps) { + for (PredefinedMap m : predefinedMaps) { m.reset(); } } @@ -34,7 +34,7 @@ public final class MapCollection { // Selftest method. Not part of the game logic. public void verifyData(WorldContext world) { if (AndorsTrailApplication.DEVELOPMENT_VALIDATEDATA) { - for (LayeredWorldMap m : predefinedMaps) { + for (PredefinedMap m : predefinedMaps) { for (MapObject o : m.eventObjects) { if (o.type == MapObject.MAPEVENT_NEWMAP) { final String desc = "Map \"" + m.name + "\", place \"" + o.id + "\""; @@ -43,7 +43,7 @@ public final class MapCollection { } else if (o.place == null || o.place.length() <= 0) { L.log("OPTIMIZE: " + desc + " has no destination place."); } else { - LayeredWorldMap destination = findPredefinedMap(o.map); + PredefinedMap destination = findPredefinedMap(o.map); if (destination == null) { L.log("WARNING: " + desc + " references non-existing destination map \"" + o.map + "\"."); continue; @@ -110,7 +110,7 @@ public final class MapCollection { // Selftest method. Not part of the game logic. public void DEBUG_getRequiredQuestStages(HashSet requiredStages) { if (AndorsTrailApplication.DEVELOPMENT_VALIDATEDATA) { - for (LayeredWorldMap m : predefinedMaps) { + for (PredefinedMap m : predefinedMaps) { for (MapObject o : m.eventObjects) { if (o.type == MapObject.MAPEVENT_KEYAREA) { if (o.requireQuestProgress == null) continue; @@ -124,7 +124,7 @@ public final class MapCollection { // Selftest method. Not part of the game logic. public void DEBUG_getUsedPhrases(HashSet usedPhrases) { if (AndorsTrailApplication.DEVELOPMENT_VALIDATEDATA) { - for (LayeredWorldMap m : predefinedMaps) { + for (PredefinedMap m : predefinedMaps) { for (MapObject o : m.eventObjects) { if (o.type == MapObject.MAPEVENT_KEYAREA || o.type == MapObject.MAPEVENT_SIGN) { if (o.id == null || o.id.length() <= 0) continue; diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/map/LayeredWorldMap.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/map/PredefinedMap.java similarity index 94% rename from AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/map/LayeredWorldMap.java rename to AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/map/PredefinedMap.java index 3bc782fbd..b770d7656 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/map/LayeredWorldMap.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/map/PredefinedMap.java @@ -17,36 +17,31 @@ import com.gpl.rpg.AndorsTrail.util.CoordRect; import com.gpl.rpg.AndorsTrail.util.L; import com.gpl.rpg.AndorsTrail.util.Size; -public final class LayeredWorldMap { - public static int LAYER_GROUND = 0; - public static int LAYER_OBJECTS = 1; - public static int LAYER_ABOVE = 2; +public final class PredefinedMap { private static final long VISIT_RESET = 0; + public final int xmlResourceId; public final String name; public final Size size; - public final MapLayer[] layers; public final MapObject[] eventObjects; public final MonsterSpawnArea[] spawnAreas; public final ArrayList groundBags = new ArrayList(); - //public final boolean hasFOW; - //public final boolean[][] isVisible; - public final boolean[][] isWalkable; public boolean visited = false; public long lastVisitTime = VISIT_RESET; + + public final boolean[][] isWalkable; - public LayeredWorldMap(String name, Size size, MapLayer[] layers, boolean[][] isWalkable, MapObject[] eventObjects, MonsterSpawnArea[] spawnAreas, boolean hasFOW) { + public PredefinedMap(int xmlResourceId, String name, Size size, boolean[][] isWalkable, MapObject[] eventObjects, MonsterSpawnArea[] spawnAreas, boolean hasFOW) { + this.xmlResourceId = xmlResourceId; this.name = name; this.size = size; this.eventObjects = eventObjects; this.spawnAreas = spawnAreas; assert(size.width > 0); assert(size.height > 0); - assert(layers.length == 3); assert(isWalkable.length == size.width); assert(isWalkable[0].length == size.height); this.isWalkable = isWalkable; - this.layers = layers; } public final boolean isWalkable(final Coord p) { diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/map/TMXMapReader.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/map/TMXMapReader.java index 936acc6a6..841ae3336 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/map/TMXMapReader.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/map/TMXMapReader.java @@ -4,7 +4,6 @@ import java.io.ByteArrayInputStream; import java.io.IOException; import java.util.ArrayList; import java.util.Collection; -import java.util.List; import java.util.zip.GZIPInputStream; import java.util.zip.InflaterInputStream; @@ -17,6 +16,7 @@ import com.gpl.rpg.AndorsTrail.model.item.DropList; import com.gpl.rpg.AndorsTrail.model.item.DropListCollection; import com.gpl.rpg.AndorsTrail.model.quest.QuestProgress; import com.gpl.rpg.AndorsTrail.resource.DynamicTileLoader; +import com.gpl.rpg.AndorsTrail.resource.TileStore; import com.gpl.rpg.AndorsTrail.util.Base64; import com.gpl.rpg.AndorsTrail.util.Coord; import com.gpl.rpg.AndorsTrail.util.CoordRect; @@ -24,13 +24,18 @@ import com.gpl.rpg.AndorsTrail.util.L; import com.gpl.rpg.AndorsTrail.util.Range; import com.gpl.rpg.AndorsTrail.util.Size; +import android.content.res.Resources; import android.content.res.XmlResourceParser; public final class TMXMapReader { private ArrayList maps = new ArrayList(); - public TMXMap read(XmlResourceParser xrp, String name) { - final TMXMap currentMap = new TMXMap(); + public void read(Resources r, int xmlResourceId, String name) { + read(r.getXml(xmlResourceId), xmlResourceId, name); + } + private TMXMap read(XmlResourceParser xrp, int xmlResourceId, String name) { + final TMXMap map = new TMXMap(); + map.xmlResourceId = xmlResourceId; try { // Map format: http://sourceforge.net/apps/mediawiki/tiled/index.php?title=Examining_the_map_format int eventType; @@ -38,106 +43,20 @@ public final class TMXMapReader { if (eventType == XmlResourceParser.START_TAG) { String s = xrp.getName(); if (s.equals("map")) { - currentMap.name = name; - currentMap.orientation = xrp.getAttributeValue(null, "orientation"); - currentMap.width = xrp.getAttributeIntValue(null, "width", -1); - currentMap.height = xrp.getAttributeIntValue(null, "height", -1); - currentMap.tilewidth = xrp.getAttributeIntValue(null, "tilewidth", -1); - currentMap.tileheight = xrp.getAttributeIntValue(null, "tileheight", -1); + map.name = name; + map.orientation = xrp.getAttributeValue(null, "orientation"); + map.width = xrp.getAttributeIntValue(null, "width", -1); + map.height = xrp.getAttributeIntValue(null, "height", -1); + map.tilewidth = xrp.getAttributeIntValue(null, "tilewidth", -1); + map.tileheight = xrp.getAttributeIntValue(null, "tileheight", -1); readCurrentTagUntilEnd(xrp, new TagHandler() { public void handleTag(XmlResourceParser xrp, String tagName) throws XmlPullParserException, IOException { if (tagName.equals("tileset")) { - final TMXTileSet ts = new TMXTileSet(); - currentMap.tileSets.add(ts); - ts.firstgid = xrp.getAttributeIntValue(null, "firstgid", 1); - ts.name = xrp.getAttributeValue(null, "name"); - ts.tilewidth = xrp.getAttributeIntValue(null, "tilewidth", -1); - ts.tileheight = xrp.getAttributeIntValue(null, "tileheight", -1); - readCurrentTagUntilEnd(xrp, new TagHandler() { - public void handleTag(XmlResourceParser xrp, String tagName) { - if (tagName.equals("image")) { - ts.imageSource = xrp.getAttributeValue(null, "source"); - ts.imageName = ts.imageSource; - - int v = ts.imageName.lastIndexOf('/'); - if (v >= 0) ts.imageName = ts.imageName.substring(v+1); - } - } - }); - } else if (tagName.equals("layer")) { - final TMXLayer layer = new TMXLayer(); - currentMap.layers.add(layer); - layer.name = xrp.getAttributeValue(null, "name"); - layer.width = xrp.getAttributeIntValue(null, "width", 1); - layer.height = xrp.getAttributeIntValue(null, "height", 1); - layer.gids = new int[layer.width][layer.height]; - readCurrentTagUntilEnd(xrp, new TagHandler() { - public void handleTag(XmlResourceParser xrp, String tagName) throws XmlPullParserException, IOException { - if (tagName.equals("data")) { - String compressionMethod = xrp.getAttributeValue(null, "compression"); - xrp.next(); - String data = xrp.getText().trim(); - final int len = layer.width * layer.height * 4; - - ByteArrayInputStream bi = new ByteArrayInputStream(Base64.decode(data)); - if (compressionMethod == null) compressionMethod = "none"; - - InflaterInputStream zi; - if (compressionMethod.equalsIgnoreCase("zlib")) { - zi = new InflaterInputStream(bi); - } else if (compressionMethod.equalsIgnoreCase("gzip")) { - zi = new GZIPInputStream(bi, len); - } else { - throw new IOException("Unhandled compression method \"" + compressionMethod + "\" for map layer " + layer.name); - } - - byte[] buffer = new byte[len]; - copyStreamToBuffer(zi, buffer, len); - - zi.close(); - bi.close(); - int i = 0; - for(int y = 0; y < layer.height; ++y) { - for(int x = 0; x < layer.width; ++x, i += 4) { - int gid = readIntLittleEndian(buffer, i); - //if (gid != 0) L.log(getHexString(buffer, i) + " -> " + gid); - layer.gids[x][y] = gid; - //L.log("(" + x + "," + y + ") : " + layer.gids[x][y]); - } - } - } - } - }); + map.tileSets.add(readTMXTileSet(xrp)); } else if (tagName.equals("objectgroup")) { - final TMXObjectGroup group = new TMXObjectGroup(); - currentMap.objectGroups.add(group); - group.name = xrp.getAttributeValue(null, "name"); - group.width = xrp.getAttributeIntValue(null, "width", 1); - group.height = xrp.getAttributeIntValue(null, "height", 1); - readCurrentTagUntilEnd(xrp, new TagHandler() { - public void handleTag(XmlResourceParser xrp, String tagName) throws XmlPullParserException, IOException { - if (tagName.equals("object")) { - final TMXObject object = new TMXObject(); - group.objects.add(object); - object.name = xrp.getAttributeValue(null, "name"); - object.type = xrp.getAttributeValue(null, "type"); - object.x = xrp.getAttributeIntValue(null, "x", -1); - object.y = xrp.getAttributeIntValue(null, "y", -1); - object.width = xrp.getAttributeIntValue(null, "width", -1); - object.height = xrp.getAttributeIntValue(null, "height", -1); - readCurrentTagUntilEnd(xrp, new TagHandler() { - public void handleTag(XmlResourceParser xrp, String tagName) { - if (tagName.equals("property")) { - final TMXProperty property = new TMXProperty(); - object.properties.add(property); - property.name = xrp.getAttributeValue(null, "name"); - property.value = xrp.getAttributeValue(null, "value"); - } - } - }); - } - } - }); + map.objectGroups.add(readTMXObjectGroup(xrp)); + } else if (tagName.equals("layer")) { + map.layers.add(readTMXMapLayer(xrp)); } } }); @@ -150,8 +69,145 @@ public final class TMXMapReader { } catch (IOException e) { L.log("Error reading map \"" + name + "\": IOException : " + e.toString()); } - maps.add(currentMap); - return currentMap; + maps.add(map); + return map; + } + + + private static void readLayerMap(XmlResourceParser xrp, final String name, final TMXLayerMap map) { + try { + int eventType; + while ((eventType = xrp.next()) != XmlResourceParser.END_DOCUMENT) { + if (eventType == XmlResourceParser.START_TAG) { + String s = xrp.getName(); + if (s.equals("map")) { + map.width = xrp.getAttributeIntValue(null, "width", -1); + map.height = xrp.getAttributeIntValue(null, "height", -1); + readCurrentTagUntilEnd(xrp, new TagHandler() { + public void handleTag(XmlResourceParser xrp, String tagName) throws XmlPullParserException, IOException { + if (tagName.equals("tileset")) { + map.tileSets.add(readTMXTileSet(xrp)); + } else if (tagName.equals("layer")) { + map.layers.add(readTMXMapLayer(xrp)); + } + } + }); + } + } + } + xrp.close(); + } catch (XmlPullParserException e) { + L.log("Error reading layered map \"" + name + "\": XmlPullParserException : " + e.toString()); + } catch (IOException e) { + L.log("Error reading layered map \"" + name + "\": IOException : " + e.toString()); + } + } + + + private static TMXTileSet readTMXTileSet(XmlResourceParser xrp) throws XmlPullParserException, IOException { + final TMXTileSet ts = new TMXTileSet(); + ts.firstgid = xrp.getAttributeIntValue(null, "firstgid", 1); + ts.name = xrp.getAttributeValue(null, "name"); + ts.tilewidth = xrp.getAttributeIntValue(null, "tilewidth", -1); + ts.tileheight = xrp.getAttributeIntValue(null, "tileheight", -1); + readCurrentTagUntilEnd(xrp, new TagHandler() { + public void handleTag(XmlResourceParser xrp, String tagName) { + if (tagName.equals("image")) { + ts.imageSource = xrp.getAttributeValue(null, "source"); + ts.imageName = ts.imageSource; + + int v = ts.imageName.lastIndexOf('/'); + if (v >= 0) ts.imageName = ts.imageName.substring(v+1); + } + } + }); + return ts; + } + + private static TMXObjectGroup readTMXObjectGroup(XmlResourceParser xrp) throws XmlPullParserException, IOException { + final TMXObjectGroup group = new TMXObjectGroup(); + group.name = xrp.getAttributeValue(null, "name"); + group.width = xrp.getAttributeIntValue(null, "width", 1); + group.height = xrp.getAttributeIntValue(null, "height", 1); + readCurrentTagUntilEnd(xrp, new TagHandler() { + public void handleTag(XmlResourceParser xrp, String tagName) throws XmlPullParserException, IOException { + if (tagName.equals("object")) { + group.objects.add(readTMXObject(xrp)); + } + } + }); + return group; + } + + private static TMXObject readTMXObject(XmlResourceParser xrp) throws XmlPullParserException, IOException { + final TMXObject object = new TMXObject(); + object.name = xrp.getAttributeValue(null, "name"); + object.type = xrp.getAttributeValue(null, "type"); + object.x = xrp.getAttributeIntValue(null, "x", -1); + object.y = xrp.getAttributeIntValue(null, "y", -1); + object.width = xrp.getAttributeIntValue(null, "width", -1); + object.height = xrp.getAttributeIntValue(null, "height", -1); + readCurrentTagUntilEnd(xrp, new TagHandler() { + public void handleTag(XmlResourceParser xrp, String tagName) { + if (tagName.equals("property")) { + final TMXProperty property = new TMXProperty(); + object.properties.add(property); + property.name = xrp.getAttributeValue(null, "name"); + property.value = xrp.getAttributeValue(null, "value"); + } + } + }); + return object; + } + + private static TMXLayer readTMXMapLayer(XmlResourceParser xrp) throws XmlPullParserException, IOException { + final TMXLayer layer = new TMXLayer(); + layer.name = xrp.getAttributeValue(null, "name"); + layer.width = xrp.getAttributeIntValue(null, "width", 1); + layer.height = xrp.getAttributeIntValue(null, "height", 1); + layer.gids = new int[layer.width][layer.height]; + readCurrentTagUntilEnd(xrp, new TagHandler() { + public void handleTag(XmlResourceParser xrp, String tagName) throws XmlPullParserException, IOException { + if (tagName.equals("data")) { + readTMXMapLayerData(xrp, layer); + } + } + }); + return layer; + } + + private static void readTMXMapLayerData(XmlResourceParser xrp, final TMXLayer layer) throws XmlPullParserException, IOException { + String compressionMethod = xrp.getAttributeValue(null, "compression"); + xrp.next(); + String data = xrp.getText().trim(); + final int len = layer.width * layer.height * 4; + + ByteArrayInputStream bi = new ByteArrayInputStream(Base64.decode(data)); + if (compressionMethod == null) compressionMethod = "none"; + + InflaterInputStream zi; + if (compressionMethod.equalsIgnoreCase("zlib")) { + zi = new InflaterInputStream(bi); + } else if (compressionMethod.equalsIgnoreCase("gzip")) { + zi = new GZIPInputStream(bi, len); + } else { + throw new IOException("Unhandled compression method \"" + compressionMethod + "\" for map layer " + layer.name); + } + + byte[] buffer = new byte[len]; + copyStreamToBuffer(zi, buffer, len); + + zi.close(); + bi.close(); + int i = 0; + for(int y = 0; y < layer.height; ++y) { + for(int x = 0; x < layer.width; ++x, i += 4) { + int gid = readIntLittleEndian(buffer, i); + //if (gid != 0) L.log(getHexString(buffer, i) + " -> " + gid); + layer.gids[x][y] = gid; + //L.log("(" + x + "," + y + ") : " + layer.gids[x][y]); + } + } } private static void copyStreamToBuffer(InflaterInputStream zi, byte[] buffer, int len) throws IOException { @@ -202,11 +258,11 @@ public final class TMXMapReader { (buffer[offset + 3] << 24) & 0xff000000; } - public ArrayList transformMaps(DynamicTileLoader tileLoader, MonsterTypeCollection monsterTypes, DropListCollection dropLists) { + public ArrayList transformMaps(DynamicTileLoader tileLoader, MonsterTypeCollection monsterTypes, DropListCollection dropLists) { return transformMaps(maps, tileLoader, monsterTypes, dropLists); } - public ArrayList transformMaps(Collection maps, DynamicTileLoader tileLoader, MonsterTypeCollection monsterTypes, DropListCollection dropLists) { - ArrayList result = new ArrayList(); + public ArrayList transformMaps(Collection maps, DynamicTileLoader tileLoader, MonsterTypeCollection monsterTypes, DropListCollection dropLists) { + ArrayList result = new ArrayList(); for (TMXMap m : maps) { assert(m.name != null); @@ -221,36 +277,18 @@ public final class TMXMapReader { } } final Size mapSize = new Size(m.width, m.height); - MapLayer[] layers = new MapLayer[] { - new MapLayer(mapSize) - ,new MapLayer(mapSize) - ,new MapLayer(mapSize) - }; for (TMXLayer layer : m.layers) { - int ixMapLayer = -2; String layerName = layer.name; assert(layerName != null); assert(layerName.length() > 0); layerName = layerName.toLowerCase(); - if (layerName.startsWith("object")) { - ixMapLayer = LayeredWorldMap.LAYER_OBJECTS; - } else if (layerName.startsWith("ground")) { - ixMapLayer = LayeredWorldMap.LAYER_GROUND; - } else if (layerName.startsWith("above")) { - ixMapLayer = LayeredWorldMap.LAYER_ABOVE; - } else if (layerName.startsWith("walk")) { - ixMapLayer = -1; - } else if (AndorsTrailApplication.DEVELOPMENT_VALIDATEDATA) { - L.log("OPTIMIZE: cannot handle layer " + layerName + " from map " + m.name); - continue; - } for (int y = 0; y < layer.height; ++y) { for (int x = 0; x < layer.width; ++x) { int gid = layer.gids[x][y]; if (gid <= 0) continue; - if (ixMapLayer == -1) { + if (layerName.startsWith("walk")) { isWalkable[x][y] = false; } else { Pair p = getTile(m, gid); @@ -258,7 +296,7 @@ public final class TMXMapReader { String tilesetName = (String) p.first; int localId = (Integer) p.second; - layers[ixMapLayer].tiles[x][y] = tileLoader.getTileID(tilesetName, localId); + tileLoader.prepareTileID(tilesetName, localId); } } } @@ -370,13 +408,60 @@ public final class TMXMapReader { MonsterSpawnArea[] _spawnAreas = new MonsterSpawnArea[spawnAreas.size()]; _spawnAreas = spawnAreas.toArray(_spawnAreas); - result.add(new LayeredWorldMap(m.name, mapSize, layers, isWalkable, _eventObjects, _spawnAreas, false)); + result.add(new PredefinedMap(m.xmlResourceId, m.name, mapSize, isWalkable, _eventObjects, _spawnAreas, false)); } return result; } - private static Pair getTile(final TMXMap map, final int gid) { + + private static LayeredTileMap transformMap(TMXLayerMap map, TileStore tileStore) { + final Size mapSize = new Size(map.width, map.height); + final MapLayer[] layers = new MapLayer[] { + new MapLayer(mapSize) + ,new MapLayer(mapSize) + ,new MapLayer(mapSize) + }; + for (TMXLayer layer : map.layers) { + int ixMapLayer = -2; + String layerName = layer.name; + assert(layerName != null); + assert(layerName.length() > 0); + layerName = layerName.toLowerCase(); + if (layerName.startsWith("object")) { + ixMapLayer = LayeredTileMap.LAYER_OBJECTS; + } else if (layerName.startsWith("ground")) { + ixMapLayer = LayeredTileMap.LAYER_GROUND; + } else if (layerName.startsWith("above")) { + ixMapLayer = LayeredTileMap.LAYER_ABOVE; + } else { + continue; + } + + for (int y = 0; y < layer.height; ++y) { + for (int x = 0; x < layer.width; ++x) { + int gid = layer.gids[x][y]; + if (gid <= 0) continue; + + Pair p = getTile(map, gid); + if (p == null) continue; + + String tilesetName = (String) p.first; + int localId = (Integer) p.second; + layers[ixMapLayer].tiles[x][y] = tileStore.getTileID(tilesetName, localId); + } + } + } + return new LayeredTileMap(mapSize, layers); + } + + public static LayeredTileMap readLayeredTileMap(Resources res, TileStore tileStore, PredefinedMap map) { + TMXLayerMap result = new TMXLayerMap(); + readLayerMap(res.getXml(map.xmlResourceId), map.name, result); + return transformMap(result, tileStore); + } + + private static Pair getTile(final TMXLayerMap map, final int gid) { for(int i = map.tileSets.size() - 1; i >= 0; --i) { TMXTileSet ts = map.tileSets.get(i); if (ts.firstgid <= gid) { @@ -387,7 +472,7 @@ public final class TMXMapReader { return null; } - private static class Pair { + private static final class Pair { public final T1 first; public final T2 second; public Pair(T1 first, T2 second) { @@ -396,18 +481,21 @@ public final class TMXMapReader { } } - public class TMXMap { + public static final class TMXMap extends TMXLayerMap { + public int xmlResourceId; public String name; public String orientation; - public int width; - public int height; public int tilewidth; public int tileheight; - public List tileSets = new ArrayList(); - public List layers = new ArrayList(); - public List objectGroups = new ArrayList(); + public ArrayList objectGroups = new ArrayList(); } - public class TMXTileSet { + public static class TMXLayerMap { + public int width; + public int height; + public ArrayList tileSets = new ArrayList(); + public ArrayList layers = new ArrayList(); + } + public static final class TMXTileSet { public int firstgid; public String name; public int tilewidth; @@ -415,28 +503,28 @@ public final class TMXMapReader { public String imageSource; public String imageName; } - public class TMXLayer { + public static final class TMXLayer { public String name; public int width; public int height; public int[][] gids; } - public class TMXObjectGroup { + public static final class TMXObjectGroup { public String name; public int width; public int height; - public List objects = new ArrayList(); + public ArrayList objects = new ArrayList(); } - public class TMXObject { + public static final class TMXObject { public String name; public String type; public int x; public int y; public int width; public int height; - public List properties = new ArrayList(); + public ArrayList properties = new ArrayList(); } - public class TMXProperty { + public static final class TMXProperty { public String name; public String value; } diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/DynamicTileLoader.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/DynamicTileLoader.java index 405f571dc..34844b1f9 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/DynamicTileLoader.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/DynamicTileLoader.java @@ -49,7 +49,7 @@ public final class DynamicTileLoader { return null; } - public int getTileID(int tilesetImageResourceID, int localId) { + public int prepareTileID(int tilesetImageResourceID, int localId) { TilesetBitmap b = getTilesetBitmap(tilesetImageResourceID); if (b == null) { if (AndorsTrailApplication.DEVELOPMENT_VALIDATEDATA) { @@ -57,13 +57,13 @@ public final class DynamicTileLoader { } return currentTileStoreIndex-1; } - return getTileID(b, localId); + return prepareTileID(b, localId); } - public int getTileID(String tilesetName, int localId) { + public int prepareTileID(String tilesetName, int localId) { for (TilesetBitmap b : preparedTilesets) { if (b.tilesetName.equals(tilesetName)) { - return getTileID(b, localId); + return prepareTileID(b, localId); } } if (AndorsTrailApplication.DEVELOPMENT_VALIDATEDATA) { @@ -83,7 +83,7 @@ public final class DynamicTileLoader { return new Size(1, 1); } - private int getTileID(TilesetBitmap tileset, int localId) { + private int prepareTileID(TilesetBitmap tileset, int localId) { int tileStoreIndex = 0; if (tileset.tilesToLoad.containsKey(localId)) { tileStoreIndex = tileset.tilesToLoad.get(localId); @@ -120,8 +120,10 @@ public final class DynamicTileLoader { Bitmap tilesetImage = createTilesetImage(b); for (int localId : b.tilesToLoad.keySet()) { int tileStoreIndex = b.tilesToLoad.get(localId); - store.bitmaps[tileStoreIndex] = createTileFromTileset(tilesetImage, b, localId); - if (store.bitmaps[tileStoreIndex] == tilesetImage) recycle = false; + Bitmap tile = createTileFromTileset(tilesetImage, b, localId); + if (tile == tilesetImage) recycle = false; + + store.setBitmap(tileStoreIndex, tile, b.tilesetName, localId); } if (recycle) tilesetImage.recycle(); } diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/ResourceLoader.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/ResourceLoader.java index 16cfc78cd..a8eb442dd 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/ResourceLoader.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/ResourceLoader.java @@ -39,10 +39,10 @@ public final class ResourceLoader { loader.prepareTileset(R.drawable.char_hero, "char_hero", src_sz1x1, defaultTileSize); loader.prepareTileset(R.drawable.map_tiles_1_2, "map_tiles_1_2", src_mapTileSize, defaultTileSize); loader.prepareTileset(R.drawable.map_tiles_2_7, "map_tiles_2_7", src_mapTileSize, defaultTileSize); - /*tiles.iconID_CHAR_HERO = */loader.getTileID(R.drawable.char_hero, 0); - /*tiles.iconID_attackselect = */loader.getTileID(R.drawable.map_tiles_1_2, 6+16*5); - /*tiles.iconID_moveselect = */loader.getTileID(R.drawable.map_tiles_1_2, 7+16*5); - /*tiles.iconID_groundbag = */loader.getTileID(R.drawable.map_tiles_2_7, 13+16*0); + /*tiles.iconID_CHAR_HERO = */loader.prepareTileID(R.drawable.char_hero, 0); + /*tiles.iconID_attackselect = */loader.prepareTileID(R.drawable.map_tiles_1_2, 6+16*5); + /*tiles.iconID_moveselect = */loader.prepareTileID(R.drawable.map_tiles_1_2, 7+16*5); + /*tiles.iconID_groundbag = */loader.prepareTileID(R.drawable.map_tiles_2_7, 13+16*0); loader.flush(); @@ -245,193 +245,193 @@ public final class ResourceLoader { TMXMapReader mapReader = new TMXMapReader(); if (AndorsTrailApplication.DEVELOPMENT_DEBUGRESOURCES) { - mapReader.read(r.getXml(R.xml.debugmap), "debugmap"); + mapReader.read(r, R.xml.debugmap, "debugmap"); } else { - mapReader.read(r.getXml(R.xml.home), "home"); - mapReader.read(r.getXml(R.xml.crossglen), "crossglen"); - mapReader.read(r.getXml(R.xml.crossglen_farmhouse), "crossglen_farmhouse"); - mapReader.read(r.getXml(R.xml.crossglen_farmhouse_basement), "crossglen_farmhouse_basement"); - mapReader.read(r.getXml(R.xml.crossglen_hall), "crossglen_hall"); - mapReader.read(r.getXml(R.xml.crossglen_smith), "crossglen_smith"); - mapReader.read(r.getXml(R.xml.crossglen_cave), "crossglen_cave"); - mapReader.read(r.getXml(R.xml.wild1), "wild1"); - mapReader.read(r.getXml(R.xml.wild2), "wild2"); - mapReader.read(r.getXml(R.xml.wild3), "wild3"); - mapReader.read(r.getXml(R.xml.jan_pitcave1), "jan_pitcave1"); - mapReader.read(r.getXml(R.xml.jan_pitcave2), "jan_pitcave2"); - mapReader.read(r.getXml(R.xml.jan_pitcave3), "jan_pitcave3"); - mapReader.read(r.getXml(R.xml.fallhaven_nw), "fallhaven_nw"); - mapReader.read(r.getXml(R.xml.snakecave1), "snakecave1"); - mapReader.read(r.getXml(R.xml.snakecave2), "snakecave2"); - mapReader.read(r.getXml(R.xml.snakecave3), "snakecave3"); - mapReader.read(r.getXml(R.xml.wild4), "wild4"); - mapReader.read(r.getXml(R.xml.hauntedhouse1), "hauntedhouse1"); - mapReader.read(r.getXml(R.xml.hauntedhouse2), "hauntedhouse2"); - mapReader.read(r.getXml(R.xml.fallhaven_ne), "fallhaven_ne"); - mapReader.read(r.getXml(R.xml.fallhaven_church), "fallhaven_church"); - mapReader.read(r.getXml(R.xml.fallhaven_barn), "fallhaven_barn"); - mapReader.read(r.getXml(R.xml.fallhaven_potions), "fallhaven_potions"); - mapReader.read(r.getXml(R.xml.fallhaven_gravedigger), "fallhaven_gravedigger"); - mapReader.read(r.getXml(R.xml.fallhaven_clothes), "fallhaven_clothes"); - mapReader.read(r.getXml(R.xml.fallhaven_arcir), "fallhaven_arcir"); - mapReader.read(r.getXml(R.xml.fallhaven_arcir_basement), "fallhaven_arcir_basement"); - mapReader.read(r.getXml(R.xml.fallhaven_athamyr), "fallhaven_athamyr"); - mapReader.read(r.getXml(R.xml.fallhaven_rigmor), "fallhaven_rigmor"); - mapReader.read(r.getXml(R.xml.fallhaven_tavern), "fallhaven_tavern"); - mapReader.read(r.getXml(R.xml.fallhaven_prison), "fallhaven_prison"); - mapReader.read(r.getXml(R.xml.fallhaven_derelict), "fallhaven_derelict"); - mapReader.read(r.getXml(R.xml.fallhaven_nocmar), "fallhaven_nocmar"); - mapReader.read(r.getXml(R.xml.catacombs1), "catacombs1"); - mapReader.read(r.getXml(R.xml.catacombs2), "catacombs2"); - mapReader.read(r.getXml(R.xml.catacombs3), "catacombs3"); - mapReader.read(r.getXml(R.xml.catacombs4), "catacombs4"); - mapReader.read(r.getXml(R.xml.hauntedhouse3), "hauntedhouse3"); - mapReader.read(r.getXml(R.xml.hauntedhouse4), "hauntedhouse4"); - mapReader.read(r.getXml(R.xml.fallhaven_sw), "fallhaven_sw"); - mapReader.read(r.getXml(R.xml.wild5), "wild5"); - mapReader.read(r.getXml(R.xml.wild6), "wild6"); - mapReader.read(r.getXml(R.xml.wild6_house), "wild6_house"); - mapReader.read(r.getXml(R.xml.wild7), "wild7"); - mapReader.read(r.getXml(R.xml.wild8), "wild8"); - mapReader.read(r.getXml(R.xml.wild9), "wild9"); - mapReader.read(r.getXml(R.xml.wild10), "wild10"); - mapReader.read(r.getXml(R.xml.flagstone0), "flagstone0"); - mapReader.read(r.getXml(R.xml.flagstone_inner), "flagstone_inner"); - mapReader.read(r.getXml(R.xml.flagstone_upper), "flagstone_upper"); - mapReader.read(r.getXml(R.xml.flagstone1), "flagstone1"); - mapReader.read(r.getXml(R.xml.flagstone2), "flagstone2"); - mapReader.read(r.getXml(R.xml.flagstone3), "flagstone3"); - mapReader.read(r.getXml(R.xml.flagstone4), "flagstone4"); - mapReader.read(r.getXml(R.xml.wild11), "wild11"); - mapReader.read(r.getXml(R.xml.wild12), "wild12"); - mapReader.read(r.getXml(R.xml.wild11_clearing), "wild11_clearing"); - mapReader.read(r.getXml(R.xml.clearing_level1), "clearing_level1"); - mapReader.read(r.getXml(R.xml.clearing_level2), "clearing_level2"); - mapReader.read(r.getXml(R.xml.fallhaven_se), "fallhaven_se"); - mapReader.read(r.getXml(R.xml.fallhaven_lumberjack), "fallhaven_lumberjack"); - mapReader.read(r.getXml(R.xml.fallhaven_alaun), "fallhaven_alaun"); - mapReader.read(r.getXml(R.xml.fallhaven_storage), "fallhaven_storage"); - mapReader.read(r.getXml(R.xml.fallhaven_farmer), "fallhaven_farmer"); - mapReader.read(r.getXml(R.xml.wild13), "wild13"); - mapReader.read(r.getXml(R.xml.wild14), "wild14"); - mapReader.read(r.getXml(R.xml.wild14_cave), "wild14_cave"); - mapReader.read(r.getXml(R.xml.wild14_clearing), "wild14_clearing"); - mapReader.read(r.getXml(R.xml.wild15), "wild15"); - mapReader.read(r.getXml(R.xml.wild15_house), "wild15_house"); - mapReader.read(r.getXml(R.xml.road1), "road1"); - mapReader.read(r.getXml(R.xml.foaming_flask), "foaming_flask"); - mapReader.read(r.getXml(R.xml.fallhaven_derelict2), "fallhaven_derelict2"); - mapReader.read(r.getXml(R.xml.vilegard_n), "vilegard_n"); - mapReader.read(r.getXml(R.xml.vilegard_s), "vilegard_s"); - mapReader.read(r.getXml(R.xml.vilegard_sw), "vilegard_sw"); - mapReader.read(r.getXml(R.xml.vilegard_ogam), "vilegard_ogam"); - mapReader.read(r.getXml(R.xml.vilegard_chapel), "vilegard_chapel"); - mapReader.read(r.getXml(R.xml.vilegard_tavern), "vilegard_tavern"); - mapReader.read(r.getXml(R.xml.vilegard_armorer), "vilegard_armorer"); - mapReader.read(r.getXml(R.xml.vilegard_smith), "vilegard_smith"); - mapReader.read(r.getXml(R.xml.vilegard_wrye), "vilegard_wrye"); - mapReader.read(r.getXml(R.xml.vilegard_kaori), "vilegard_kaori"); - mapReader.read(r.getXml(R.xml.vilegard_erttu), "vilegard_erttu"); - mapReader.read(r.getXml(R.xml.road2), "road2"); - mapReader.read(r.getXml(R.xml.road3), "road3"); - mapReader.read(r.getXml(R.xml.road4), "road4"); - mapReader.read(r.getXml(R.xml.road4_gargoylecave), "road4_gargoylecave"); - mapReader.read(r.getXml(R.xml.road5), "road5"); - mapReader.read(r.getXml(R.xml.road5_house), "road5_house"); - mapReader.read(r.getXml(R.xml.gargoylecave1), "gargoylecave1"); - mapReader.read(r.getXml(R.xml.gargoylecave2), "gargoylecave2"); - mapReader.read(r.getXml(R.xml.gargoylecave3), "gargoylecave3"); - mapReader.read(r.getXml(R.xml.gargoylecave4), "gargoylecave4"); - mapReader.read(r.getXml(R.xml.blackwater_mountain0), "blackwater_mountain0"); - mapReader.read(r.getXml(R.xml.blackwater_mountain1), "blackwater_mountain1"); - mapReader.read(r.getXml(R.xml.blackwater_mountain2), "blackwater_mountain2"); - mapReader.read(r.getXml(R.xml.blackwater_mountain3), "blackwater_mountain3"); - mapReader.read(r.getXml(R.xml.blackwater_mountain4), "blackwater_mountain4"); - mapReader.read(r.getXml(R.xml.blackwater_mountain5), "blackwater_mountain5"); - mapReader.read(r.getXml(R.xml.blackwater_mountain6), "blackwater_mountain6"); - mapReader.read(r.getXml(R.xml.blackwater_mountain7), "blackwater_mountain7"); - mapReader.read(r.getXml(R.xml.blackwater_mountain8), "blackwater_mountain8"); - mapReader.read(r.getXml(R.xml.blackwater_mountain9), "blackwater_mountain9"); - mapReader.read(r.getXml(R.xml.blackwater_mountain10), "blackwater_mountain10"); - mapReader.read(r.getXml(R.xml.blackwater_mountain11), "blackwater_mountain11"); - mapReader.read(r.getXml(R.xml.blackwater_mountain12), "blackwater_mountain12"); - mapReader.read(r.getXml(R.xml.blackwater_mountain13), "blackwater_mountain13"); - mapReader.read(r.getXml(R.xml.blackwater_mountain14), "blackwater_mountain14"); - mapReader.read(r.getXml(R.xml.blackwater_mountain15), "blackwater_mountain15"); - mapReader.read(r.getXml(R.xml.blackwater_mountain16), "blackwater_mountain16"); - mapReader.read(r.getXml(R.xml.blackwater_mountain17), "blackwater_mountain17"); - mapReader.read(r.getXml(R.xml.blackwater_mountain18), "blackwater_mountain18"); - mapReader.read(r.getXml(R.xml.blackwater_mountain19), "blackwater_mountain19"); - mapReader.read(r.getXml(R.xml.blackwater_mountain20), "blackwater_mountain20"); - mapReader.read(r.getXml(R.xml.blackwater_mountain21), "blackwater_mountain21"); - mapReader.read(r.getXml(R.xml.blackwater_mountain22), "blackwater_mountain22"); - mapReader.read(r.getXml(R.xml.blackwater_mountain23), "blackwater_mountain23"); - mapReader.read(r.getXml(R.xml.blackwater_mountain24), "blackwater_mountain24"); - mapReader.read(r.getXml(R.xml.blackwater_mountain25), "blackwater_mountain25"); - mapReader.read(r.getXml(R.xml.blackwater_mountain26), "blackwater_mountain26"); - mapReader.read(r.getXml(R.xml.blackwater_mountain27), "blackwater_mountain27"); - mapReader.read(r.getXml(R.xml.blackwater_mountain28), "blackwater_mountain28"); - mapReader.read(r.getXml(R.xml.blackwater_mountain29), "blackwater_mountain29"); - mapReader.read(r.getXml(R.xml.blackwater_mountain30), "blackwater_mountain30"); - mapReader.read(r.getXml(R.xml.blackwater_mountain31), "blackwater_mountain31"); - mapReader.read(r.getXml(R.xml.blackwater_mountain32), "blackwater_mountain32"); - mapReader.read(r.getXml(R.xml.blackwater_mountain33), "blackwater_mountain33"); - mapReader.read(r.getXml(R.xml.blackwater_mountain34), "blackwater_mountain34"); - mapReader.read(r.getXml(R.xml.blackwater_mountain35), "blackwater_mountain35"); - mapReader.read(r.getXml(R.xml.blackwater_mountain36), "blackwater_mountain36"); - mapReader.read(r.getXml(R.xml.blackwater_mountain37), "blackwater_mountain37"); - mapReader.read(r.getXml(R.xml.blackwater_mountain38), "blackwater_mountain38"); - mapReader.read(r.getXml(R.xml.blackwater_mountain39), "blackwater_mountain39"); - mapReader.read(r.getXml(R.xml.blackwater_mountain40), "blackwater_mountain40"); - mapReader.read(r.getXml(R.xml.blackwater_mountain41), "blackwater_mountain41"); - mapReader.read(r.getXml(R.xml.blackwater_mountain42), "blackwater_mountain42"); - mapReader.read(r.getXml(R.xml.blackwater_mountain43), "blackwater_mountain43"); - mapReader.read(r.getXml(R.xml.blackwater_mountain44), "blackwater_mountain44"); - mapReader.read(r.getXml(R.xml.blackwater_mountain45), "blackwater_mountain45"); - mapReader.read(r.getXml(R.xml.blackwater_mountain46), "blackwater_mountain46"); - mapReader.read(r.getXml(R.xml.blackwater_mountain47), "blackwater_mountain47"); - mapReader.read(r.getXml(R.xml.blackwater_mountain48), "blackwater_mountain48"); - mapReader.read(r.getXml(R.xml.blackwater_mountain49), "blackwater_mountain49"); - mapReader.read(r.getXml(R.xml.blackwater_mountain50), "blackwater_mountain50"); - mapReader.read(r.getXml(R.xml.blackwater_mountain51), "blackwater_mountain51"); - mapReader.read(r.getXml(R.xml.blackwater_mountain52), "blackwater_mountain52"); - mapReader.read(r.getXml(R.xml.wild0), "wild0"); - mapReader.read(r.getXml(R.xml.crossroads), "crossroads"); - /*mapReader.read(r.getXml(R.xml.fields0), "fields0"); - mapReader.read(r.getXml(R.xml.fields1), "fields1"); - mapReader.read(r.getXml(R.xml.fields2), "fields2"); - mapReader.read(r.getXml(R.xml.fields3), "fields3"); - mapReader.read(r.getXml(R.xml.fields4), "fields4"); - mapReader.read(r.getXml(R.xml.fields5), "fields5"); - mapReader.read(r.getXml(R.xml.fields6), "fields6"); - mapReader.read(r.getXml(R.xml.fields7), "fields7"); - mapReader.read(r.getXml(R.xml.fields8), "fields8"); - mapReader.read(r.getXml(R.xml.fields9), "fields9"); - mapReader.read(r.getXml(R.xml.fields10), "fields10"); - mapReader.read(r.getXml(R.xml.fields11), "fields11"); - mapReader.read(r.getXml(R.xml.fields12), "fields12"); - mapReader.read(r.getXml(R.xml.houseatcrossroads0), "houseatcrossroads0"); - mapReader.read(r.getXml(R.xml.houseatcrossroads1), "houseatcrossroads1"); - mapReader.read(r.getXml(R.xml.houseatcrossroads2), "houseatcrossroads2"); - mapReader.read(r.getXml(R.xml.houseatcrossroads3), "houseatcrossroads3"); - mapReader.read(r.getXml(R.xml.houseatcrossroads4), "houseatcrossroads4"); - mapReader.read(r.getXml(R.xml.houseatcrossroads5), "houseatcrossroads5"); - mapReader.read(r.getXml(R.xml.loneford1), "loneford1"); - mapReader.read(r.getXml(R.xml.loneford2), "loneford2"); - mapReader.read(r.getXml(R.xml.loneford3), "loneford3"); - mapReader.read(r.getXml(R.xml.loneford4), "loneford4"); - mapReader.read(r.getXml(R.xml.loneford5), "loneford5"); - mapReader.read(r.getXml(R.xml.loneford6), "loneford6"); - mapReader.read(r.getXml(R.xml.loneford7), "loneford7"); - mapReader.read(r.getXml(R.xml.loneford8), "loneford8"); - mapReader.read(r.getXml(R.xml.loneford9), "loneford9"); - mapReader.read(r.getXml(R.xml.loneford10), "loneford10"); - mapReader.read(r.getXml(R.xml.roadbeforecrossroads), "roadbeforecrossroads"); - mapReader.read(r.getXml(R.xml.roadtocarntower0), "roadtocarntower0"); - mapReader.read(r.getXml(R.xml.roadtocarntower1), "roadtocarntower1"); - mapReader.read(r.getXml(R.xml.roadtocarntower2), "roadtocarntower2"); - mapReader.read(r.getXml(R.xml.woodcave0), "woodcave0"); - mapReader.read(r.getXml(R.xml.woodcave1), "woodcave1");*/ + mapReader.read(r, R.xml.home, "home"); + mapReader.read(r, R.xml.crossglen, "crossglen"); + mapReader.read(r, R.xml.crossglen_farmhouse, "crossglen_farmhouse"); + mapReader.read(r, R.xml.crossglen_farmhouse_basement, "crossglen_farmhouse_basement"); + mapReader.read(r, R.xml.crossglen_hall, "crossglen_hall"); + mapReader.read(r, R.xml.crossglen_smith, "crossglen_smith"); + mapReader.read(r, R.xml.crossglen_cave, "crossglen_cave"); + mapReader.read(r, R.xml.wild1, "wild1"); + mapReader.read(r, R.xml.wild2, "wild2"); + mapReader.read(r, R.xml.wild3, "wild3"); + mapReader.read(r, R.xml.jan_pitcave1, "jan_pitcave1"); + mapReader.read(r, R.xml.jan_pitcave2, "jan_pitcave2"); + mapReader.read(r, R.xml.jan_pitcave3, "jan_pitcave3"); + mapReader.read(r, R.xml.fallhaven_nw, "fallhaven_nw"); + mapReader.read(r, R.xml.snakecave1, "snakecave1"); + mapReader.read(r, R.xml.snakecave2, "snakecave2"); + mapReader.read(r, R.xml.snakecave3, "snakecave3"); + mapReader.read(r, R.xml.wild4, "wild4"); + mapReader.read(r, R.xml.hauntedhouse1, "hauntedhouse1"); + mapReader.read(r, R.xml.hauntedhouse2, "hauntedhouse2"); + mapReader.read(r, R.xml.fallhaven_ne, "fallhaven_ne"); + mapReader.read(r, R.xml.fallhaven_church, "fallhaven_church"); + mapReader.read(r, R.xml.fallhaven_barn, "fallhaven_barn"); + mapReader.read(r, R.xml.fallhaven_potions, "fallhaven_potions"); + mapReader.read(r, R.xml.fallhaven_gravedigger, "fallhaven_gravedigger"); + mapReader.read(r, R.xml.fallhaven_clothes, "fallhaven_clothes"); + mapReader.read(r, R.xml.fallhaven_arcir, "fallhaven_arcir"); + mapReader.read(r, R.xml.fallhaven_arcir_basement, "fallhaven_arcir_basement"); + mapReader.read(r, R.xml.fallhaven_athamyr, "fallhaven_athamyr"); + mapReader.read(r, R.xml.fallhaven_rigmor, "fallhaven_rigmor"); + mapReader.read(r, R.xml.fallhaven_tavern, "fallhaven_tavern"); + mapReader.read(r, R.xml.fallhaven_prison, "fallhaven_prison"); + mapReader.read(r, R.xml.fallhaven_derelict, "fallhaven_derelict"); + mapReader.read(r, R.xml.fallhaven_nocmar, "fallhaven_nocmar"); + mapReader.read(r, R.xml.catacombs1, "catacombs1"); + mapReader.read(r, R.xml.catacombs2, "catacombs2"); + mapReader.read(r, R.xml.catacombs3, "catacombs3"); + mapReader.read(r, R.xml.catacombs4, "catacombs4"); + mapReader.read(r, R.xml.hauntedhouse3, "hauntedhouse3"); + mapReader.read(r, R.xml.hauntedhouse4, "hauntedhouse4"); + mapReader.read(r, R.xml.fallhaven_sw, "fallhaven_sw"); + mapReader.read(r, R.xml.wild5, "wild5"); + mapReader.read(r, R.xml.wild6, "wild6"); + mapReader.read(r, R.xml.wild6_house, "wild6_house"); + mapReader.read(r, R.xml.wild7, "wild7"); + mapReader.read(r, R.xml.wild8, "wild8"); + mapReader.read(r, R.xml.wild9, "wild9"); + mapReader.read(r, R.xml.wild10, "wild10"); + mapReader.read(r, R.xml.flagstone0, "flagstone0"); + mapReader.read(r, R.xml.flagstone_inner, "flagstone_inner"); + mapReader.read(r, R.xml.flagstone_upper, "flagstone_upper"); + mapReader.read(r, R.xml.flagstone1, "flagstone1"); + mapReader.read(r, R.xml.flagstone2, "flagstone2"); + mapReader.read(r, R.xml.flagstone3, "flagstone3"); + mapReader.read(r, R.xml.flagstone4, "flagstone4"); + mapReader.read(r, R.xml.wild11, "wild11"); + mapReader.read(r, R.xml.wild12, "wild12"); + mapReader.read(r, R.xml.wild11_clearing, "wild11_clearing"); + mapReader.read(r, R.xml.clearing_level1, "clearing_level1"); + mapReader.read(r, R.xml.clearing_level2, "clearing_level2"); + mapReader.read(r, R.xml.fallhaven_se, "fallhaven_se"); + mapReader.read(r, R.xml.fallhaven_lumberjack, "fallhaven_lumberjack"); + mapReader.read(r, R.xml.fallhaven_alaun, "fallhaven_alaun"); + mapReader.read(r, R.xml.fallhaven_storage, "fallhaven_storage"); + mapReader.read(r, R.xml.fallhaven_farmer, "fallhaven_farmer"); + mapReader.read(r, R.xml.wild13, "wild13"); + mapReader.read(r, R.xml.wild14, "wild14"); + mapReader.read(r, R.xml.wild14_cave, "wild14_cave"); + mapReader.read(r, R.xml.wild14_clearing, "wild14_clearing"); + mapReader.read(r, R.xml.wild15, "wild15"); + mapReader.read(r, R.xml.wild15_house, "wild15_house"); + mapReader.read(r, R.xml.road1, "road1"); + mapReader.read(r, R.xml.foaming_flask, "foaming_flask"); + mapReader.read(r, R.xml.fallhaven_derelict2, "fallhaven_derelict2"); + mapReader.read(r, R.xml.vilegard_n, "vilegard_n"); + mapReader.read(r, R.xml.vilegard_s, "vilegard_s"); + mapReader.read(r, R.xml.vilegard_sw, "vilegard_sw"); + mapReader.read(r, R.xml.vilegard_ogam, "vilegard_ogam"); + mapReader.read(r, R.xml.vilegard_chapel, "vilegard_chapel"); + mapReader.read(r, R.xml.vilegard_tavern, "vilegard_tavern"); + mapReader.read(r, R.xml.vilegard_armorer, "vilegard_armorer"); + mapReader.read(r, R.xml.vilegard_smith, "vilegard_smith"); + mapReader.read(r, R.xml.vilegard_wrye, "vilegard_wrye"); + mapReader.read(r, R.xml.vilegard_kaori, "vilegard_kaori"); + mapReader.read(r, R.xml.vilegard_erttu, "vilegard_erttu"); + mapReader.read(r, R.xml.road2, "road2"); + mapReader.read(r, R.xml.road3, "road3"); + mapReader.read(r, R.xml.road4, "road4"); + mapReader.read(r, R.xml.road4_gargoylecave, "road4_gargoylecave"); + mapReader.read(r, R.xml.road5, "road5"); + mapReader.read(r, R.xml.road5_house, "road5_house"); + mapReader.read(r, R.xml.gargoylecave1, "gargoylecave1"); + mapReader.read(r, R.xml.gargoylecave2, "gargoylecave2"); + mapReader.read(r, R.xml.gargoylecave3, "gargoylecave3"); + mapReader.read(r, R.xml.gargoylecave4, "gargoylecave4"); + mapReader.read(r, R.xml.blackwater_mountain0, "blackwater_mountain0"); + mapReader.read(r, R.xml.blackwater_mountain1, "blackwater_mountain1"); + mapReader.read(r, R.xml.blackwater_mountain2, "blackwater_mountain2"); + mapReader.read(r, R.xml.blackwater_mountain3, "blackwater_mountain3"); + mapReader.read(r, R.xml.blackwater_mountain4, "blackwater_mountain4"); + mapReader.read(r, R.xml.blackwater_mountain5, "blackwater_mountain5"); + mapReader.read(r, R.xml.blackwater_mountain6, "blackwater_mountain6"); + mapReader.read(r, R.xml.blackwater_mountain7, "blackwater_mountain7"); + mapReader.read(r, R.xml.blackwater_mountain8, "blackwater_mountain8"); + mapReader.read(r, R.xml.blackwater_mountain9, "blackwater_mountain9"); + mapReader.read(r, R.xml.blackwater_mountain10, "blackwater_mountain10"); + mapReader.read(r, R.xml.blackwater_mountain11, "blackwater_mountain11"); + mapReader.read(r, R.xml.blackwater_mountain12, "blackwater_mountain12"); + mapReader.read(r, R.xml.blackwater_mountain13, "blackwater_mountain13"); + mapReader.read(r, R.xml.blackwater_mountain14, "blackwater_mountain14"); + mapReader.read(r, R.xml.blackwater_mountain15, "blackwater_mountain15"); + mapReader.read(r, R.xml.blackwater_mountain16, "blackwater_mountain16"); + mapReader.read(r, R.xml.blackwater_mountain17, "blackwater_mountain17"); + mapReader.read(r, R.xml.blackwater_mountain18, "blackwater_mountain18"); + mapReader.read(r, R.xml.blackwater_mountain19, "blackwater_mountain19"); + mapReader.read(r, R.xml.blackwater_mountain20, "blackwater_mountain20"); + mapReader.read(r, R.xml.blackwater_mountain21, "blackwater_mountain21"); + mapReader.read(r, R.xml.blackwater_mountain22, "blackwater_mountain22"); + mapReader.read(r, R.xml.blackwater_mountain23, "blackwater_mountain23"); + mapReader.read(r, R.xml.blackwater_mountain24, "blackwater_mountain24"); + mapReader.read(r, R.xml.blackwater_mountain25, "blackwater_mountain25"); + mapReader.read(r, R.xml.blackwater_mountain26, "blackwater_mountain26"); + mapReader.read(r, R.xml.blackwater_mountain27, "blackwater_mountain27"); + mapReader.read(r, R.xml.blackwater_mountain28, "blackwater_mountain28"); + mapReader.read(r, R.xml.blackwater_mountain29, "blackwater_mountain29"); + mapReader.read(r, R.xml.blackwater_mountain30, "blackwater_mountain30"); + mapReader.read(r, R.xml.blackwater_mountain31, "blackwater_mountain31"); + mapReader.read(r, R.xml.blackwater_mountain32, "blackwater_mountain32"); + mapReader.read(r, R.xml.blackwater_mountain33, "blackwater_mountain33"); + mapReader.read(r, R.xml.blackwater_mountain34, "blackwater_mountain34"); + mapReader.read(r, R.xml.blackwater_mountain35, "blackwater_mountain35"); + mapReader.read(r, R.xml.blackwater_mountain36, "blackwater_mountain36"); + mapReader.read(r, R.xml.blackwater_mountain37, "blackwater_mountain37"); + mapReader.read(r, R.xml.blackwater_mountain38, "blackwater_mountain38"); + mapReader.read(r, R.xml.blackwater_mountain39, "blackwater_mountain39"); + mapReader.read(r, R.xml.blackwater_mountain40, "blackwater_mountain40"); + mapReader.read(r, R.xml.blackwater_mountain41, "blackwater_mountain41"); + mapReader.read(r, R.xml.blackwater_mountain42, "blackwater_mountain42"); + mapReader.read(r, R.xml.blackwater_mountain43, "blackwater_mountain43"); + mapReader.read(r, R.xml.blackwater_mountain44, "blackwater_mountain44"); + mapReader.read(r, R.xml.blackwater_mountain45, "blackwater_mountain45"); + mapReader.read(r, R.xml.blackwater_mountain46, "blackwater_mountain46"); + mapReader.read(r, R.xml.blackwater_mountain47, "blackwater_mountain47"); + mapReader.read(r, R.xml.blackwater_mountain48, "blackwater_mountain48"); + mapReader.read(r, R.xml.blackwater_mountain49, "blackwater_mountain49"); + mapReader.read(r, R.xml.blackwater_mountain50, "blackwater_mountain50"); + mapReader.read(r, R.xml.blackwater_mountain51, "blackwater_mountain51"); + mapReader.read(r, R.xml.blackwater_mountain52, "blackwater_mountain52"); + mapReader.read(r, R.xml.wild0, "wild0"); + mapReader.read(r, R.xml.crossroads, "crossroads"); + mapReader.read(r, R.xml.fields0, "fields0"); + mapReader.read(r, R.xml.fields1, "fields1"); + mapReader.read(r, R.xml.fields2, "fields2"); + mapReader.read(r, R.xml.fields3, "fields3"); + mapReader.read(r, R.xml.fields4, "fields4"); + mapReader.read(r, R.xml.fields5, "fields5"); + mapReader.read(r, R.xml.fields6, "fields6"); + mapReader.read(r, R.xml.fields7, "fields7"); + mapReader.read(r, R.xml.fields8, "fields8"); + mapReader.read(r, R.xml.fields9, "fields9"); + mapReader.read(r, R.xml.fields10, "fields10"); + mapReader.read(r, R.xml.fields11, "fields11"); + mapReader.read(r, R.xml.fields12, "fields12"); + mapReader.read(r, R.xml.houseatcrossroads0, "houseatcrossroads0"); + mapReader.read(r, R.xml.houseatcrossroads1, "houseatcrossroads1"); + mapReader.read(r, R.xml.houseatcrossroads2, "houseatcrossroads2"); + mapReader.read(r, R.xml.houseatcrossroads3, "houseatcrossroads3"); + mapReader.read(r, R.xml.houseatcrossroads4, "houseatcrossroads4"); + mapReader.read(r, R.xml.houseatcrossroads5, "houseatcrossroads5"); + mapReader.read(r, R.xml.loneford1, "loneford1"); + mapReader.read(r, R.xml.loneford2, "loneford2"); + mapReader.read(r, R.xml.loneford3, "loneford3"); + mapReader.read(r, R.xml.loneford4, "loneford4"); + mapReader.read(r, R.xml.loneford5, "loneford5"); + mapReader.read(r, R.xml.loneford6, "loneford6"); + mapReader.read(r, R.xml.loneford7, "loneford7"); + mapReader.read(r, R.xml.loneford8, "loneford8"); + mapReader.read(r, R.xml.loneford9, "loneford9"); + mapReader.read(r, R.xml.loneford10, "loneford10"); + mapReader.read(r, R.xml.roadbeforecrossroads, "roadbeforecrossroads"); + mapReader.read(r, R.xml.roadtocarntower0, "roadtocarntower0"); + mapReader.read(r, R.xml.roadtocarntower1, "roadtocarntower1"); + mapReader.read(r, R.xml.roadtocarntower2, "roadtocarntower2"); + mapReader.read(r, R.xml.woodcave0, "woodcave0"); + mapReader.read(r, R.xml.woodcave1, "woodcave1"); } world.maps.predefinedMaps.addAll(mapReader.transformMaps(loader, world.monsterTypes, world.dropLists)); @@ -465,7 +465,7 @@ public final class ResourceLoader { public static final String columnSeparator = "\\|"; public static int parseImageID(DynamicTileLoader tileLoader, String s) { String[] parts = s.split(":"); - return tileLoader.getTileID(parts[0], Integer.parseInt(parts[1])); + return tileLoader.prepareTileID(parts[0], Integer.parseInt(parts[1])); } public static ConstRange parseRange(String s) { if (s == null || s.length() <= 0) return null; diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/TileStore.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/TileStore.java index 7d50688c7..796b14878 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/TileStore.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/TileStore.java @@ -1,5 +1,7 @@ package com.gpl.rpg.AndorsTrail.resource; +import java.util.HashMap; + import com.gpl.rpg.AndorsTrail.AndorsTrailPreferences; import android.content.res.Resources; @@ -30,7 +32,8 @@ public final class TileStore { //TODO: should be final. public Bitmap[] bitmaps = new Bitmap[1]; - + private HashMap> tilesetLocalIDsToTileID = new HashMap>(); + public void allocateTiles(int tilecount) { if (tilecount <= 0) return; @@ -42,4 +45,13 @@ public final class TileStore { public Bitmap getBitmap(int tileID) { return bitmaps[tileID]; } + public int getTileID(String tilesetName, int localId) { + return tilesetLocalIDsToTileID.get(tilesetName).get(localId); + } + + public void setBitmap(int tileID, Bitmap bitmap, String tilesetName, int localId) { + bitmaps[tileID] = bitmap; + if (!tilesetLocalIDsToTileID.containsKey(tilesetName)) tilesetLocalIDsToTileID.put(tilesetName, new HashMap()); + tilesetLocalIDsToTileID.get(tilesetName).put(localId, tileID); + } } diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/MainView.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/MainView.java index d624ac731..50e05daea 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/MainView.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/MainView.java @@ -7,7 +7,8 @@ import com.gpl.rpg.AndorsTrail.controller.VisualEffectController.VisualEffectAni import com.gpl.rpg.AndorsTrail.model.ModelContainer; import com.gpl.rpg.AndorsTrail.model.actor.Monster; import com.gpl.rpg.AndorsTrail.model.item.Loot; -import com.gpl.rpg.AndorsTrail.model.map.LayeredWorldMap; +import com.gpl.rpg.AndorsTrail.model.map.LayeredTileMap; +import com.gpl.rpg.AndorsTrail.model.map.PredefinedMap; import com.gpl.rpg.AndorsTrail.model.map.MapLayer; import com.gpl.rpg.AndorsTrail.model.map.MonsterSpawnArea; import com.gpl.rpg.AndorsTrail.resource.TileStore; @@ -225,7 +226,7 @@ public final class MainView extends SurfaceView implements SurfaceHolder.Callbac } private void redrawArea_(final CoordRect area) { if (!hasSurface) return; - final LayeredWorldMap currentMap = model.currentMap; + final PredefinedMap currentMap = model.currentMap; boolean b = currentMap.isOutside(area); if (b) return; @@ -251,7 +252,7 @@ public final class MainView extends SurfaceView implements SurfaceHolder.Callbac private final Rect redrawRect = new Rect(); public void redrawAreaWithEffect(final CoordRect area, final VisualEffectAnimation effect) { if (!hasSurface) return; - final LayeredWorldMap currentMap = model.currentMap; + final PredefinedMap currentMap = model.currentMap; if (currentMap.isOutside(area)) return; calculateRedrawRect(area); @@ -306,10 +307,11 @@ public final class MainView extends SurfaceView implements SurfaceHolder.Callbac } private void doDrawRect(Canvas canvas, CoordRect area) { - final LayeredWorldMap currentMap = model.currentMap; - - drawMapLayer(canvas, area, currentMap.layers[LayeredWorldMap.LAYER_GROUND]); - tryDrawMapLayer(canvas, area, currentMap, LayeredWorldMap.LAYER_OBJECTS); + final LayeredTileMap currentTileMap = model.currentTileMap; + final PredefinedMap currentMap = model.currentMap; + + drawMapLayer(canvas, area, currentTileMap.layers[LayeredTileMap.LAYER_GROUND]); + tryDrawMapLayer(canvas, area, currentTileMap, LayeredTileMap.LAYER_OBJECTS); for (Loot l : currentMap.groundBags) { if (l.isVisible) { @@ -324,7 +326,7 @@ public final class MainView extends SurfaceView implements SurfaceHolder.Callbac } } - tryDrawMapLayer(canvas, area, currentMap, LayeredWorldMap.LAYER_ABOVE); + tryDrawMapLayer(canvas, area, currentTileMap, LayeredTileMap.LAYER_ABOVE); if (model.uiSelections.selectedPosition != null) { if (model.uiSelections.selectedMonster != null) { @@ -335,8 +337,8 @@ public final class MainView extends SurfaceView implements SurfaceHolder.Callbac } } - private void tryDrawMapLayer(Canvas canvas, final CoordRect area, final LayeredWorldMap currentMap, final int layerIndex) { - if (currentMap.layers.length > layerIndex) drawMapLayer(canvas, area, currentMap.layers[layerIndex]); + private void tryDrawMapLayer(Canvas canvas, final CoordRect area, final LayeredTileMap currentTileMap, final int layerIndex) { + if (currentTileMap.layers.length > layerIndex) drawMapLayer(canvas, area, currentTileMap.layers[layerIndex]); } private void drawMapLayer(Canvas canvas, final CoordRect area, final MapLayer layer) { @@ -397,7 +399,7 @@ public final class MainView extends SurfaceView implements SurfaceHolder.Callbac private void recalculateMapTopLeft() { mapTopLeft.set(0, 0); - final LayeredWorldMap currentMap = model.currentMap; + final PredefinedMap currentMap = model.currentMap; final Coord playerpos = model.player.position; if (currentMap.size.width > screenSizeTileCount.width) {