Search in sources :

Example 1 with CheckedCell

use of com.watabou.pixeldungeon.effects.CheckedCell in project pixel-dungeon by watabou.

the class Hero method search.

public boolean search(boolean intentional) {
    boolean smthFound = false;
    int positive = 0;
    int negative = 0;
    for (Buff buff : buffs(RingOfDetection.Detection.class)) {
        int bonus = ((RingOfDetection.Detection) buff).level;
        if (bonus > positive) {
            positive = bonus;
        } else if (bonus < 0) {
            negative += bonus;
        }
    }
    int distance = 1 + positive + negative;
    float level = intentional ? (2 * awareness - awareness * awareness) : awareness;
    if (distance <= 0) {
        level /= 2 - distance;
        distance = 1;
    }
    int cx = pos % Level.WIDTH;
    int cy = pos / Level.WIDTH;
    int ax = cx - distance;
    if (ax < 0) {
        ax = 0;
    }
    int bx = cx + distance;
    if (bx >= Level.WIDTH) {
        bx = Level.WIDTH - 1;
    }
    int ay = cy - distance;
    if (ay < 0) {
        ay = 0;
    }
    int by = cy + distance;
    if (by >= Level.HEIGHT) {
        by = Level.HEIGHT - 1;
    }
    for (int y = ay; y <= by; y++) {
        for (int x = ax, p = ax + y * Level.WIDTH; x <= bx; x++, p++) {
            if (Dungeon.visible[p]) {
                if (intentional) {
                    sprite.parent.addToBack(new CheckedCell(p));
                }
                if (Level.secret[p] && (intentional || Random.Float() < level)) {
                    int oldValue = Dungeon.level.map[p];
                    GameScene.discoverTile(p, oldValue);
                    Level.set(p, Terrain.discover(oldValue));
                    GameScene.updateMap(p);
                    ScrollOfMagicMapping.discover(p);
                    smthFound = true;
                }
                if (intentional) {
                    Heap heap = Dungeon.level.heaps.get(p);
                    if (heap != null && heap.type == Type.HIDDEN) {
                        heap.open(this);
                        smthFound = true;
                    }
                }
            }
        }
    }
    if (intentional) {
        sprite.showStatus(CharSprite.DEFAULT, TXT_SEARCH);
        sprite.operate(pos);
        if (smthFound) {
            spendAndNext(Random.Float() < level ? TIME_TO_SEARCH : TIME_TO_SEARCH * 2);
        } else {
            spendAndNext(TIME_TO_SEARCH);
        }
    }
    if (smthFound) {
        GLog.w(TXT_NOTICED_SMTH);
        Sample.INSTANCE.play(Assets.SND_SECRET);
        interrupt();
    }
    return smthFound;
}
Also used : CheckedCell(com.watabou.pixeldungeon.effects.CheckedCell) RingOfDetection(com.watabou.pixeldungeon.items.rings.RingOfDetection) Buff(com.watabou.pixeldungeon.actors.buffs.Buff) RingOfDetection(com.watabou.pixeldungeon.items.rings.RingOfDetection) Heap(com.watabou.pixeldungeon.items.Heap)

Aggregations

Buff (com.watabou.pixeldungeon.actors.buffs.Buff)1 CheckedCell (com.watabou.pixeldungeon.effects.CheckedCell)1 Heap (com.watabou.pixeldungeon.items.Heap)1 RingOfDetection (com.watabou.pixeldungeon.items.rings.RingOfDetection)1