From 735af276c802ea98001c6c43d6954e6756f1902f Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Sat, 18 Oct 2014 21:30:38 -0400 Subject: [PATCH] Merging Source v1.7.2: UI changes --- .../shatteredpixeldungeon/ui/Archs.java | 84 ++-- .../ui/BuffIndicator.java | 1 + .../ui/DangerIndicator.java | 2 +- .../shatteredpixeldungeon/ui/ExitButton.java | 75 +++- .../shatteredpixeldungeon/ui/Icons.java | 14 +- .../shatteredpixeldungeon/ui/ItemSlot.java | 3 +- .../shatteredpixeldungeon/ui/StatusPane.java | 374 ++++++++++-------- 7 files changed, 347 insertions(+), 206 deletions(-) diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/ui/Archs.java b/src/com/shatteredpixel/shatteredpixeldungeon/ui/Archs.java index e0a9350a0..3f4e9ee41 100644 --- a/src/com/shatteredpixel/shatteredpixeldungeon/ui/Archs.java +++ b/src/com/shatteredpixel/shatteredpixeldungeon/ui/Archs.java @@ -24,42 +24,50 @@ import com.shatteredpixel.shatteredpixeldungeon.Assets; public class Archs extends Component { - private static final float SCROLL_SPEED = 20f; - - private SkinnedBlock arcsBg; - private SkinnedBlock arcsFg; - - public boolean reversed = false; - - @Override - protected void createChildren() { - arcsBg = new SkinnedBlock( 1, 1, Assets.ARCS_BG ); - add( arcsBg ); - - arcsFg = new SkinnedBlock( 1, 1, Assets.ARCS_FG ); - add( arcsFg ); - } - - @Override - protected void layout() { - arcsBg.size( width, height ); - arcsBg.offset( arcsBg.texture.width / 4 - (width % arcsBg.texture.width) / 2, 0 ); - - arcsFg.size( width, height ); - arcsFg.offset( arcsFg.texture.width / 4 - (width % arcsFg.texture.width) / 2, 0 ); - } - - @Override - public void update() { - - super.update(); - - float shift = Game.elapsed * SCROLL_SPEED; - if (reversed) { - shift = -shift; - } - - arcsBg.offset( 0, shift ); - arcsFg.offset( 0, shift * 2 ); - } + private static final float SCROLL_SPEED = 20f; + + private SkinnedBlock arcsBg; + private SkinnedBlock arcsFg; + + private static float offsB = 0; + private static float offsF = 0; + + public boolean reversed = false; + + @Override + protected void createChildren() { + arcsBg = new SkinnedBlock( 1, 1, Assets.ARCS_BG ); + arcsBg.offsetTo( 0, offsB ); + add( arcsBg ); + + arcsFg = new SkinnedBlock( 1, 1, Assets.ARCS_FG ); + arcsFg.offsetTo( 0, offsF ); + add( arcsFg ); + } + + @Override + protected void layout() { + arcsBg.size( width, height ); + arcsBg.offset( arcsBg.texture.width / 4 - (width % arcsBg.texture.width) / 2, 0 ); + + arcsFg.size( width, height ); + arcsFg.offset( arcsFg.texture.width / 4 - (width % arcsFg.texture.width) / 2, 0 ); + } + + @Override + public void update() { + + super.update(); + + float shift = Game.elapsed * SCROLL_SPEED; + if (reversed) { + shift = -shift; + } + + arcsBg.offset( 0, shift ); + arcsFg.offset( 0, shift * 2 ); + + offsB = arcsBg.offsetY(); + offsF = arcsFg.offsetY(); + } } diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/ui/BuffIndicator.java b/src/com/shatteredpixel/shatteredpixeldungeon/ui/BuffIndicator.java index f8bc02af5..dcc947e08 100644 --- a/src/com/shatteredpixel/shatteredpixeldungeon/ui/BuffIndicator.java +++ b/src/com/shatteredpixel/shatteredpixeldungeon/ui/BuffIndicator.java @@ -66,6 +66,7 @@ public class BuffIndicator extends Component { public static final int MAGIC_SLEEP = 30; public static final int THORNS = 31; public static final int FORESIGHT = 32; + public static final int VERTIGO = 33; public static final int SIZE = 7; diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/ui/DangerIndicator.java b/src/com/shatteredpixel/shatteredpixeldungeon/ui/DangerIndicator.java index 05a68e345..2e4d2b17f 100644 --- a/src/com/shatteredpixel/shatteredpixeldungeon/ui/DangerIndicator.java +++ b/src/com/shatteredpixel/shatteredpixeldungeon/ui/DangerIndicator.java @@ -76,7 +76,7 @@ public class DangerIndicator extends Tag { int v = Dungeon.hero.visibleEnemies(); if (v != lastNumber) { lastNumber = v; - if (visible = (lastNumber > 0)) { + if (visible = lastNumber > 0) { number.text( Integer.toString( lastNumber ) ); number.measure(); placeNumber(); diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/ui/ExitButton.java b/src/com/shatteredpixel/shatteredpixeldungeon/ui/ExitButton.java index d55a1875e..fa47a9238 100644 --- a/src/com/shatteredpixel/shatteredpixeldungeon/ui/ExitButton.java +++ b/src/com/shatteredpixel/shatteredpixeldungeon/ui/ExitButton.java @@ -1,7 +1,74 @@ +/* + * 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.ui; -/** - * Created by Evan on 18/10/2014. - */ -public class ExitButton { + import com.watabou.noosa.Game; + import com.watabou.noosa.Image; + import com.watabou.noosa.audio.Sample; + import com.watabou.noosa.ui.Button; + import com.shatteredpixel.shatteredpixeldungeon.Assets; + import com.shatteredpixel.shatteredpixeldungeon.ShatteredPixelDungeon; + import com.shatteredpixel.shatteredpixeldungeon.scenes.TitleScene; + +public class ExitButton extends Button { + + private Image image; + + public ExitButton() { + super(); + + width = image.width; + height = image.height; + } + + @Override + protected void createChildren() { + super.createChildren(); + + image = Icons.EXIT.get(); + add( image ); + } + + @Override + protected void layout() { + super.layout(); + + image.x = x; + image.y = y; + } + + @Override + protected void onTouchDown() { + image.brightness( 1.5f ); + Sample.INSTANCE.play( Assets.SND_CLICK ); + } + + @Override + protected void onTouchUp() { + image.resetColor(); + } + + @Override + protected void onClick() { + if (Game.scene() instanceof TitleScene) { + Game.instance.finish(); + } else { + ShatteredPixelDungeon.switchNoFade( TitleScene.class ); + } + } } diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/ui/Icons.java b/src/com/shatteredpixel/shatteredpixeldungeon/ui/Icons.java index 2223a9097..4da5d672e 100644 --- a/src/com/shatteredpixel/shatteredpixeldungeon/ui/Icons.java +++ b/src/com/shatteredpixel/shatteredpixeldungeon/ui/Icons.java @@ -48,7 +48,10 @@ public enum Icons { SCROLL_HOLDER, WAND_HOLSTER, CHECKED, - UNCHECKED; + UNCHECKED, + EXIT, + CHALLENGE_OFF, + CHALLENGE_ON; public Image get() { return get( this ); @@ -135,6 +138,15 @@ public enum Icons { case UNCHECKED: icon.frame( icon.texture.uvRect( 66, 12, 78, 24 ) ); break; + case EXIT: + icon.frame( icon.texture.uvRect( 98, 0, 114, 16 ) ); + break; + case CHALLENGE_OFF: + icon.frame( icon.texture.uvRect( 78, 16, 102, 40 ) ); + break; + case CHALLENGE_ON: + icon.frame( icon.texture.uvRect( 102, 16, 126, 40 ) ); + break; } return icon; } diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/ui/ItemSlot.java b/src/com/shatteredpixel/shatteredpixeldungeon/ui/ItemSlot.java index 539051fb7..65b52871e 100644 --- a/src/com/shatteredpixel/shatteredpixeldungeon/ui/ItemSlot.java +++ b/src/com/shatteredpixel/shatteredpixeldungeon/ui/ItemSlot.java @@ -47,7 +47,6 @@ public class ItemSlot extends Button { private static final String TXT_TYPICAL_STR = "%d?"; private static final String TXT_LEVEL = "%+d"; - private static final String TXT_CURSED = ""; // Special items for containers public static final Item CHEST = new Item() { @@ -164,7 +163,7 @@ public class ItemSlot extends Button { int level = item.visiblyUpgraded(); if (level != 0 || (item.cursed && item.cursedKnown)) { - bottomRight.text( item.levelKnown ? Utils.format( TXT_LEVEL, level ) : TXT_CURSED ); + bottomRight.text( item.levelKnown ? Utils.format( TXT_LEVEL, level ) : "" ); bottomRight.measure(); bottomRight.hardlight( level > 0 ? UPGRADED : DEGRADED ); } else { diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/ui/StatusPane.java b/src/com/shatteredpixel/shatteredpixeldungeon/ui/StatusPane.java index 5b6a3d290..241d0d71e 100644 --- a/src/com/shatteredpixel/shatteredpixeldungeon/ui/StatusPane.java +++ b/src/com/shatteredpixel/shatteredpixeldungeon/ui/StatusPane.java @@ -23,7 +23,9 @@ import com.watabou.noosa.Camera; import com.watabou.noosa.Image; import com.watabou.noosa.NinePatch; import com.watabou.noosa.TouchArea; +import com.watabou.noosa.audio.Sample; import com.watabou.noosa.particles.Emitter; +import com.watabou.noosa.ui.Button; import com.watabou.noosa.ui.Component; import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; @@ -33,167 +35,219 @@ import com.shatteredpixel.shatteredpixeldungeon.items.keys.IronKey; import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; import com.shatteredpixel.shatteredpixeldungeon.scenes.PixelScene; import com.shatteredpixel.shatteredpixeldungeon.sprites.HeroSprite; +import com.shatteredpixel.shatteredpixeldungeon.windows.WndGame; import com.shatteredpixel.shatteredpixeldungeon.windows.WndHero; public class StatusPane extends Component { - - private NinePatch shield; - private Image avatar; - private Emitter blood; - - private int lastTier = 0; - - private Image hp; - private Image exp; - - private int lastLvl = -1; - private int lastKeys = -1; - - private BitmapText level; - private BitmapText depth; - private BitmapText keys; - - private DangerIndicator danger; - private LootIndicator loot; - private BuffIndicator buffs; - private Compass compass; - - @Override - protected void createChildren() { - - shield = new NinePatch( Assets.STATUS, 80, 0, 30, 0 ); - add( shield ); - - add( new TouchArea( 0, 1, 30, 30 ) { - @Override - protected void onClick( Touch touch ) { - Image sprite = Dungeon.hero.sprite; - if (!sprite.isVisible()) { - Camera.main.focusOn( sprite ); - } - GameScene.show( new WndHero() ); - }; - } ); - - avatar = HeroSprite.avatar( Dungeon.hero.heroClass, lastTier ); - add( avatar ); - - blood = new Emitter(); - blood.pos( avatar ); - blood.pour( BloodParticle.FACTORY, 0.3f ); - blood.autoKill = false; - blood.on = false; - add( blood ); - - compass = new Compass( Dungeon.level.exit ); - add( compass ); - - hp = new Image( Assets.HP_BAR ); - add( hp ); - - exp = new Image( Assets.XP_BAR ); - add( exp ); - - level = new BitmapText( PixelScene.font1x ); - level.hardlight( 0xFFEBA4 ); - add( level ); - - depth = new BitmapText( Integer.toString( Dungeon.depth ), PixelScene.font1x ); - depth.hardlight( 0xCACFC2 ); - depth.measure(); - add( depth ); - - Dungeon.hero.belongings.countIronKeys(); - keys = new BitmapText( PixelScene.font1x ); - keys.hardlight( 0xCACFC2 ); - add( keys ); - - danger = new DangerIndicator(); - add( danger ); - - loot = new LootIndicator(); - add( loot ); - - buffs = new BuffIndicator( Dungeon.hero ); - add( buffs ); - } - - @Override - protected void layout() { - - height = 32; - - shield.size( width, shield.height ); - - avatar.x = PixelScene.align( camera(), shield.x + 15 - avatar.width / 2 ); - avatar.y = PixelScene.align( camera(), shield.y + 16 - avatar.height / 2 ); - - compass.x = avatar.x + avatar.width / 2 - compass.origin.x; - compass.y = avatar.y + avatar.height / 2 - compass.origin.y; - - hp.x = 30; - hp.y = 3; - - depth.x = width - 24 - depth.width(); - depth.y = 6; - - keys.y = 6; - - danger.setPos( width - danger.width(), 20 ); - - loot.setPos( width - loot.width(), danger.bottom() + 2 ); - - buffs.setPos( 32, 11 ); - } - - @Override - public void update() { - super.update(); - - float health = (float)Dungeon.hero.HP / Dungeon.hero.HT; - - if (health == 0) { - avatar.tint( 0x000000, 0.6f ); - blood.on = false; - } else if (health < 0.25f) { - avatar.tint( 0xcc0000, 0.4f ); - blood.on = true; - } else { - avatar.resetColor(); - blood.on = false; - } - - hp.scale.x = health; - exp.scale.x = (width / exp.width) * Dungeon.hero.exp / Dungeon.hero.maxExp(); - - if (Dungeon.hero.lvl != lastLvl) { - - if (lastLvl != -1) { - Emitter emitter = (Emitter)recycle( Emitter.class ); - emitter.revive(); - emitter.pos( 27, 27 ); - emitter.burst( Speck.factory( Speck.STAR ), 12 ); - } - - lastLvl = Dungeon.hero.lvl; - level.text( Integer.toString( lastLvl ) ); - level.measure(); - level.x = PixelScene.align( 27.0f - level.width() / 2 ); - level.y = PixelScene.align( 27.5f - level.baseLine() / 2 ); - } - - int k = IronKey.curDepthQunatity; - if (k != lastKeys) { - lastKeys = k; - keys.text( Integer.toString( lastKeys ) ); - keys.measure(); - keys.x = width - 8 - keys.width(); - } - - int tier = Dungeon.hero.tier(); - if (tier != lastTier) { - lastTier = tier; - avatar.copy( HeroSprite.avatar( Dungeon.hero.heroClass, tier ) ); - } - } + + private NinePatch shield; + private Image avatar; + private Emitter blood; + + private int lastTier = 0; + + private Image hp; + private Image exp; + + private int lastLvl = -1; + private int lastKeys = -1; + + private BitmapText level; + private BitmapText depth; + private BitmapText keys; + + private DangerIndicator danger; + private LootIndicator loot; + private BuffIndicator buffs; + private Compass compass; + + private MenuButton btnMenu; + + @Override + protected void createChildren() { + + shield = new NinePatch( Assets.STATUS, 80, 0, 30 + 18, 0 ); + add( shield ); + + add( new TouchArea( 0, 1, 30, 30 ) { + @Override + protected void onClick( Touch touch ) { + Image sprite = Dungeon.hero.sprite; + if (!sprite.isVisible()) { + Camera.main.focusOn( sprite ); + } + GameScene.show( new WndHero() ); + }; + } ); + + btnMenu = new MenuButton(); + add( btnMenu ); + + avatar = HeroSprite.avatar( Dungeon.hero.heroClass, lastTier ); + add( avatar ); + + blood = new Emitter(); + blood.pos( avatar ); + blood.pour( BloodParticle.FACTORY, 0.3f ); + blood.autoKill = false; + blood.on = false; + add( blood ); + + compass = new Compass( Dungeon.level.exit ); + add( compass ); + + hp = new Image( Assets.HP_BAR ); + add( hp ); + + exp = new Image( Assets.XP_BAR ); + add( exp ); + + level = new BitmapText( PixelScene.font1x ); + level.hardlight( 0xFFEBA4 ); + add( level ); + + depth = new BitmapText( Integer.toString( Dungeon.depth ), PixelScene.font1x ); + depth.hardlight( 0xCACFC2 ); + depth.measure(); + add( depth ); + + Dungeon.hero.belongings.countIronKeys(); + keys = new BitmapText( PixelScene.font1x ); + keys.hardlight( 0xCACFC2 ); + add( keys ); + + danger = new DangerIndicator(); + add( danger ); + + loot = new LootIndicator(); + add( loot ); + + buffs = new BuffIndicator( Dungeon.hero ); + add( buffs ); + } + + @Override + protected void layout() { + + height = 32; + + shield.size( width, shield.height ); + + avatar.x = PixelScene.align( camera(), shield.x + 15 - avatar.width / 2 ); + avatar.y = PixelScene.align( camera(), shield.y + 16 - avatar.height / 2 ); + + compass.x = avatar.x + avatar.width / 2 - compass.origin.x; + compass.y = avatar.y + avatar.height / 2 - compass.origin.y; + + hp.x = 30; + hp.y = 3; + + depth.x = width - 24 - depth.width() - 18; + depth.y = 6; + + keys.y = 6; + + danger.setPos( width - danger.width(), 20 ); + + loot.setPos( width - loot.width(), danger.bottom() + 2 ); + + buffs.setPos( 32, 11 ); + + btnMenu.setPos( width - btnMenu.width(), 1 ); + } + + @Override + public void update() { + super.update(); + + float health = (float)Dungeon.hero.HP / Dungeon.hero.HT; + + if (health == 0) { + avatar.tint( 0x000000, 0.6f ); + blood.on = false; + } else if (health < 0.25f) { + avatar.tint( 0xcc0000, 0.4f ); + blood.on = true; + } else { + avatar.resetColor(); + blood.on = false; + } + + hp.scale.x = health; + exp.scale.x = (width / exp.width) * Dungeon.hero.exp / Dungeon.hero.maxExp(); + + if (Dungeon.hero.lvl != lastLvl) { + + if (lastLvl != -1) { + Emitter emitter = (Emitter)recycle( Emitter.class ); + emitter.revive(); + emitter.pos( 27, 27 ); + emitter.burst( Speck.factory( Speck.STAR ), 12 ); + } + + lastLvl = Dungeon.hero.lvl; + level.text( Integer.toString( lastLvl ) ); + level.measure(); + level.x = PixelScene.align( 27.0f - level.width() / 2 ); + level.y = PixelScene.align( 27.5f - level.baseLine() / 2 ); + } + + int k = IronKey.curDepthQuantity; + if (k != lastKeys) { + lastKeys = k; + keys.text( Integer.toString( lastKeys ) ); + keys.measure(); + keys.x = width - 8 - keys.width() - 18; + } + + int tier = Dungeon.hero.tier(); + if (tier != lastTier) { + lastTier = tier; + avatar.copy( HeroSprite.avatar( Dungeon.hero.heroClass, tier ) ); + } + } + + private static class MenuButton extends Button { + + private Image image; + + public MenuButton() { + super(); + + width = image.width + 4; + height = image.height + 4; + } + + @Override + protected void createChildren() { + super.createChildren(); + + image = new Image( Assets.STATUS, 114, 3, 12, 11 ); + add( image ); + } + + @Override + protected void layout() { + super.layout(); + + image.x = x + 2; + image.y = y + 2; + } + + @Override + protected void onTouchDown() { + image.brightness( 1.5f ); + Sample.INSTANCE.play( Assets.SND_CLICK ); + } + + @Override + protected void onTouchUp() { + image.resetColor(); + } + + @Override + protected void onClick() { + GameScene.show( new WndGame() ); + } + } }