@Override public void onComplete(Animation anim) { super.onComplete(anim); if (visible && emitter != null && anim == idle) { emitter.burst(Speck.factory(Speck.FORGE), 3); float volume = 0.2f / (Level.distance(ch.pos, Dungeon.hero.pos)); Sample.INSTANCE.play(Assets.SND_EVOKE, volume, volume, 0.8f); } }
private static Item prize(Level level) { Item prize = level.itemToSpanAsPrize(); if (prize instanceof Scroll) { return prize; } else if (prize != null) { level.addItemToSpawn(prize); } return Generator.random(Generator.Category.SCROLL); }
public static void paint(Level level, Room room) { fill(level, room, Terrain.WALL); fill(level, room, 1, Terrain.EMPTY); Room.Door entrance = room.entrance(); Point a = null; Point b = null; if (entrance.x == room.left) { a = new Point(room.left + 1, entrance.y - 1); b = new Point(room.left + 1, entrance.y + 1); fill(level, room.right - 1, room.top + 1, 1, room.height() - 1, Terrain.BOOKSHELF); } else if (entrance.x == room.right) { a = new Point(room.right - 1, entrance.y - 1); b = new Point(room.right - 1, entrance.y + 1); fill(level, room.left + 1, room.top + 1, 1, room.height() - 1, Terrain.BOOKSHELF); } else if (entrance.y == room.top) { a = new Point(entrance.x + 1, room.top + 1); b = new Point(entrance.x - 1, room.top + 1); fill(level, room.left + 1, room.bottom - 1, room.width() - 1, 1, Terrain.BOOKSHELF); } else if (entrance.y == room.bottom) { a = new Point(entrance.x + 1, room.bottom - 1); b = new Point(entrance.x - 1, room.bottom - 1); fill(level, room.left + 1, room.top + 1, room.width() - 1, 1, Terrain.BOOKSHELF); } if (a != null && level.map[a.x + a.y * Level.WIDTH] == Terrain.EMPTY) { set(level, a, Terrain.STATUE); } if (b != null && level.map[b.x + b.y * Level.WIDTH] == Terrain.EMPTY) { set(level, b, Terrain.STATUE); } int n = Random.IntRange(2, 3); for (int i = 0; i < n; i++) { int pos; do { pos = room.random(); } while (level.map[pos] != Terrain.EMPTY || level.heaps.get(pos) != null); level.drop(prize(level), pos); } entrance.set(Room.Door.Type.LOCKED); level.addItemToSpawn(new IronKey()); }
@Override public void attack(int cell) { if (!Level.adjacent(cell, ch.pos)) { cellToAttack = cell; turnTo(ch.pos, cell); play(zap); } else { super.attack(cell); } }