Search in sources :

Example 1 with Blob

use of com.watabou.pixeldungeon.actors.blobs.Blob in project pixel-dungeon by watabou.

the class Level method create.

public void create() {
    resizingNeeded = false;
    map = new int[LENGTH];
    visited = new boolean[LENGTH];
    Arrays.fill(visited, false);
    mapped = new boolean[LENGTH];
    Arrays.fill(mapped, false);
    mobs = new HashSet<Mob>();
    heaps = new SparseArray<Heap>();
    blobs = new HashMap<Class<? extends Blob>, Blob>();
    plants = new SparseArray<Plant>();
    if (!Dungeon.bossLevel()) {
        addItemToSpawn(Generator.random(Generator.Category.FOOD));
        if (Dungeon.posNeeded()) {
            addItemToSpawn(new PotionOfStrength());
            Dungeon.potionOfStrength++;
        }
        if (Dungeon.souNeeded()) {
            addItemToSpawn(new ScrollOfUpgrade());
            Dungeon.scrollsOfUpgrade++;
        }
        if (Dungeon.soeNeeded()) {
            addItemToSpawn(new ScrollOfEnchantment());
            Dungeon.scrollsOfEnchantment++;
        }
        if (Dungeon.depth > 1) {
            switch(Random.Int(10)) {
                case 0:
                    if (!Dungeon.bossLevel(Dungeon.depth + 1)) {
                        feeling = Feeling.CHASM;
                    }
                    break;
                case 1:
                    feeling = Feeling.WATER;
                    break;
                case 2:
                    feeling = Feeling.GRASS;
                    break;
            }
        }
    }
    boolean pitNeeded = Dungeon.depth > 1 && weakFloorCreated;
    do {
        Arrays.fill(map, feeling == Feeling.CHASM ? Terrain.CHASM : Terrain.WALL);
        pitRoomNeeded = pitNeeded;
        weakFloorCreated = false;
    } while (!build());
    decorate();
    buildFlagMaps();
    cleanWalls();
    createMobs();
    createItems();
}
Also used : Mob(com.watabou.pixeldungeon.actors.mobs.Mob) Blob(com.watabou.pixeldungeon.actors.blobs.Blob) ScrollOfEnchantment(com.watabou.pixeldungeon.items.scrolls.ScrollOfEnchantment) PotionOfStrength(com.watabou.pixeldungeon.items.potions.PotionOfStrength) Heap(com.watabou.pixeldungeon.items.Heap) Plant(com.watabou.pixeldungeon.plants.Plant) HeroClass(com.watabou.pixeldungeon.actors.hero.HeroClass) ScrollOfUpgrade(com.watabou.pixeldungeon.items.scrolls.ScrollOfUpgrade)

Example 2 with Blob

use of com.watabou.pixeldungeon.actors.blobs.Blob in project pixel-dungeon by watabou.

the class PotionOfPurity method shatter.

@Override
public void shatter(int cell) {
    PathFinder.buildDistanceMap(cell, BArray.not(Level.losBlocking, null), DISTANCE);
    boolean procd = false;
    Blob[] blobs = { Dungeon.level.blobs.get(ToxicGas.class), Dungeon.level.blobs.get(ParalyticGas.class) };
    for (int j = 0; j < blobs.length; j++) {
        Blob blob = blobs[j];
        if (blob == null) {
            continue;
        }
        for (int i = 0; i < Level.LENGTH; i++) {
            if (PathFinder.distance[i] < Integer.MAX_VALUE) {
                int value = blob.cur[i];
                if (value > 0) {
                    blob.cur[i] = 0;
                    blob.volume -= value;
                    procd = true;
                    if (Dungeon.visible[i]) {
                        CellEmitter.get(i).burst(Speck.factory(Speck.DISCOVER), 1);
                    }
                }
            }
        }
    }
    boolean heroAffected = PathFinder.distance[Dungeon.hero.pos] < Integer.MAX_VALUE;
    if (procd) {
        if (Dungeon.visible[cell]) {
            splash(cell);
            Sample.INSTANCE.play(Assets.SND_SHATTER);
        }
        setKnown();
        if (heroAffected) {
            GLog.p(TXT_FRESHNESS);
        }
    } else {
        super.shatter(cell);
        if (heroAffected) {
            GLog.i(TXT_FRESHNESS);
            setKnown();
        }
    }
}
Also used : Blob(com.watabou.pixeldungeon.actors.blobs.Blob) ToxicGas(com.watabou.pixeldungeon.actors.blobs.ToxicGas) ParalyticGas(com.watabou.pixeldungeon.actors.blobs.ParalyticGas)

