/* * Pixel Dungeon * Copyright (C) 2012-2014 Oleg Dolya * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see */ package com.shatteredpixel.shatteredpixeldungeon.windows; import com.watabou.input.Touchscreen.Touch; import com.watabou.noosa.BitmapTextMultiline; import com.watabou.noosa.Game; import com.watabou.noosa.TouchArea; import com.shatteredpixel.shatteredpixeldungeon.Chrome; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.scenes.PixelScene; import com.shatteredpixel.shatteredpixeldungeon.ui.Window; import com.watabou.utils.SparseArray; public class WndStory extends Window { private static final int WIDTH = 120; private static final int MARGIN = 6; private static final float bgR = 0.77f; private static final float bgG = 0.73f; private static final float bgB = 0.62f; public static final int ID_SEWERS = 0; public static final int ID_PRISON = 1; public static final int ID_CAVES = 2; public static final int ID_METROPOLIS = 3; public static final int ID_HALLS = 4; private static final SparseArray CHAPTERS = new SparseArray(); static { CHAPTERS.put( ID_SEWERS, "The Dungeon lies right beneath the City, its upper levels actually constitute the City's sewer system. " + "Being nominally a part of the City, these levels are not that dangerous. No one will call it a safe place, " + "but at least you won't need to deal with evil magic here." ); CHAPTERS.put( ID_PRISON, "Many years ago an underground prison was built here for the most dangerous criminals. At the time it seemed " + "like a very clever idea, because this place indeed was very hard to escape. But soon dark miasma started to permeate " + "from below, driving prisoners and guards insane. In the end the prison was abandoned, though some convicts " + "were left locked up here." ); CHAPTERS.put( ID_CAVES, "The caves, which stretch down under the abandoned prison, are sparcely populated. They lie too deep to be exploited " + "by the City and they are too poor in minerals to interest the dwarves. In the past there was a trade outpost " + "somewhere here on the route between these two states, but it has perished since the decline of Dwarven Metropolis. " + "Only omnipresent gnolls and subterranean animals dwell here now." ); CHAPTERS.put( ID_METROPOLIS, "Dwarven Metropolis was once the greatest of dwarven city-states. In its heyday the mechanized army of dwarves " + "has successfully repelled the invasion of the old god and his demon army. But it is said, that the returning warriors " + "have brought seeds of corruption with them, and that victory was the beginning of the end for the underground kingdom." ); CHAPTERS.put( ID_HALLS, "In the past these levels were the outskirts of Metropolis. After the costly victory in the war with the old god " + "dwarves were too weakened to clear them of remaining demons. Gradually demons have tightened their grip on this place " + "and now it's called Demon Halls.\n\n" + "Very few adventurers have ever descended this far..." ); }; private BitmapTextMultiline tf; private float delay; public WndStory( String text ) { super( 0, 0, Chrome.get( Chrome.Type.SCROLL ) ); tf = PixelScene.createMultiline( text, 7 ); tf.maxWidth = WIDTH - MARGIN * 2; tf.measure(); tf.ra = bgR; tf.ga = bgG; tf.ba = bgB; tf.rm = -bgR; tf.gm = -bgG; tf.bm = -bgB; tf.x = MARGIN; add( tf ); add( new TouchArea( chrome ) { @Override protected void onClick( Touch touch ) { hide(); } } ); resize( (int)(tf.width() + MARGIN * 2), (int)Math.min( tf.height(), 180 ) ); } @Override public void update() { super.update(); if (delay > 0 && (delay -= Game.elapsed) <= 0) { chrome.visible = tf.visible = true; } } public static void showChapter( int id ) { if (Dungeon.chapters.contains( id )) { return; } String text = CHAPTERS.get( id ); if (text != null) { WndStory wnd = new WndStory( text ); if ((wnd.delay = 0.6f) > 0) { wnd.chrome.visible = wnd.tf.visible = false; } Game.scene().add( wnd ); Dungeon.chapters.add( id ); } } }