diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/ItemController.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/ItemController.java index adbd4f423..3ce469daa 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/ItemController.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/ItemController.java @@ -212,7 +212,7 @@ public final class ItemController { public boolean removeLootBagIfEmpty(final Loot loot) { if (!loot.hasItems()) { world.model.currentMap.removeGroundLoot(loot); - lootBagListeners.onLootBagRemoved(loot.position); + lootBagListeners.onLootBagRemoved(world.model.currentMap, loot.position); return true; // The bag was removed. } else { return false; diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/MonsterMovementController.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/MonsterMovementController.java index 272434127..99269a5ee 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/MonsterMovementController.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/MonsterMovementController.java @@ -60,6 +60,7 @@ public final class MonsterMovementController { } private void moveMonster(final Monster m, final MonsterSpawnArea area, long currentTime) { + PredefinedMap map = world.model.currentMap; m.nextActionTime += getMillisecondsPerMove(m); if (m.movementDestination == null) { // Monster has waited and should start to move again. @@ -79,7 +80,7 @@ public final class MonsterMovementController { ,m.position.y + sgn(m.movementDestination.y - m.position.y) ); - if (!monsterCanMoveTo(world.model.currentMap, m.nextPosition)) { + if (!monsterCanMoveTo(map, m.nextPosition)) { cancelCurrentMonsterMovement(m); return; } @@ -93,7 +94,7 @@ public final class MonsterMovementController { } else { CoordRect previousPosition = new CoordRect(new Coord(m.position), m.rectPosition.size); m.position.set(m.nextPosition.topLeft); - monsterMovementListeners.onMonsterMoved(m, previousPosition); + monsterMovementListeners.onMonsterMoved(map, m, previousPosition); } } } diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/MonsterSpawningController.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/MonsterSpawningController.java index e6b0c7890..67fc7b742 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/MonsterSpawningController.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/MonsterSpawningController.java @@ -53,7 +53,7 @@ public final class MonsterSpawningController { Coord p = getRandomFreePosition(map, a.area, type.tileSize, playerPosition); if (p == null) return false; Monster m = a.spawn(p, type); - monsterSpawnListeners.onMonsterSpawned(m); + monsterSpawnListeners.onMonsterSpawned(map, m); return true; } @@ -74,7 +74,7 @@ public final class MonsterSpawningController { for (MonsterSpawnArea a : map.spawnAreas) { a.remove(m); } - monsterSpawnListeners.onMonsterRemoved(m, m.rectPosition); + monsterSpawnListeners.onMonsterRemoved(map, m, m.rectPosition); } } diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/VisualEffectController.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/VisualEffectController.java index 1b6213ac2..824d06b90 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/VisualEffectController.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/VisualEffectController.java @@ -112,9 +112,6 @@ public final class VisualEffectController { public static final class BloodSplatter { - public static final int TYPE_RED = 0; - public static final int TYPE_BROWN = 2; - public static final int TYPE_WHITE = 3; public final long removeAfter; public final long reduceIconAfter; public final Coord position; @@ -135,11 +132,11 @@ public final class VisualEffectController { BloodSplatter b = map.splatters.get(i); if (b.removeAfter <= now) { map.splatters.remove(i); - view.monsterSpawnController.monsterSpawnListeners.onSplatterRemoved(b.position); + view.monsterSpawnController.monsterSpawnListeners.onSplatterRemoved(map, b.position); } else if (!b.reducedIcon && b.reduceIconAfter <= now) { b.reducedIcon = true; b.iconID++; - view.monsterSpawnController.monsterSpawnListeners.onSplatterChanged(b.position); + view.monsterSpawnController.monsterSpawnListeners.onSplatterChanged(map, b.position); } } } @@ -148,7 +145,7 @@ public final class VisualEffectController { int iconID = getSplatterIconFromMonsterClass(m.getMonsterClass()); if (iconID > 0) { map.splatters.add(new BloodSplatter(iconID, m.position)); - view.monsterSpawnController.monsterSpawnListeners.onSplatterAdded(m.position); + view.monsterSpawnController.monsterSpawnListeners.onSplatterAdded(map, m.position); } } diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/listeners/LootBagListener.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/listeners/LootBagListener.java index d142258c3..816c9129e 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/listeners/LootBagListener.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/listeners/LootBagListener.java @@ -1,8 +1,9 @@ package com.gpl.rpg.AndorsTrail.controller.listeners; +import com.gpl.rpg.AndorsTrail.model.map.PredefinedMap; import com.gpl.rpg.AndorsTrail.util.Coord; public interface LootBagListener { - void onLootBagCreated(Coord p); - void onLootBagRemoved(Coord p); + void onLootBagCreated(PredefinedMap map, Coord p); + void onLootBagRemoved(PredefinedMap map, Coord p); } diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/listeners/LootBagListeners.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/listeners/LootBagListeners.java index e67d8e5d6..5c61f6f87 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/listeners/LootBagListeners.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/listeners/LootBagListeners.java @@ -1,25 +1,26 @@ package com.gpl.rpg.AndorsTrail.controller.listeners; import com.gpl.rpg.AndorsTrail.model.listeners.ListOfListeners; +import com.gpl.rpg.AndorsTrail.model.map.PredefinedMap; import com.gpl.rpg.AndorsTrail.util.Coord; public class LootBagListeners extends ListOfListeners implements LootBagListener { - private final Function1 onLootBagCreated = new Function1() { - @Override public void call(LootBagListener listener, Coord p) { listener.onLootBagCreated(p); } + private final Function2 onLootBagCreated = new Function2() { + @Override public void call(LootBagListener listener, PredefinedMap map, Coord p) { listener.onLootBagCreated(map, p); } }; - private final Function1 onLootBagRemoved = new Function1() { - @Override public void call(LootBagListener listener, Coord p) { listener.onLootBagRemoved(p); } + private final Function2 onLootBagRemoved = new Function2() { + @Override public void call(LootBagListener listener, PredefinedMap map, Coord p) { listener.onLootBagRemoved(map, p); } }; @Override - public void onLootBagCreated(Coord p) { - callAllListeners(this.onLootBagCreated, p); + public void onLootBagCreated(PredefinedMap map, Coord p) { + callAllListeners(this.onLootBagCreated, map, p); } @Override - public void onLootBagRemoved(Coord p) { - callAllListeners(this.onLootBagRemoved, p); + public void onLootBagRemoved(PredefinedMap map, Coord p) { + callAllListeners(this.onLootBagRemoved, map, p); } } diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/listeners/MonsterMovementListener.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/listeners/MonsterMovementListener.java index 82f0189db..48d7173f7 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/listeners/MonsterMovementListener.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/listeners/MonsterMovementListener.java @@ -1,9 +1,10 @@ package com.gpl.rpg.AndorsTrail.controller.listeners; import com.gpl.rpg.AndorsTrail.model.actor.Monster; +import com.gpl.rpg.AndorsTrail.model.map.PredefinedMap; import com.gpl.rpg.AndorsTrail.util.CoordRect; public interface MonsterMovementListener { void onMonsterSteppedOnPlayer(Monster m); - void onMonsterMoved(Monster m, CoordRect previousPosition); + void onMonsterMoved(PredefinedMap map, Monster m, CoordRect previousPosition); } diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/listeners/MonsterMovementListeners.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/listeners/MonsterMovementListeners.java index 7f26bd32f..2bd8d76f2 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/listeners/MonsterMovementListeners.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/listeners/MonsterMovementListeners.java @@ -2,6 +2,7 @@ package com.gpl.rpg.AndorsTrail.controller.listeners; import com.gpl.rpg.AndorsTrail.model.actor.Monster; import com.gpl.rpg.AndorsTrail.model.listeners.ListOfListeners; +import com.gpl.rpg.AndorsTrail.model.map.PredefinedMap; import com.gpl.rpg.AndorsTrail.util.CoordRect; public class MonsterMovementListeners extends ListOfListeners implements MonsterMovementListener { @@ -10,8 +11,8 @@ public class MonsterMovementListeners extends ListOfListeners onMonsterMoved = new Function2() { - @Override public void call(MonsterMovementListener listener, Monster monster, CoordRect previousPosition) { listener.onMonsterMoved(monster, previousPosition); } + private final Function3 onMonsterMoved = new Function3() { + @Override public void call(MonsterMovementListener listener, PredefinedMap map, Monster monster, CoordRect previousPosition) { listener.onMonsterMoved(map, monster, previousPosition); } }; @Override @@ -20,7 +21,7 @@ public class MonsterMovementListeners extends ListOfListeners implements MonsterSpawnListener { - private final Function1 onMonsterSpawned = new Function1() { - @Override public void call(MonsterSpawnListener listener, Monster monster) { listener.onMonsterSpawned(monster); } + private final Function2 onMonsterSpawned = new Function2() { + @Override public void call(MonsterSpawnListener listener, PredefinedMap map, Monster monster) { listener.onMonsterSpawned(map, monster); } }; - private final Function2 onMonsterRemoved = new Function2() { - @Override public void call(MonsterSpawnListener listener, Monster monster, CoordRect previousPosition) { listener.onMonsterRemoved(monster, previousPosition); } + private final Function3 onMonsterRemoved = new Function3() { + @Override public void call(MonsterSpawnListener listener, PredefinedMap map, Monster monster, CoordRect previousPosition) { listener.onMonsterRemoved(map, monster, previousPosition); } }; - private final Function1 onSplatterAdded = new Function1() { - @Override public void call(MonsterSpawnListener listener, Coord p) { listener.onSplatterAdded(p); } + private final Function2 onSplatterAdded = new Function2() { + @Override public void call(MonsterSpawnListener listener, PredefinedMap map, Coord p) { listener.onSplatterAdded(map, p); } }; - private final Function1 onSplatterChanged = new Function1() { - @Override public void call(MonsterSpawnListener listener, Coord p) { listener.onSplatterChanged(p); } + private final Function2 onSplatterChanged = new Function2() { + @Override public void call(MonsterSpawnListener listener, PredefinedMap map, Coord p) { listener.onSplatterChanged(map, p); } }; - private final Function1 onSplatterRemoved = new Function1() { - @Override public void call(MonsterSpawnListener listener, Coord p) { listener.onSplatterRemoved(p); } + private final Function2 onSplatterRemoved = new Function2() { + @Override public void call(MonsterSpawnListener listener, PredefinedMap map, Coord p) { listener.onSplatterRemoved(map, p); } }; @Override - public void onMonsterSpawned(Monster m) { - callAllListeners(this.onMonsterSpawned, m); + public void onMonsterSpawned(PredefinedMap map, Monster m) { + callAllListeners(this.onMonsterSpawned, map, m); } @Override - public void onMonsterRemoved(Monster m, CoordRect previousPosition) { - callAllListeners(this.onMonsterRemoved, m, previousPosition); + public void onMonsterRemoved(PredefinedMap map, Monster m, CoordRect previousPosition) { + callAllListeners(this.onMonsterRemoved, map, m, previousPosition); } @Override - public void onSplatterAdded(Coord p) { - callAllListeners(this.onSplatterAdded, p); + public void onSplatterAdded(PredefinedMap map, Coord p) { + callAllListeners(this.onSplatterAdded, map, p); } @Override - public void onSplatterChanged(Coord p) { - callAllListeners(this.onSplatterChanged, p); + public void onSplatterChanged(PredefinedMap map, Coord p) { + callAllListeners(this.onSplatterChanged, map, p); } @Override - public void onSplatterRemoved(Coord p) { - callAllListeners(this.onSplatterRemoved, p); + public void onSplatterRemoved(PredefinedMap map, Coord p) { + callAllListeners(this.onSplatterRemoved, map, p); } } diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/MainView.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/MainView.java index fb4ea7bec..23e3a0b94 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/MainView.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/MainView.java @@ -436,13 +436,15 @@ public final class MainView extends SurfaceView } @Override - public void onMonsterSpawned(Monster m) { + public void onMonsterSpawned(PredefinedMap map, Monster m) { + if (map != currentMap) return; redrawArea(m.rectPosition, REDRAW_AREA_MONSTER_SPAWNED); } @Override - public void onMonsterRemoved(Monster m, CoordRect previousPosition) { - redrawArea(previousPosition, REDRAW_AREA_MONSTER_KILLED); + public void onMonsterRemoved(PredefinedMap map, Monster m, CoordRect previousPosition) { + if (map != currentMap) return; + redrawArea(previousPosition, REDRAW_AREA_MONSTER_KILLED); } @Override @@ -450,34 +452,40 @@ public final class MainView extends SurfaceView } @Override - public void onMonsterMoved(Monster m, CoordRect previousPosition) { - redrawArea(previousPosition, REDRAW_AREA_MONSTER_MOVED); + public void onMonsterMoved(PredefinedMap map, Monster m, CoordRect previousPosition) { + if (map != currentMap) return; + redrawArea(previousPosition, REDRAW_AREA_MONSTER_MOVED); redrawArea(m.rectPosition, REDRAW_AREA_MONSTER_MOVED); } @Override - public void onSplatterAdded(Coord p) { - redrawTile(p, REDRAW_TILE_SPLATTER); + public void onSplatterAdded(PredefinedMap map, Coord p) { + if (map != currentMap) return; + redrawTile(p, REDRAW_TILE_SPLATTER); } @Override - public void onSplatterChanged(Coord p) { - redrawTile(p, REDRAW_TILE_SPLATTER); + public void onSplatterChanged(PredefinedMap map, Coord p) { + if (map != currentMap) return; + redrawTile(p, REDRAW_TILE_SPLATTER); } @Override - public void onSplatterRemoved(Coord p) { - redrawTile(p, REDRAW_TILE_SPLATTER); + public void onSplatterRemoved(PredefinedMap map, Coord p) { + if (map != currentMap) return; + redrawTile(p, REDRAW_TILE_SPLATTER); } @Override - public void onLootBagCreated(Coord p) { - redrawTile(p, REDRAW_TILE_BAG); + public void onLootBagCreated(PredefinedMap map, Coord p) { + if (map != currentMap) return; + redrawTile(p, REDRAW_TILE_BAG); } @Override - public void onLootBagRemoved(Coord p) { - redrawTile(p, REDRAW_TILE_BAG); + public void onLootBagRemoved(PredefinedMap map, Coord p) { + if (map != currentMap) return; + redrawTile(p, REDRAW_TILE_BAG); } @Override