Example 3 with Blob

use of com.watabou.pixeldungeon.actors.blobs.Blob in project pixel-dungeon by watabou.

the class GameScene method create.

@Override
public void create() {
    Music.INSTANCE.play(Assets.TUNE, true);
    Music.INSTANCE.volume(1f);
    PixelDungeon.lastClass(Dungeon.hero.heroClass.ordinal());
    super.create();
    Camera.main.zoom(defaultZoom + PixelDungeon.zoom());
    scene = this;
    terrain = new Group();
    add(terrain);
    water = new SkinnedBlock(Level.WIDTH * DungeonTilemap.SIZE, Level.HEIGHT * DungeonTilemap.SIZE, Dungeon.level.waterTex());
    terrain.add(water);
    ripples = new Group();
    terrain.add(ripples);
    tiles = new DungeonTilemap();
    terrain.add(tiles);
    Dungeon.level.addVisuals(this);
    plants = new Group();
    add(plants);
    int size = Dungeon.level.plants.size();
    for (int i = 0; i < size; i++) {
        addPlantSprite(Dungeon.level.plants.valueAt(i));
    }
    heaps = new Group();
    add(heaps);
    size = Dungeon.level.heaps.size();
    for (int i = 0; i < size; i++) {
        addHeapSprite(Dungeon.level.heaps.valueAt(i));
    }
    emitters = new Group();
    effects = new Group();
    emoicons = new Group();
    mobs = new Group();
    add(mobs);
    for (Mob mob : Dungeon.level.mobs) {
        addMobSprite(mob);
        if (Statistics.amuletObtained) {
            mob.beckon(Dungeon.hero.pos);
        }
    }
    add(emitters);
    add(effects);
    gases = new Group();
    add(gases);
    for (Blob blob : Dungeon.level.blobs.values()) {
        blob.emitter = null;
        addBlobSprite(blob);
    }
    fog = new FogOfWar(Level.WIDTH, Level.HEIGHT);
    fog.updateVisibility(Dungeon.visible, Dungeon.level.visited, Dungeon.level.mapped);
    add(fog);
    brightness(PixelDungeon.brightness());
    spells = new Group();
    add(spells);
    statuses = new Group();
    add(statuses);
    add(emoicons);
    hero = new HeroSprite();
    hero.place(Dungeon.hero.pos);
    hero.updateArmor();
    mobs.add(hero);
    add(new HealthIndicator());
    add(cellSelector = new CellSelector(tiles));
    StatusPane sb = new StatusPane();
    sb.camera = uiCamera;
    sb.setSize(uiCamera.width, 0);
    add(sb);
    toolbar = new Toolbar();
    toolbar.camera = uiCamera;
    toolbar.setRect(0, uiCamera.height - toolbar.height(), uiCamera.width, toolbar.height());
    add(toolbar);
    AttackIndicator attack = new AttackIndicator();
    attack.camera = uiCamera;
    attack.setPos(uiCamera.width - attack.width(), toolbar.top() - attack.height());
    add(attack);
    log = new GameLog();
    log.camera = uiCamera;
    log.setRect(0, toolbar.top(), attack.left(), 0);
    add(log);
    busy = new BusyIndicator();
    busy.camera = uiCamera;
    busy.x = 1;
    busy.y = sb.bottom() + 1;
    add(busy);
    switch(InterlevelScene.mode) {
        case RESURRECT:
            WandOfBlink.appear(Dungeon.hero, Dungeon.level.entrance);
            new Flare(8, 32).color(0xFFFF66, true).show(hero, 2f);
            break;
        case RETURN:
            WandOfBlink.appear(Dungeon.hero, Dungeon.hero.pos);
            break;
        case FALL:
            Chasm.heroLand();
            break;
        case DESCEND:
            switch(Dungeon.depth) {
                case 1:
                    WndStory.showChapter(WndStory.ID_SEWERS);
                    break;
                case 6:
                    WndStory.showChapter(WndStory.ID_PRISON);
                    break;
                case 11:
                    WndStory.showChapter(WndStory.ID_CAVES);
                    break;
                case 16:
                    WndStory.showChapter(WndStory.ID_METROPOLIS);
                    break;
                case 22:
                    WndStory.showChapter(WndStory.ID_HALLS);
                    break;
            }
            if (Dungeon.hero.isAlive() && Dungeon.depth != 22) {
                Badges.validateNoKilling();
            }
            break;
        default:
    }
    ArrayList<Item> dropped = Dungeon.droppedItems.get(Dungeon.depth);
    if (dropped != null) {
        for (Item item : dropped) {
            int pos = Dungeon.level.randomRespawnCell();
            if (item instanceof Potion) {
                ((Potion) item).shatter(pos);
            } else if (item instanceof Plant.Seed) {
                Dungeon.level.plant((Plant.Seed) item, pos);
            } else {
                Dungeon.level.drop(item, pos);
            }
        }
        Dungeon.droppedItems.remove(Dungeon.depth);
    }
    Camera.main.target = hero;
    if (InterlevelScene.mode != InterlevelScene.Mode.NONE) {
        if (Dungeon.depth < Statistics.deepestFloor) {
            GLog.h(TXT_WELCOME_BACK, Dungeon.depth);
        } else {
            GLog.h(TXT_WELCOME, Dungeon.depth);
            Sample.INSTANCE.play(Assets.SND_DESCEND);
        }
        switch(Dungeon.level.feeling) {
            case CHASM:
                GLog.w(TXT_CHASM);
                break;
            case WATER:
                GLog.w(TXT_WATER);
                break;
            case GRASS:
                GLog.w(TXT_GRASS);
                break;
            default:
        }
        if (Dungeon.level instanceof RegularLevel && ((RegularLevel) Dungeon.level).secretDoors > Random.IntRange(3, 4)) {
            GLog.w(TXT_SECRETS);
        }
        if (Dungeon.nightMode && !Dungeon.bossLevel()) {
            GLog.w(TXT_NIGHT_MODE);
        }
        InterlevelScene.mode = InterlevelScene.Mode.NONE;
        fadeIn();
    }
}
Also used : Group(com.watabou.noosa.Group) Mob(com.watabou.pixeldungeon.actors.mobs.Mob) FogOfWar(com.watabou.pixeldungeon.FogOfWar) Blob(com.watabou.pixeldungeon.actors.blobs.Blob) StatusPane(com.watabou.pixeldungeon.ui.StatusPane) Flare(com.watabou.pixeldungeon.effects.Flare) Potion(com.watabou.pixeldungeon.items.potions.Potion) AttackIndicator(com.watabou.pixeldungeon.ui.AttackIndicator) DungeonTilemap(com.watabou.pixeldungeon.DungeonTilemap) Item(com.watabou.pixeldungeon.items.Item) Plant(com.watabou.pixeldungeon.plants.Plant) HealthIndicator(com.watabou.pixeldungeon.ui.HealthIndicator) BusyIndicator(com.watabou.pixeldungeon.ui.BusyIndicator) SkinnedBlock(com.watabou.noosa.SkinnedBlock) HeroSprite(com.watabou.pixeldungeon.sprites.HeroSprite) GameLog(com.watabou.pixeldungeon.ui.GameLog) Toolbar(com.watabou.pixeldungeon.ui.Toolbar) RegularLevel(com.watabou.pixeldungeon.levels.RegularLevel)

