Provide reference to current map object when emitting monster spawned events.

This commit is contained in:
Oskar Wiksten
2013-01-13 10:56:37 +01:00
parent 6a59f5d99e
commit 1032b2ee51
11 changed files with 78 additions and 66 deletions

View File

@@ -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;

View File

@@ -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);
}
}
}

View File

@@ -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);
}
}

View File

@@ -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);
}
}

View File

@@ -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);
}

View File

@@ -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<LootBagListener> implements LootBagListener {
private final Function1<LootBagListener, Coord> onLootBagCreated = new Function1<LootBagListener, Coord>() {
@Override public void call(LootBagListener listener, Coord p) { listener.onLootBagCreated(p); }
private final Function2<LootBagListener, PredefinedMap, Coord> onLootBagCreated = new Function2<LootBagListener, PredefinedMap, Coord>() {
@Override public void call(LootBagListener listener, PredefinedMap map, Coord p) { listener.onLootBagCreated(map, p); }
};
private final Function1<LootBagListener, Coord> onLootBagRemoved = new Function1<LootBagListener, Coord>() {
@Override public void call(LootBagListener listener, Coord p) { listener.onLootBagRemoved(p); }
private final Function2<LootBagListener, PredefinedMap, Coord> onLootBagRemoved = new Function2<LootBagListener, PredefinedMap, Coord>() {
@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);
}
}

View File

@@ -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);
}

View File

@@ -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<MonsterMovementListener> implements MonsterMovementListener {
@@ -10,8 +11,8 @@ public class MonsterMovementListeners extends ListOfListeners<MonsterMovementLis
@Override public void call(MonsterMovementListener listener, Monster monster) { listener.onMonsterSteppedOnPlayer(monster); }
};
private final Function2<MonsterMovementListener, Monster, CoordRect> onMonsterMoved = new Function2<MonsterMovementListener, Monster, CoordRect>() {
@Override public void call(MonsterMovementListener listener, Monster monster, CoordRect previousPosition) { listener.onMonsterMoved(monster, previousPosition); }
private final Function3<MonsterMovementListener, PredefinedMap, Monster, CoordRect> onMonsterMoved = new Function3<MonsterMovementListener, PredefinedMap, Monster, CoordRect>() {
@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<MonsterMovementLis
}
@Override
public void onMonsterMoved(Monster m, CoordRect previousPosition) {
callAllListeners(this.onMonsterMoved, m, previousPosition);
public void onMonsterMoved(PredefinedMap map, Monster m, CoordRect previousPosition) {
callAllListeners(this.onMonsterMoved, map, m, previousPosition);
}
}

View File

@@ -1,13 +1,14 @@
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.Coord;
import com.gpl.rpg.AndorsTrail.util.CoordRect;
public interface MonsterSpawnListener {
void onMonsterSpawned(Monster m);
void onMonsterRemoved(Monster m, CoordRect previousPosition);
void onSplatterAdded(Coord p);
void onSplatterChanged(Coord p);
void onSplatterRemoved(Coord p);
void onMonsterSpawned(PredefinedMap map, Monster m);
void onMonsterRemoved(PredefinedMap map, Monster m, CoordRect previousPosition);
void onSplatterAdded(PredefinedMap map, Coord p);
void onSplatterChanged(PredefinedMap map, Coord p);
void onSplatterRemoved(PredefinedMap map, Coord p);
}

View File

@@ -2,53 +2,54 @@ 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.Coord;
import com.gpl.rpg.AndorsTrail.util.CoordRect;
public class MonsterSpawnListeners extends ListOfListeners<MonsterSpawnListener> implements MonsterSpawnListener {
private final Function1<MonsterSpawnListener, Monster> onMonsterSpawned = new Function1<MonsterSpawnListener, Monster>() {
@Override public void call(MonsterSpawnListener listener, Monster monster) { listener.onMonsterSpawned(monster); }
private final Function2<MonsterSpawnListener, PredefinedMap, Monster> onMonsterSpawned = new Function2<MonsterSpawnListener, PredefinedMap, Monster>() {
@Override public void call(MonsterSpawnListener listener, PredefinedMap map, Monster monster) { listener.onMonsterSpawned(map, monster); }
};
private final Function2<MonsterSpawnListener, Monster, CoordRect> onMonsterRemoved = new Function2<MonsterSpawnListener, Monster, CoordRect>() {
@Override public void call(MonsterSpawnListener listener, Monster monster, CoordRect previousPosition) { listener.onMonsterRemoved(monster, previousPosition); }
private final Function3<MonsterSpawnListener, PredefinedMap, Monster, CoordRect> onMonsterRemoved = new Function3<MonsterSpawnListener, PredefinedMap, Monster, CoordRect>() {
@Override public void call(MonsterSpawnListener listener, PredefinedMap map, Monster monster, CoordRect previousPosition) { listener.onMonsterRemoved(map, monster, previousPosition); }
};
private final Function1<MonsterSpawnListener, Coord> onSplatterAdded = new Function1<MonsterSpawnListener, Coord>() {
@Override public void call(MonsterSpawnListener listener, Coord p) { listener.onSplatterAdded(p); }
private final Function2<MonsterSpawnListener, PredefinedMap, Coord> onSplatterAdded = new Function2<MonsterSpawnListener, PredefinedMap, Coord>() {
@Override public void call(MonsterSpawnListener listener, PredefinedMap map, Coord p) { listener.onSplatterAdded(map, p); }
};
private final Function1<MonsterSpawnListener, Coord> onSplatterChanged = new Function1<MonsterSpawnListener, Coord>() {
@Override public void call(MonsterSpawnListener listener, Coord p) { listener.onSplatterChanged(p); }
private final Function2<MonsterSpawnListener, PredefinedMap, Coord> onSplatterChanged = new Function2<MonsterSpawnListener, PredefinedMap, Coord>() {
@Override public void call(MonsterSpawnListener listener, PredefinedMap map, Coord p) { listener.onSplatterChanged(map, p); }
};
private final Function1<MonsterSpawnListener, Coord> onSplatterRemoved = new Function1<MonsterSpawnListener, Coord>() {
@Override public void call(MonsterSpawnListener listener, Coord p) { listener.onSplatterRemoved(p); }
private final Function2<MonsterSpawnListener, PredefinedMap, Coord> onSplatterRemoved = new Function2<MonsterSpawnListener, PredefinedMap, Coord>() {
@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);
}
}

View File

@@ -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