mirror of
https://github.com/OMGeeky/andors-trail.git
synced 2026-02-23 15:38:29 +01:00
Provide reference to current map object when emitting monster spawned events.
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user