Example 4 with Blob

use of com.watabou.pixeldungeon.actors.blobs.Blob in project pixel-dungeon by watabou.

the class Actor method init.

public static void init() {
    addDelayed(Dungeon.hero, -Float.MIN_VALUE);
    for (Mob mob : Dungeon.level.mobs) {
        add(mob);
    }
    for (Blob blob : Dungeon.level.blobs.values()) {
        add(blob);
    }
    current = null;
}
Also used : Mob(com.watabou.pixeldungeon.actors.mobs.Mob) Blob(com.watabou.pixeldungeon.actors.blobs.Blob)

Example 5 with Blob

use of com.watabou.pixeldungeon.actors.blobs.Blob in project pixel-dungeon by watabou.

the class Level method restoreFromBundle.

@Override
public void restoreFromBundle(Bundle bundle) {
    mobs = new HashSet<Mob>();
    heaps = new SparseArray<Heap>();
    blobs = new HashMap<Class<? extends Blob>, Blob>();
    plants = new SparseArray<Plant>();
    map = bundle.getIntArray(MAP);
    visited = bundle.getBooleanArray(VISITED);
    mapped = bundle.getBooleanArray(MAPPED);
    entrance = bundle.getInt(ENTRANCE);
    exit = bundle.getInt(EXIT);
    weakFloorCreated = false;
    adjustMapSize();
    Collection<Bundlable> collection = bundle.getCollection(HEAPS);
    for (Bundlable h : collection) {
        Heap heap = (Heap) h;
        if (resizingNeeded) {
            heap.pos = adjustPos(heap.pos);
        }
        heaps.put(heap.pos, heap);
    }
    collection = bundle.getCollection(PLANTS);
    for (Bundlable p : collection) {
        Plant plant = (Plant) p;
        if (resizingNeeded) {
            plant.pos = adjustPos(plant.pos);
        }
        plants.put(plant.pos, plant);
    }
    collection = bundle.getCollection(MOBS);
    for (Bundlable m : collection) {
        Mob mob = (Mob) m;
        if (mob != null) {
            if (resizingNeeded) {
                mob.pos = adjustPos(mob.pos);
            }
            mobs.add(mob);
        }
    }
    collection = bundle.getCollection(BLOBS);
    for (Bundlable b : collection) {
        Blob blob = (Blob) b;
        blobs.put(blob.getClass(), blob);
    }
    buildFlagMaps();
    cleanWalls();
}
Also used : Mob(com.watabou.pixeldungeon.actors.mobs.Mob) Blob(com.watabou.pixeldungeon.actors.blobs.Blob) Plant(com.watabou.pixeldungeon.plants.Plant) Bundlable(com.watabou.utils.Bundlable) HeroClass(com.watabou.pixeldungeon.actors.hero.HeroClass) Heap(com.watabou.pixeldungeon.items.Heap)

