v0.9.4: document pages now open directly from the flashing prompt
This commit is contained in:
parent
15862f98e8
commit
8c9012e085
|
@ -52,9 +52,10 @@ public abstract class DocumentPage extends Item {
|
||||||
@Override
|
@Override
|
||||||
public final boolean doPickUp(Hero hero) {
|
public final boolean doPickUp(Hero hero) {
|
||||||
GameScene.pickUpJournal(this, hero.pos);
|
GameScene.pickUpJournal(this, hero.pos);
|
||||||
GameScene.flashJournal();
|
GameScene.flashForDocument(page());
|
||||||
if (document() == Document.ALCHEMY_GUIDE){
|
if (document() == Document.ALCHEMY_GUIDE){
|
||||||
WndJournal.last_index = 1;
|
WndJournal.last_index = 1;
|
||||||
|
WndJournal.AlchemyTab.currentPageIdx = document().pageIdx(page());
|
||||||
} else {
|
} else {
|
||||||
WndJournal.last_index = 0;
|
WndJournal.last_index = 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -52,6 +52,18 @@ public enum Document {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean findPage( int pageIdx ) {
|
||||||
|
return findPage( pagesStates.keySet().toArray(new String[0])[pageIdx] );
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean pageFound( String page ){
|
||||||
|
return pagesStates.containsKey(page) && pagesStates.get(page) > NOT_FOUND;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean pageFound( int pageIdx ){
|
||||||
|
return pageFound( pagesStates.keySet().toArray(new String[0])[pageIdx] );
|
||||||
|
}
|
||||||
|
|
||||||
public boolean readPage( String page ) {
|
public boolean readPage( String page ) {
|
||||||
if (pagesStates.containsKey(page) && pagesStates.get(page) == FOUND){
|
if (pagesStates.containsKey(page) && pagesStates.get(page) == FOUND){
|
||||||
pagesStates.put(page, READ);
|
pagesStates.put(page, READ);
|
||||||
|
@ -60,13 +72,9 @@ public enum Document {
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean pageFound( String page ){
|
public boolean readPage( int pageIdx ) {
|
||||||
return pagesStates.containsKey(page) && pagesStates.get(page) > NOT_FOUND;
|
return readPage( pagesStates.keySet().toArray(new String[0])[pageIdx] );
|
||||||
}
|
|
||||||
|
|
||||||
public boolean pageFound( int pageIdx ){
|
|
||||||
return pageFound( pagesStates.keySet().toArray(new String[0])[pageIdx] );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean pageRead( String page ){
|
public boolean pageRead( String page ){
|
||||||
|
@ -77,14 +85,21 @@ public enum Document {
|
||||||
return pageRead( pagesStates.keySet().toArray(new String[0])[pageIdx] );
|
return pageRead( pagesStates.keySet().toArray(new String[0])[pageIdx] );
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setPageState( String page, int state ){
|
|
||||||
if (pagesStates.containsKey(page)) pagesStates.put(page, state);
|
|
||||||
}
|
|
||||||
|
|
||||||
public Collection<String> pageNames(){
|
public Collection<String> pageNames(){
|
||||||
return pagesStates.keySet();
|
return pagesStates.keySet();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int pageIdx(String name){
|
||||||
|
int i = 0;
|
||||||
|
for( String page : pagesStates.keySet()){
|
||||||
|
if (page.equals(name)){
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
private int pageSprite;
|
private int pageSprite;
|
||||||
public int pageSprite(){
|
public int pageSprite(){
|
||||||
return pageSprite;
|
return pageSprite;
|
||||||
|
|
|
@ -917,9 +917,10 @@ public class GameScene extends PixelScene {
|
||||||
public static void pickUpJournal( Item item, int pos ) {
|
public static void pickUpJournal( Item item, int pos ) {
|
||||||
if (scene != null) scene.pane.pickup( item, pos );
|
if (scene != null) scene.pane.pickup( item, pos );
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void flashJournal(){
|
//TODO currently only works with guidebooks
|
||||||
if (scene != null) scene.pane.flash();
|
public static void flashForDocument( String page ){
|
||||||
|
if (scene != null) scene.pane.flashForPage( page );
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void updateKeyDisplay(){
|
public static void updateKeyDisplay(){
|
||||||
|
|
|
@ -27,12 +27,14 @@ import com.shatteredpixel.shatteredpixeldungeon.SPDAction;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.Statistics;
|
import com.shatteredpixel.shatteredpixeldungeon.Statistics;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.effects.Speck;
|
import com.shatteredpixel.shatteredpixeldungeon.effects.Speck;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
|
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.journal.Document;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
|
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.scenes.PixelScene;
|
import com.shatteredpixel.shatteredpixeldungeon.scenes.PixelScene;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.HeroSprite;
|
import com.shatteredpixel.shatteredpixeldungeon.sprites.HeroSprite;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.windows.WndGame;
|
import com.shatteredpixel.shatteredpixeldungeon.windows.WndGame;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.windows.WndHero;
|
import com.shatteredpixel.shatteredpixeldungeon.windows.WndHero;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.windows.WndJournal;
|
import com.shatteredpixel.shatteredpixeldungeon.windows.WndJournal;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.windows.WndStory;
|
||||||
import com.watabou.input.GameAction;
|
import com.watabou.input.GameAction;
|
||||||
import com.watabou.noosa.BitmapText;
|
import com.watabou.noosa.BitmapText;
|
||||||
import com.watabou.noosa.Camera;
|
import com.watabou.noosa.Camera;
|
||||||
|
@ -264,9 +266,9 @@ public class StatusPane extends Component {
|
||||||
btnJournal.journalIcon.x + btnJournal.journalIcon.width()/2f,
|
btnJournal.journalIcon.x + btnJournal.journalIcon.width()/2f,
|
||||||
btnJournal.journalIcon.y + btnJournal.journalIcon.height()/2f);
|
btnJournal.journalIcon.y + btnJournal.journalIcon.height()/2f);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void flash(){
|
public void flashForPage( String page ){
|
||||||
btnJournal.flashing = true;
|
btnJournal.flashingPage = page;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void updateKeys(){
|
public void updateKeys(){
|
||||||
|
@ -279,7 +281,7 @@ public class StatusPane extends Component {
|
||||||
private Image journalIcon;
|
private Image journalIcon;
|
||||||
private KeyDisplay keyIcon;
|
private KeyDisplay keyIcon;
|
||||||
|
|
||||||
private boolean flashing;
|
private String flashingPage = Document.GUIDE_INTRO_PAGE;
|
||||||
|
|
||||||
public JournalButton() {
|
public JournalButton() {
|
||||||
super();
|
super();
|
||||||
|
@ -327,15 +329,16 @@ public class StatusPane extends Component {
|
||||||
}
|
}
|
||||||
|
|
||||||
private float time;
|
private float time;
|
||||||
|
private static final float FLASH_RATE = (float)(Math.PI*1.5f); //1.5 blinks per second
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void update() {
|
public void update() {
|
||||||
super.update();
|
super.update();
|
||||||
|
|
||||||
if (flashing){
|
if (flashingPage != null){
|
||||||
journalIcon.am = (float)Math.abs(Math.cos( 3 * (time += Game.elapsed) ));
|
journalIcon.am = (float)Math.abs(Math.cos( FLASH_RATE * (time += Game.elapsed) ));
|
||||||
keyIcon.am = journalIcon.am;
|
keyIcon.am = journalIcon.am;
|
||||||
if (time >= 0.333f*Math.PI) {
|
if (time >= Math.PI/FLASH_RATE) {
|
||||||
time = 0;
|
time = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -369,10 +372,20 @@ public class StatusPane extends Component {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onClick() {
|
protected void onClick() {
|
||||||
flashing = false;
|
|
||||||
time = 0;
|
time = 0;
|
||||||
keyIcon.am = journalIcon.am = 1;
|
keyIcon.am = journalIcon.am = 1;
|
||||||
GameScene.show( new WndJournal() );
|
if (flashingPage != null){
|
||||||
|
if (Document.ADVENTURERS_GUIDE.pageNames().contains(flashingPage)){
|
||||||
|
GameScene.show( new WndStory( WndJournal.GuideTab.iconForPage(flashingPage),
|
||||||
|
Document.ADVENTURERS_GUIDE.pageTitle(flashingPage),
|
||||||
|
Document.ADVENTURERS_GUIDE.pageBody(flashingPage) ));
|
||||||
|
} else {
|
||||||
|
GameScene.show( new WndJournal() );
|
||||||
|
}
|
||||||
|
flashingPage = null;
|
||||||
|
} else {
|
||||||
|
GameScene.show( new WndJournal() );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -200,7 +200,7 @@ public class WndJournal extends WndTabbed {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class GuideTab extends Component {
|
public static class GuideTab extends Component {
|
||||||
|
|
||||||
private ScrollPane list;
|
private ScrollPane list;
|
||||||
private ArrayList<GuideItem> pages = new ArrayList<>();
|
private ArrayList<GuideItem> pages = new ArrayList<>();
|
||||||
|
@ -283,43 +283,44 @@ public class WndJournal extends WndTabbed {
|
||||||
GameScene.show( new WndStory( iconForPage(page),
|
GameScene.show( new WndStory( iconForPage(page),
|
||||||
Document.ADVENTURERS_GUIDE.pageTitle(page),
|
Document.ADVENTURERS_GUIDE.pageTitle(page),
|
||||||
Document.ADVENTURERS_GUIDE.pageBody(page) ));
|
Document.ADVENTURERS_GUIDE.pageBody(page) ));
|
||||||
|
Document.ALCHEMY_GUIDE.readPage(page);
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO might just want this to be part of the Document class
|
|
||||||
private static Image iconForPage( String page ){
|
|
||||||
if (!Document.ADVENTURERS_GUIDE.pageFound(page)){
|
|
||||||
return new ItemSprite( ItemSpriteSheet.GUIDE_PAGE );
|
|
||||||
}
|
|
||||||
switch (page){
|
|
||||||
case Document.GUIDE_INTRO_PAGE: default:
|
|
||||||
return new ItemSprite(ItemSpriteSheet.MASTERY);
|
|
||||||
case "Identifying":
|
|
||||||
return new ItemSprite( ItemSpriteSheet.SCROLL_ISAZ );
|
|
||||||
case Document.GUIDE_SEARCH_PAGE:
|
|
||||||
return new ItemSprite( ItemSpriteSheet.LOCKED_CHEST );
|
|
||||||
case "Strength":
|
|
||||||
return new ItemSprite( ItemSpriteSheet.ARMOR_SCALE );
|
|
||||||
case "Food":
|
|
||||||
return new ItemSprite( ItemSpriteSheet.PASTY );
|
|
||||||
case "Levelling":
|
|
||||||
return new ItemSprite( ItemSpriteSheet.POTION_MAGENTA );
|
|
||||||
case "Surprise_Attacks":
|
|
||||||
return new ItemSprite( ItemSpriteSheet.ASSASSINS_BLADE );
|
|
||||||
case "Dieing":
|
|
||||||
return new ItemSprite( ItemSpriteSheet.ANKH );
|
|
||||||
case "Looting":
|
|
||||||
return new ItemSprite( ItemSpriteSheet.CRYSTAL_KEY );
|
|
||||||
case "Magic":
|
|
||||||
return new ItemSprite( ItemSpriteSheet.WAND_LIGHTNING );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//TODO might just want this to be part of the Document class
|
||||||
|
public static Image iconForPage( String page ){
|
||||||
|
if (!Document.ADVENTURERS_GUIDE.pageFound(page)){
|
||||||
|
return new ItemSprite( ItemSpriteSheet.GUIDE_PAGE );
|
||||||
|
}
|
||||||
|
switch (page){
|
||||||
|
case Document.GUIDE_INTRO_PAGE: default:
|
||||||
|
return new ItemSprite(ItemSpriteSheet.MASTERY);
|
||||||
|
case "Identifying":
|
||||||
|
return new ItemSprite( ItemSpriteSheet.SCROLL_ISAZ );
|
||||||
|
case Document.GUIDE_SEARCH_PAGE:
|
||||||
|
return new ItemSprite( ItemSpriteSheet.LOCKED_CHEST );
|
||||||
|
case "Strength":
|
||||||
|
return new ItemSprite( ItemSpriteSheet.ARMOR_SCALE );
|
||||||
|
case "Food":
|
||||||
|
return new ItemSprite( ItemSpriteSheet.PASTY );
|
||||||
|
case "Levelling":
|
||||||
|
return new ItemSprite( ItemSpriteSheet.POTION_MAGENTA );
|
||||||
|
case "Surprise_Attacks":
|
||||||
|
return new ItemSprite( ItemSpriteSheet.ASSASSINS_BLADE );
|
||||||
|
case "Dieing":
|
||||||
|
return new ItemSprite( ItemSpriteSheet.ANKH );
|
||||||
|
case "Looting":
|
||||||
|
return new ItemSprite( ItemSpriteSheet.CRYSTAL_KEY );
|
||||||
|
case "Magic":
|
||||||
|
return new ItemSprite( ItemSpriteSheet.WAND_LIGHTNING );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class AlchemyTab extends Component {
|
public static class AlchemyTab extends Component {
|
||||||
|
@ -329,7 +330,7 @@ public class WndJournal extends WndTabbed {
|
||||||
|
|
||||||
private static final int[] spriteIndexes = {10, 12, 7, 8, 3, 9, 11, 13, 14, 15};
|
private static final int[] spriteIndexes = {10, 12, 7, 8, 3, 9, 11, 13, 14, 15};
|
||||||
|
|
||||||
private static int currentPageIdx = -1;
|
public static int currentPageIdx = -1;
|
||||||
|
|
||||||
private IconTitle title;
|
private IconTitle title;
|
||||||
private RenderedTextBlock body;
|
private RenderedTextBlock body;
|
||||||
|
@ -436,6 +437,8 @@ public class WndJournal extends WndTabbed {
|
||||||
body.text(Document.ALCHEMY_GUIDE.pageBody(currentPageIdx));
|
body.text(Document.ALCHEMY_GUIDE.pageBody(currentPageIdx));
|
||||||
body.setPos(0, title.bottom());
|
body.setPos(0, title.bottom());
|
||||||
content.add(body);
|
content.add(body);
|
||||||
|
|
||||||
|
Document.ALCHEMY_GUIDE.readPage(currentPageIdx);
|
||||||
|
|
||||||
ArrayList<QuickRecipe> toAdd = QuickRecipe.getRecipes(currentPageIdx);
|
ArrayList<QuickRecipe> toAdd = QuickRecipe.getRecipes(currentPageIdx);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user