Aggregations

Blob (com.watabou.pixeldungeon.actors.blobs.Blob)5 Mob (com.watabou.pixeldungeon.actors.mobs.Mob)4 Plant (com.watabou.pixeldungeon.plants.Plant)3 HeroClass (com.watabou.pixeldungeon.actors.hero.HeroClass)2 Heap (com.watabou.pixeldungeon.items.Heap)2 Group (com.watabou.noosa.Group)1 SkinnedBlock (com.watabou.noosa.SkinnedBlock)1 DungeonTilemap (com.watabou.pixeldungeon.DungeonTilemap)1 FogOfWar (com.watabou.pixeldungeon.FogOfWar)1 ParalyticGas (com.watabou.pixeldungeon.actors.blobs.ParalyticGas)1 ToxicGas (com.watabou.pixeldungeon.actors.blobs.ToxicGas)1 Flare (com.watabou.pixeldungeon.effects.Flare)1 Item (com.watabou.pixeldungeon.items.Item)1 Potion (com.watabou.pixeldungeon.items.potions.Potion)1 PotionOfStrength (com.watabou.pixeldungeon.items.potions.PotionOfStrength)1 ScrollOfEnchantment (com.watabou.pixeldungeon.items.scrolls.ScrollOfEnchantment)1 ScrollOfUpgrade (com.watabou.pixeldungeon.items.scrolls.ScrollOfUpgrade)1 RegularLevel (com.watabou.pixeldungeon.levels.RegularLevel)1 HeroSprite (com.watabou.pixeldungeon.sprites.HeroSprite)1 AttackIndicator (com.watabou.pixeldungeon.ui.AttackIndicator)1