v2.5.0: added a new window for confirming upgrades (some stats missing)
This commit is contained in:
@@ -1019,7 +1019,7 @@ items.scrolls.scroll.no_magic=You can't read a scroll while magic immune.
|
|||||||
items.scrolls.scroll.cursed=Your cursed spellbook prevents you from invoking this scroll's magic! A scroll of remove curse might be strong enough to still work though...
|
items.scrolls.scroll.cursed=Your cursed spellbook prevents you from invoking this scroll's magic! A scroll of remove curse might be strong enough to still work though...
|
||||||
items.scrolls.scroll$placeholder.name=scroll
|
items.scrolls.scroll$placeholder.name=scroll
|
||||||
|
|
||||||
items.scrolls.inventoryscroll.warning=Do you really want to cancel this scroll usage? It will be consumed anyway.
|
items.scrolls.inventoryscroll.warning=Do you really want to cancel this scroll usage? The scroll wasn't previously identified, so it will be consumed anyway.
|
||||||
items.scrolls.inventoryscroll.yes=Yes, I'm positive
|
items.scrolls.inventoryscroll.yes=Yes, I'm positive
|
||||||
items.scrolls.inventoryscroll.no=No, I changed my mind
|
items.scrolls.inventoryscroll.no=No, I changed my mind
|
||||||
|
|
||||||
|
|||||||
@@ -346,6 +346,28 @@ windows.wndtradeitem.sell=Sell for %dg
|
|||||||
windows.wndtradeitem.sell_1=Sell 1 for %dg
|
windows.wndtradeitem.sell_1=Sell 1 for %dg
|
||||||
windows.wndtradeitem.sell_all=Sell all for %dg
|
windows.wndtradeitem.sell_all=Sell all for %dg
|
||||||
|
|
||||||
|
windows.wndupgrade.title=Upgrade an Item
|
||||||
|
windows.wndupgrade.desc=Upgrading an item permanently boosts its power:
|
||||||
|
windows.wndupgrade.unided=You don't know the properties of this unidentified item, its un-upgraded state is shown here.
|
||||||
|
windows.wndupgrade.cursed=Upgrading this item also has a 33% chance to cleanse its curse.
|
||||||
|
windows.wndupgrade.cursed_weaken=Upgrading this item will also weaken its curse, and has a 33% chance to cleanse the curse entirely.
|
||||||
|
windows.wndupgrade.curse_infusion=If the curse is cleansed, the item will no longer benefit from curse infusion!
|
||||||
|
windows.wndupgrade.enchant=Upgrading this item also has a %d%% chance to destroy its enchantment!
|
||||||
|
windows.wndupgrade.glyph=Upgrading this item also has a %d%% chance to destroy its glyph!
|
||||||
|
windows.wndupgrade.harden=Upgrading this item also has a %d%% chance to break its hardening!
|
||||||
|
windows.wndupgrade.resin=This wand has been enhanced with arcane resin, normal upgrades will override resin upgrades!
|
||||||
|
windows.wndupgrade.damage=Damage
|
||||||
|
windows.wndupgrade.blocking=Blocking
|
||||||
|
windows.wndupgrade.weight=Weight
|
||||||
|
windows.wndupgrade.durability=Durability
|
||||||
|
windows.wndupgrade.zap_damage=Zap Damage
|
||||||
|
windows.wndupgrade.corrosion_damage=Corrosion Damage
|
||||||
|
windows.wndupgrade.ward_damage=Ward Damage
|
||||||
|
windows.wndupgrade.charges=Max Charges
|
||||||
|
windows.wndupgrade.ring_boost=Ring Boost
|
||||||
|
windows.wndupgrade.upgrade=Upgrade
|
||||||
|
windows.wndupgrade.cancel=Cancel
|
||||||
|
|
||||||
windows.wndwandmaker.dust=Oh, I see you have the dust! Don't worry about the wraiths, I can deal with them. As I promised, you can choose one of my high quality wands.
|
windows.wndwandmaker.dust=Oh, I see you have the dust! Don't worry about the wraiths, I can deal with them. As I promised, you can choose one of my high quality wands.
|
||||||
windows.wndwandmaker.ember=Oh, I see you have the embers! I do hope the fire elemental wasn't too much trouble. As I promised, you can choose one of my high quality wands.
|
windows.wndwandmaker.ember=Oh, I see you have the embers! I do hope the fire elemental wasn't too much trouble. As I promised, you can choose one of my high quality wands.
|
||||||
windows.wndwandmaker.berry=Oh, I see you have the berry! I do hope the rotberry plant didn't trouble you too much. As I promised, you can choose one of my high quality wands.
|
windows.wndwandmaker.berry=Oh, I see you have the berry! I do hope the rotberry plant didn't trouble you too much. As I promised, you can choose one of my high quality wands.
|
||||||
|
|||||||
@@ -588,17 +588,17 @@ public class Armor extends EquipableItem {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public int STRReq(){
|
public int STRReq(){
|
||||||
int req = STRReq(level());
|
return STRReq(level());
|
||||||
|
}
|
||||||
|
|
||||||
|
public int STRReq(int lvl){
|
||||||
|
int req = STRReq(tier, lvl);
|
||||||
if (masteryPotionBonus){
|
if (masteryPotionBonus){
|
||||||
req -= 2;
|
req -= 2;
|
||||||
}
|
}
|
||||||
return req;
|
return req;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int STRReq(int lvl){
|
|
||||||
return STRReq(tier, lvl);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected static int STRReq(int tier, int lvl){
|
protected static int STRReq(int tier, int lvl){
|
||||||
lvl = Math.max(0, lvl);
|
lvl = Math.max(0, lvl);
|
||||||
|
|
||||||
|
|||||||
+5
-2
@@ -115,9 +115,12 @@ public abstract class InventoryScroll extends Scroll {
|
|||||||
curItem = detach(curUser.belongings.backpack);
|
curItem = detach(curUser.belongings.backpack);
|
||||||
}
|
}
|
||||||
((InventoryScroll)curItem).onItemSelected( item );
|
((InventoryScroll)curItem).onItemSelected( item );
|
||||||
((InventoryScroll)curItem).readAnimation();
|
|
||||||
|
|
||||||
Sample.INSTANCE.play( Assets.Sounds.READ );
|
//SoU still does these things, but after the upgrade window
|
||||||
|
if (!(curItem instanceof ScrollOfUpgrade)) {
|
||||||
|
((InventoryScroll) curItem).readAnimation();
|
||||||
|
Sample.INSTANCE.play(Assets.Sounds.READ);
|
||||||
|
}
|
||||||
|
|
||||||
} else if (identifiedByUse && !((Scroll)curItem).anonymous) {
|
} else if (identifiedByUse && !((Scroll)curItem).anonymous) {
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -183,7 +183,7 @@ public abstract class Scroll extends Item {
|
|||||||
|
|
||||||
public abstract void doRead();
|
public abstract void doRead();
|
||||||
|
|
||||||
protected void readAnimation() {
|
public void readAnimation() {
|
||||||
Invisibility.dispel();
|
Invisibility.dispel();
|
||||||
curUser.spend( TIME_TO_READ );
|
curUser.spend( TIME_TO_READ );
|
||||||
curUser.busy();
|
curUser.busy();
|
||||||
|
|||||||
+14
-5
@@ -36,8 +36,10 @@ import com.shatteredpixel.shatteredpixeldungeon.items.wands.Wand;
|
|||||||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.Weapon;
|
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.Weapon;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.journal.Catalog;
|
import com.shatteredpixel.shatteredpixeldungeon.journal.Catalog;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
|
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
|
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.windows.WndUpgrade;
|
||||||
|
|
||||||
public class ScrollOfUpgrade extends InventoryScroll {
|
public class ScrollOfUpgrade extends InventoryScroll {
|
||||||
|
|
||||||
@@ -58,6 +60,11 @@ public class ScrollOfUpgrade extends InventoryScroll {
|
|||||||
@Override
|
@Override
|
||||||
protected void onItemSelected( Item item ) {
|
protected void onItemSelected( Item item ) {
|
||||||
|
|
||||||
|
GameScene.show(new WndUpgrade(this, item, identifiedByUse));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public Item upgradeItem( Item item ){
|
||||||
upgrade( curUser );
|
upgrade( curUser );
|
||||||
|
|
||||||
Degrade.detach( curUser, Degrade.class );
|
Degrade.detach( curUser, Degrade.class );
|
||||||
@@ -71,7 +78,7 @@ public class ScrollOfUpgrade extends InventoryScroll {
|
|||||||
boolean hadCursedEnchant = w.hasCurseEnchant();
|
boolean hadCursedEnchant = w.hasCurseEnchant();
|
||||||
boolean hadGoodEnchant = w.hasGoodEnchant();
|
boolean hadGoodEnchant = w.hasGoodEnchant();
|
||||||
|
|
||||||
w.upgrade();
|
item = w.upgrade();
|
||||||
|
|
||||||
if (w.cursedKnown && hadCursedEnchant && !w.hasCurseEnchant()){
|
if (w.cursedKnown && hadCursedEnchant && !w.hasCurseEnchant()){
|
||||||
removeCurse( Dungeon.hero );
|
removeCurse( Dungeon.hero );
|
||||||
@@ -91,7 +98,7 @@ public class ScrollOfUpgrade extends InventoryScroll {
|
|||||||
boolean hadCursedGlyph = a.hasCurseGlyph();
|
boolean hadCursedGlyph = a.hasCurseGlyph();
|
||||||
boolean hadGoodGlyph = a.hasGoodGlyph();
|
boolean hadGoodGlyph = a.hasGoodGlyph();
|
||||||
|
|
||||||
a.upgrade();
|
item = a.upgrade();
|
||||||
|
|
||||||
if (a.cursedKnown && hadCursedGlyph && !a.hasCurseGlyph()){
|
if (a.cursedKnown && hadCursedGlyph && !a.hasCurseGlyph()){
|
||||||
removeCurse( Dungeon.hero );
|
removeCurse( Dungeon.hero );
|
||||||
@@ -107,14 +114,14 @@ public class ScrollOfUpgrade extends InventoryScroll {
|
|||||||
} else if (item instanceof Wand || item instanceof Ring) {
|
} else if (item instanceof Wand || item instanceof Ring) {
|
||||||
boolean wasCursed = item.cursed;
|
boolean wasCursed = item.cursed;
|
||||||
|
|
||||||
item.upgrade();
|
item = item.upgrade();
|
||||||
|
|
||||||
if (item.cursedKnown && wasCursed && !item.cursed){
|
if (item.cursedKnown && wasCursed && !item.cursed){
|
||||||
removeCurse( Dungeon.hero );
|
removeCurse( Dungeon.hero );
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
item.upgrade();
|
item = item.upgrade();
|
||||||
}
|
}
|
||||||
|
|
||||||
Badges.validateItemLevelAquired( item );
|
Badges.validateItemLevelAquired( item );
|
||||||
@@ -122,7 +129,9 @@ public class ScrollOfUpgrade extends InventoryScroll {
|
|||||||
Badges.validateMageUnlock();
|
Badges.validateMageUnlock();
|
||||||
|
|
||||||
Catalog.countUse(item.getClass());
|
Catalog.countUse(item.getClass());
|
||||||
Catalog.countUse(getClass());
|
Catalog.countUse(ScrollOfUpgrade.class);
|
||||||
|
|
||||||
|
return item;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void upgrade( Hero hero ) {
|
public static void upgrade( Hero hero ) {
|
||||||
|
|||||||
+8
-5
@@ -84,16 +84,19 @@ public abstract class InventorySpell extends Spell {
|
|||||||
curItem = detach(curUser.belongings.backpack);
|
curItem = detach(curUser.belongings.backpack);
|
||||||
|
|
||||||
((InventorySpell)curItem).onItemSelected( item );
|
((InventorySpell)curItem).onItemSelected( item );
|
||||||
curUser.spend( 1f );
|
//Magical Infusion still does these things, but after the upgrade window
|
||||||
|
if (!(curItem instanceof MagicalInfusion)) {
|
||||||
|
curUser.spend(1f);
|
||||||
curUser.busy();
|
curUser.busy();
|
||||||
(curUser.sprite).operate( curUser.pos );
|
(curUser.sprite).operate(curUser.pos);
|
||||||
|
|
||||||
Sample.INSTANCE.play( Assets.Sounds.READ );
|
Sample.INSTANCE.play(Assets.Sounds.READ);
|
||||||
Invisibility.dispel();
|
Invisibility.dispel();
|
||||||
|
|
||||||
Catalog.countUse(curItem.getClass());
|
Catalog.countUse(curItem.getClass());
|
||||||
if (Random.Float() < ((Spell)curItem).talentChance){
|
if (Random.Float() < ((Spell) curItem).talentChance) {
|
||||||
Talent.onScrollUsed(curUser, curUser.pos, ((Spell)curItem).talentFactor);
|
Talent.onScrollUsed(curUser, curUser.pos, ((Spell) curItem).talentFactor);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+31
-3
@@ -21,9 +21,12 @@
|
|||||||
|
|
||||||
package com.shatteredpixel.shatteredpixeldungeon.items.spells;
|
package com.shatteredpixel.shatteredpixeldungeon.items.spells;
|
||||||
|
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.Assets;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.Badges;
|
import com.shatteredpixel.shatteredpixeldungeon.Badges;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.Statistics;
|
import com.shatteredpixel.shatteredpixeldungeon.Statistics;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Degrade;
|
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Degrade;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Invisibility;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Talent;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
|
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.armor.Armor;
|
import com.shatteredpixel.shatteredpixeldungeon.items.armor.Armor;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfUpgrade;
|
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfUpgrade;
|
||||||
@@ -31,8 +34,12 @@ import com.shatteredpixel.shatteredpixeldungeon.items.wands.Wand;
|
|||||||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.Weapon;
|
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.Weapon;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.journal.Catalog;
|
import com.shatteredpixel.shatteredpixeldungeon.journal.Catalog;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
|
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
|
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.windows.WndUpgrade;
|
||||||
|
import com.watabou.noosa.audio.Sample;
|
||||||
|
import com.watabou.utils.Random;
|
||||||
|
|
||||||
public class MagicalInfusion extends InventorySpell {
|
public class MagicalInfusion extends InventorySpell {
|
||||||
|
|
||||||
@@ -52,18 +59,37 @@ public class MagicalInfusion extends InventorySpell {
|
|||||||
@Override
|
@Override
|
||||||
protected void onItemSelected( Item item ) {
|
protected void onItemSelected( Item item ) {
|
||||||
|
|
||||||
|
GameScene.show(new WndUpgrade(this, item, false));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void useAnimation(){
|
||||||
|
curUser.spend(1f);
|
||||||
|
curUser.busy();
|
||||||
|
(curUser.sprite).operate(curUser.pos);
|
||||||
|
|
||||||
|
Sample.INSTANCE.play(Assets.Sounds.READ);
|
||||||
|
Invisibility.dispel();
|
||||||
|
|
||||||
|
Catalog.countUse(curItem.getClass());
|
||||||
|
if (Random.Float() < ((Spell) curItem).talentChance) {
|
||||||
|
Talent.onScrollUsed(curUser, curUser.pos, ((Spell) curItem).talentFactor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public Item upgradeItem( Item item ){
|
||||||
ScrollOfUpgrade.upgrade(curUser);
|
ScrollOfUpgrade.upgrade(curUser);
|
||||||
|
|
||||||
Degrade.detach( curUser, Degrade.class );
|
Degrade.detach( curUser, Degrade.class );
|
||||||
|
|
||||||
if (item instanceof Weapon && ((Weapon) item).enchantment != null) {
|
if (item instanceof Weapon && ((Weapon) item).enchantment != null) {
|
||||||
((Weapon) item).upgrade(true);
|
item = ((Weapon) item).upgrade(true);
|
||||||
} else if (item instanceof Armor && ((Armor) item).glyph != null) {
|
} else if (item instanceof Armor && ((Armor) item).glyph != null) {
|
||||||
((Armor) item).upgrade(true);
|
item = ((Armor) item).upgrade(true);
|
||||||
} else {
|
} else {
|
||||||
boolean wasCursed = item.cursed;
|
boolean wasCursed = item.cursed;
|
||||||
boolean wasCurseInfused = item instanceof Wand && ((Wand) item).curseInfusionBonus;
|
boolean wasCurseInfused = item instanceof Wand && ((Wand) item).curseInfusionBonus;
|
||||||
item.upgrade();
|
item = item.upgrade();
|
||||||
if (wasCursed) item.cursed = true;
|
if (wasCursed) item.cursed = true;
|
||||||
if (wasCurseInfused) ((Wand) item).curseInfusionBonus = true;
|
if (wasCurseInfused) ((Wand) item).curseInfusionBonus = true;
|
||||||
}
|
}
|
||||||
@@ -75,6 +101,8 @@ public class MagicalInfusion extends InventorySpell {
|
|||||||
Catalog.countUse(getClass());
|
Catalog.countUse(getClass());
|
||||||
|
|
||||||
Statistics.upgradesUsed++;
|
Statistics.upgradesUsed++;
|
||||||
|
|
||||||
|
return item;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -377,7 +377,7 @@ public abstract class Wand extends Item {
|
|||||||
curCharges = Math.min( curCharges, maxCharges );
|
curCharges = Math.min( curCharges, maxCharges );
|
||||||
}
|
}
|
||||||
|
|
||||||
protected int initialCharges() {
|
public int initialCharges() {
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -88,7 +88,7 @@ public class WandOfMagicMissile extends DamageWand {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected int initialCharges() {
|
public int initialCharges() {
|
||||||
return 3;
|
return 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
-5
@@ -261,11 +261,7 @@ abstract public class Weapon extends KindOfWeapon {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public int STRReq(){
|
public int STRReq(){
|
||||||
int req = STRReq(level());
|
return STRReq(level());
|
||||||
if (masteryPotionBonus){
|
|
||||||
req -= 2;
|
|
||||||
}
|
|
||||||
return req;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public abstract int STRReq(int lvl);
|
public abstract int STRReq(int lvl);
|
||||||
|
|||||||
+5
-1
@@ -52,7 +52,11 @@ public class Greataxe extends MeleeWeapon {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int STRReq(int lvl) {
|
public int STRReq(int lvl) {
|
||||||
return STRReq(tier+1, lvl); //20 base strength req, up from 18
|
int req = STRReq(tier+1, lvl); //20 base strength req, up from 18
|
||||||
|
if (masteryPotionBonus){
|
||||||
|
req -= 2;
|
||||||
|
}
|
||||||
|
return req;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
+10
-1
@@ -42,7 +42,16 @@ public class Greatshield extends MeleeWeapon {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int defenseFactor( Char owner ) {
|
public int defenseFactor( Char owner ) {
|
||||||
return 6+2*buffedLvl(); //6 extra defence, plus 2 per level
|
return DRMax();
|
||||||
|
}
|
||||||
|
|
||||||
|
public int DRMax(){
|
||||||
|
return DRMax(buffedLvl());
|
||||||
|
}
|
||||||
|
|
||||||
|
//6 extra defence, plus 2 per level
|
||||||
|
public int DRMax(int lvl){
|
||||||
|
return 6 + 2*lvl;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String statsInfo(){
|
public String statsInfo(){
|
||||||
|
|||||||
+5
-1
@@ -263,7 +263,11 @@ public class MeleeWeapon extends Weapon {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public int STRReq(int lvl){
|
public int STRReq(int lvl){
|
||||||
return STRReq(tier, lvl);
|
int req = STRReq(tier, lvl);
|
||||||
|
if (masteryPotionBonus){
|
||||||
|
req -= 2;
|
||||||
|
}
|
||||||
|
return req;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean evaluatingTwinUpgrades = false;
|
private static boolean evaluatingTwinUpgrades = false;
|
||||||
|
|||||||
+10
-1
@@ -51,7 +51,16 @@ public class RoundShield extends MeleeWeapon {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int defenseFactor( Char owner ) {
|
public int defenseFactor( Char owner ) {
|
||||||
return 4+buffedLvl(); //4 extra defence, plus 1 per level
|
return DRMax();
|
||||||
|
}
|
||||||
|
|
||||||
|
public int DRMax(){
|
||||||
|
return DRMax(buffedLvl());
|
||||||
|
}
|
||||||
|
|
||||||
|
//4 extra defence, plus 1 per level
|
||||||
|
public int DRMax(int lvl){
|
||||||
|
return 4 + lvl;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String statsInfo(){
|
public String statsInfo(){
|
||||||
|
|||||||
@@ -0,0 +1,452 @@
|
|||||||
|
/*
|
||||||
|
* Pixel Dungeon
|
||||||
|
* Copyright (C) 2012-2015 Oleg Dolya
|
||||||
|
*
|
||||||
|
* Shattered Pixel Dungeon
|
||||||
|
* Copyright (C) 2014-2024 Evan Debenham
|
||||||
|
*
|
||||||
|
* 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 <http://www.gnu.org/licenses/>
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.shatteredpixel.shatteredpixeldungeon.windows;
|
||||||
|
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.Assets;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.items.armor.Armor;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.items.rings.Ring;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.InventoryScroll;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfUpgrade;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.items.spells.MagicalInfusion;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.items.wands.DamageWand;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.items.wands.Wand;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfCorrosion;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfWarding;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.Weapon;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.Greatshield;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.MagesStaff;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.RoundShield;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.MissileWeapon;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.messages.Languages;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.scenes.PixelScene;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSprite;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.ui.ItemSlot;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.ui.RedButton;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.ui.RenderedTextBlock;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.ui.Window;
|
||||||
|
import com.watabou.noosa.BitmapText;
|
||||||
|
import com.watabou.noosa.ColorBlock;
|
||||||
|
import com.watabou.noosa.audio.Sample;
|
||||||
|
import com.watabou.utils.Reflection;
|
||||||
|
|
||||||
|
public class WndUpgrade extends Window {
|
||||||
|
|
||||||
|
private static final int WIDTH = 120;
|
||||||
|
|
||||||
|
private static final float COL_1 = WIDTH/4f;
|
||||||
|
private static final float COL_2 = 5*WIDTH/8f;
|
||||||
|
private static final float COL_3 = 7*WIDTH/8f;
|
||||||
|
|
||||||
|
protected static final int GAP = 2;
|
||||||
|
|
||||||
|
private boolean force;
|
||||||
|
|
||||||
|
private RedButton btnUpgrade;
|
||||||
|
private RedButton btnCancel;
|
||||||
|
|
||||||
|
public WndUpgrade( Item upgrader, Item toUpgrade, boolean force){
|
||||||
|
|
||||||
|
this.force = force;
|
||||||
|
|
||||||
|
IconTitle title = new IconTitle( new ItemSprite(upgrader), Messages.get(this, "title") );
|
||||||
|
|
||||||
|
title.setRect(0, 0, WIDTH, 0);
|
||||||
|
add(title);
|
||||||
|
|
||||||
|
RenderedTextBlock message = PixelScene.renderTextBlock( 6 );
|
||||||
|
message.text( Messages.get(this, "desc"), WIDTH);
|
||||||
|
message.setPos(0, title.bottom()+GAP);
|
||||||
|
add(message);
|
||||||
|
|
||||||
|
// *** Computing current and next level to display ***
|
||||||
|
|
||||||
|
int levelFrom = toUpgrade.isIdentified() ? toUpgrade.level() : 0;
|
||||||
|
int levelTo = levelFrom + 1;
|
||||||
|
|
||||||
|
if (toUpgrade instanceof Wand && ((Wand) toUpgrade).resinBonus > 0){
|
||||||
|
levelTo--;
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean curseInfused = (toUpgrade instanceof Weapon && ((Weapon) toUpgrade).curseInfusionBonus)
|
||||||
|
|| (toUpgrade instanceof Armor && ((Armor) toUpgrade).curseInfusionBonus)
|
||||||
|
|| (toUpgrade instanceof Wand && ((Wand) toUpgrade).curseInfusionBonus);
|
||||||
|
|
||||||
|
if (curseInfused){
|
||||||
|
if (toUpgrade.trueLevel()/6 < (toUpgrade.trueLevel()+1)/6){
|
||||||
|
//new level bracket for curse infusion bonus
|
||||||
|
levelTo++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// *** Sprites, showing item at current level and with +1 ***
|
||||||
|
|
||||||
|
ItemSprite i1 = new ItemSprite();
|
||||||
|
add(i1);
|
||||||
|
i1.view(toUpgrade);
|
||||||
|
i1.x = COL_2 - i1.width()/2f;
|
||||||
|
i1.y = message.bottom() + GAP + (16-i1.height())/2f;
|
||||||
|
PixelScene.align(i1);
|
||||||
|
add(i1);
|
||||||
|
|
||||||
|
ItemSprite i2 = new ItemSprite();
|
||||||
|
add(i2);
|
||||||
|
i2.view(toUpgrade);
|
||||||
|
i2.x = COL_3 - i2.width()/2f;
|
||||||
|
i2.y = i1.y;
|
||||||
|
PixelScene.align(i2);
|
||||||
|
add(i2);
|
||||||
|
|
||||||
|
BitmapText t1 = new BitmapText(PixelScene.pixelFont);
|
||||||
|
BitmapText t2 = new BitmapText(PixelScene.pixelFont);
|
||||||
|
if (toUpgrade.isIdentified()){
|
||||||
|
if (levelFrom > 0){
|
||||||
|
t1.text("+" + levelFrom);
|
||||||
|
} else {
|
||||||
|
t1.text("");
|
||||||
|
}
|
||||||
|
t1.hardlight(ItemSlot.UPGRADED);
|
||||||
|
t2.text("+" + levelTo);
|
||||||
|
t2.hardlight(ItemSlot.UPGRADED);
|
||||||
|
|
||||||
|
if (curseInfused){
|
||||||
|
t1.hardlight(ItemSlot.CURSE_INFUSED);
|
||||||
|
t2.hardlight(ItemSlot.CURSE_INFUSED);
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
t1.text("?");
|
||||||
|
t1.hardlight(0.6f, 0.3f, 0.6f);
|
||||||
|
t2.text("+1?");
|
||||||
|
t2.hardlight(0.6f, 0.3f, 0.6f);
|
||||||
|
}
|
||||||
|
t1.measure();
|
||||||
|
t1.x = COL_2 + 8 - t1.width();
|
||||||
|
t1.y = message.bottom() + GAP + 16 - t1.baseLine();
|
||||||
|
add(t1);
|
||||||
|
|
||||||
|
t2.measure();
|
||||||
|
t2.x = COL_3 + 8 - t2.width();
|
||||||
|
t2.y = message.bottom() + GAP + 16 - t2.baseLine();
|
||||||
|
add(t2);
|
||||||
|
|
||||||
|
float bottom = i1.y + 16 + GAP;
|
||||||
|
|
||||||
|
final String LINE = Messages.lang() == Languages.CHINESE ? "~" : "-";
|
||||||
|
|
||||||
|
// *** Various lines for stats, highlighting differences between current level and +1 ***
|
||||||
|
|
||||||
|
//physical damage
|
||||||
|
if (toUpgrade instanceof Weapon){
|
||||||
|
bottom = fillFields(Messages.get(this, "damage"),
|
||||||
|
((Weapon) toUpgrade).min(levelFrom) + LINE + ((Weapon) toUpgrade).max(levelFrom),
|
||||||
|
((Weapon) toUpgrade).min(levelTo) + LINE + ((Weapon) toUpgrade).max(levelTo),
|
||||||
|
bottom);
|
||||||
|
}
|
||||||
|
|
||||||
|
//blocking (armor and shields)
|
||||||
|
if (toUpgrade instanceof Armor){
|
||||||
|
bottom = fillFields(Messages.get(this, "blocking"),
|
||||||
|
((Armor) toUpgrade).DRMin(levelFrom) + LINE + ((Armor) toUpgrade).DRMax(levelFrom),
|
||||||
|
((Armor) toUpgrade).DRMin(levelTo) + LINE + ((Armor) toUpgrade).DRMax(levelTo),
|
||||||
|
bottom);
|
||||||
|
} else if (toUpgrade instanceof RoundShield){
|
||||||
|
bottom = fillFields(Messages.get(this, "blocking"),
|
||||||
|
0 + LINE + ((RoundShield) toUpgrade).DRMax(levelFrom),
|
||||||
|
0 + LINE + ((RoundShield) toUpgrade).DRMax(levelTo),
|
||||||
|
bottom);
|
||||||
|
} else if (toUpgrade instanceof Greatshield){
|
||||||
|
bottom = fillFields(Messages.get(this, "blocking"),
|
||||||
|
0 + LINE + ((Greatshield) toUpgrade).DRMax(levelFrom),
|
||||||
|
0 + LINE + ((Greatshield) toUpgrade).DRMax(levelTo),
|
||||||
|
bottom);
|
||||||
|
}
|
||||||
|
|
||||||
|
//weight (i.e. strength requirement)
|
||||||
|
if (toUpgrade instanceof Weapon){
|
||||||
|
bottom = fillFields(Messages.get(this, "weight"),
|
||||||
|
Integer.toString((((Weapon) toUpgrade).STRReq(levelFrom))),
|
||||||
|
Integer.toString((((Weapon) toUpgrade).STRReq(levelTo))),
|
||||||
|
bottom);
|
||||||
|
} else if (toUpgrade instanceof Armor) {
|
||||||
|
bottom = fillFields(Messages.get(this, "weight"),
|
||||||
|
Integer.toString((((Armor) toUpgrade).STRReq(levelFrom))),
|
||||||
|
Integer.toString((((Armor) toUpgrade).STRReq(levelTo))),
|
||||||
|
bottom);
|
||||||
|
}
|
||||||
|
|
||||||
|
//durability
|
||||||
|
if (toUpgrade instanceof MissileWeapon){
|
||||||
|
//missile weapons are always IDed currently, so we always use true level
|
||||||
|
int uses1 = (int)Math.ceil(100f/((MissileWeapon) toUpgrade).durabilityPerUse());
|
||||||
|
int uses2 = (int)Math.ceil(300f/((MissileWeapon) toUpgrade).durabilityPerUse());
|
||||||
|
bottom = fillFields(Messages.get(this, "durability"),
|
||||||
|
uses1 >= 100 ? "∞" : Integer.toString(uses1),
|
||||||
|
uses2 >= 100 ? "∞" : Integer.toString(uses2),
|
||||||
|
bottom);
|
||||||
|
}
|
||||||
|
|
||||||
|
//we use a separate reference for wand properties so that mage's staff can include them
|
||||||
|
Item wand = toUpgrade;
|
||||||
|
if (toUpgrade instanceof MagesStaff && ((MagesStaff) toUpgrade).wandClass() != null){
|
||||||
|
wand = Reflection.newInstance(((MagesStaff) toUpgrade).wandClass());
|
||||||
|
}
|
||||||
|
|
||||||
|
//direct damage and damage-adjacent effects
|
||||||
|
if (wand instanceof DamageWand) {
|
||||||
|
bottom = fillFields(Messages.get(this, "zap_damage"),
|
||||||
|
((DamageWand) wand).min(levelFrom) + LINE + ((DamageWand) wand).max(levelFrom),
|
||||||
|
((DamageWand) wand).min(levelTo) + LINE + ((DamageWand) wand).max(levelTo),
|
||||||
|
bottom);
|
||||||
|
} else if (wand instanceof WandOfCorrosion){
|
||||||
|
//TODO externalize!
|
||||||
|
bottom = fillFields(Messages.get(this, "corrosion_damage"),
|
||||||
|
Integer.toString(2+levelFrom),
|
||||||
|
Integer.toString(2+levelTo),
|
||||||
|
bottom);
|
||||||
|
} else if (wand instanceof WandOfWarding){
|
||||||
|
//TODO externalize!
|
||||||
|
bottom = fillFields(Messages.get(this, "ward_damage"),
|
||||||
|
(2 + levelFrom) + LINE + (8 + 4*levelFrom),
|
||||||
|
(2 + levelTo) + LINE + (8 + 4*levelTo),
|
||||||
|
bottom);
|
||||||
|
}
|
||||||
|
|
||||||
|
//TODO various extra wand effects
|
||||||
|
//disintegration range?
|
||||||
|
//corrosion AOE?
|
||||||
|
//blast wave knockback?
|
||||||
|
//rock guardian powers?
|
||||||
|
//frost chill duration?
|
||||||
|
//prismatic light blinding/lighting?
|
||||||
|
//warding max energy
|
||||||
|
//transfusion stats? and also de-emphasize damage?
|
||||||
|
//corruption power?
|
||||||
|
//regrowth power?
|
||||||
|
|
||||||
|
//max charges
|
||||||
|
if (wand instanceof Wand){
|
||||||
|
int chargeboost = levelFrom + (toUpgrade instanceof MagesStaff ? 1 : 0);
|
||||||
|
bottom = fillFields(Messages.get(this, "charges"),
|
||||||
|
Integer.toString(Math.min(10, ((Wand) wand).initialCharges() + chargeboost)),
|
||||||
|
Integer.toString(Math.min(10, ((Wand) wand).initialCharges() + chargeboost + 1)),
|
||||||
|
bottom);
|
||||||
|
}
|
||||||
|
|
||||||
|
//TODO ring stats
|
||||||
|
if (toUpgrade instanceof Ring){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//visual separators for each column
|
||||||
|
ColorBlock sep = new ColorBlock(1, 1, 0xFF222222);
|
||||||
|
sep.size(1, bottom - message.bottom());
|
||||||
|
sep.x = WIDTH/2f;
|
||||||
|
sep.y = message.bottom();
|
||||||
|
add(sep);
|
||||||
|
|
||||||
|
sep = new ColorBlock(1, 1, 0xFF222222);
|
||||||
|
sep.size(1, bottom - message.bottom());
|
||||||
|
sep.x = 3*WIDTH/4f;
|
||||||
|
sep.y = message.bottom();
|
||||||
|
add(sep);
|
||||||
|
|
||||||
|
// *** Various extra info texts that can appear underneath stats ***
|
||||||
|
|
||||||
|
//warning relating to identification
|
||||||
|
if (!toUpgrade.isIdentified()){
|
||||||
|
bottom = addMessage(Messages.get(this, "unided"), CharSprite.WARNING, bottom);
|
||||||
|
}
|
||||||
|
|
||||||
|
// various messages relating to enchantments and curses
|
||||||
|
if (!(upgrader instanceof MagicalInfusion)) {
|
||||||
|
|
||||||
|
if ((toUpgrade instanceof Weapon && ((Weapon) toUpgrade).hasGoodEnchant())
|
||||||
|
|| (toUpgrade instanceof Armor && ((Armor) toUpgrade).hasGoodGlyph())) {
|
||||||
|
int lossChance;
|
||||||
|
if ((toUpgrade instanceof Weapon && ((Weapon) toUpgrade).enchantHardened)
|
||||||
|
|| (toUpgrade instanceof Armor && ((Armor) toUpgrade).glyphHardened)) {
|
||||||
|
lossChance = Math.min(100, 10 * (int) Math.pow(2, levelFrom - 6));
|
||||||
|
} else {
|
||||||
|
lossChance = Math.min(100, 10 * (int) Math.pow(2, levelFrom - 4));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (lossChance >= 10) {
|
||||||
|
String warn;
|
||||||
|
if (toUpgrade instanceof Weapon) {
|
||||||
|
if (((Weapon) toUpgrade).enchantHardened) {
|
||||||
|
warn = Messages.get(this, "harden", lossChance);
|
||||||
|
} else {
|
||||||
|
warn = Messages.get(this, "enchant", lossChance);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (((Armor) toUpgrade).glyphHardened) {
|
||||||
|
warn = Messages.get(this, "harden", lossChance);
|
||||||
|
} else {
|
||||||
|
warn = Messages.get(this, "glyph", lossChance);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
bottom = addMessage(warn, CharSprite.WARNING, bottom);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((toUpgrade.cursed
|
||||||
|
|| (toUpgrade instanceof Weapon && ((Weapon) toUpgrade).hasCurseEnchant())
|
||||||
|
|| (toUpgrade instanceof Armor && ((Armor) toUpgrade).hasCurseGlyph()))
|
||||||
|
&& toUpgrade.cursedKnown) {
|
||||||
|
|
||||||
|
if (toUpgrade.cursed && (toUpgrade instanceof Weapon && ((Weapon) toUpgrade).hasCurseEnchant())
|
||||||
|
|| (toUpgrade instanceof Armor && ((Armor) toUpgrade).hasCurseGlyph())){
|
||||||
|
bottom = addMessage(Messages.get(this, "cursed_weaken"), CharSprite.POSITIVE, bottom);
|
||||||
|
} else {
|
||||||
|
bottom = addMessage(Messages.get(this, "cursed"), CharSprite.POSITIVE, bottom);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (curseInfused) {
|
||||||
|
bottom = addMessage(Messages.get(this, "curse_infusion"), CharSprite.WARNING, bottom);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//warning relating to arcane resin
|
||||||
|
if (toUpgrade instanceof Wand && ((Wand) toUpgrade).resinBonus > 0){
|
||||||
|
bottom = addMessage(Messages.get(this, "resin"), CharSprite.WARNING, bottom);
|
||||||
|
}
|
||||||
|
|
||||||
|
// *** Buttons for confirming/cancelling ***
|
||||||
|
|
||||||
|
btnUpgrade = new RedButton(Messages.get(this, "upgrade")){
|
||||||
|
@Override
|
||||||
|
protected void onClick() {
|
||||||
|
super.onClick();
|
||||||
|
|
||||||
|
ScrollOfUpgrade.upgrade(Dungeon.hero);
|
||||||
|
|
||||||
|
Item upgraded = toUpgrade;
|
||||||
|
if (upgrader instanceof ScrollOfUpgrade){
|
||||||
|
((ScrollOfUpgrade) upgrader).readAnimation();
|
||||||
|
upgraded = ((ScrollOfUpgrade) upgrader).upgradeItem(toUpgrade);
|
||||||
|
Sample.INSTANCE.play( Assets.Sounds.READ );
|
||||||
|
} else if (upgrader instanceof MagicalInfusion){
|
||||||
|
((MagicalInfusion) upgrader).useAnimation();
|
||||||
|
upgraded = ((MagicalInfusion) upgrader).upgradeItem(toUpgrade);
|
||||||
|
}
|
||||||
|
|
||||||
|
Item moreUpgradeItem = Dungeon.hero.belongings.getItem(upgrader.getClass());
|
||||||
|
|
||||||
|
hide();
|
||||||
|
|
||||||
|
if (moreUpgradeItem != null && toUpgrade.isIdentified()){
|
||||||
|
moreUpgradeItem = moreUpgradeItem.detach(Dungeon.hero.belongings.backpack);
|
||||||
|
GameScene.show(new WndUpgrade(moreUpgradeItem, upgraded, false));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
btnUpgrade.setRect(0, bottom+2*GAP, WIDTH/2f, 16);
|
||||||
|
add(btnUpgrade);
|
||||||
|
|
||||||
|
btnCancel = new RedButton(Messages.get(this, "cancel")){
|
||||||
|
@Override
|
||||||
|
protected void onClick() {
|
||||||
|
super.onClick();
|
||||||
|
if (!force) {
|
||||||
|
upgrader.collect();
|
||||||
|
hide();
|
||||||
|
} else {
|
||||||
|
GameScene.show( new WndOptions(new ItemSprite(upgrader),
|
||||||
|
Messages.titleCase(upgrader.name()),
|
||||||
|
Messages.get(InventoryScroll.class, "warning"),
|
||||||
|
Messages.get(InventoryScroll.class, "yes"),
|
||||||
|
Messages.get(InventoryScroll.class, "no") ) {
|
||||||
|
@Override
|
||||||
|
protected void onSelect( int index ) {
|
||||||
|
if (index == 0){
|
||||||
|
WndUpgrade.this.hide();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public void onBackPressed() {}
|
||||||
|
} );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
btnCancel.setRect(btnUpgrade.right()+1, bottom+2*GAP, WIDTH/2f, 16);
|
||||||
|
add(btnCancel);
|
||||||
|
|
||||||
|
btnUpgrade.enable(Dungeon.hero.ready);
|
||||||
|
|
||||||
|
bottom = (int)btnCancel.bottom();
|
||||||
|
|
||||||
|
resize(WIDTH, (int)bottom);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public synchronized void update() {
|
||||||
|
super.update();
|
||||||
|
if (!btnUpgrade.active && Dungeon.hero.ready){
|
||||||
|
btnUpgrade.enable(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onBackPressed() {
|
||||||
|
//don't let this window be closed if
|
||||||
|
if (!force) super.onBackPressed();
|
||||||
|
}
|
||||||
|
|
||||||
|
private float fillFields(String title, String msg1, String msg2, float bottom){
|
||||||
|
|
||||||
|
RenderedTextBlock ttl = PixelScene.renderTextBlock( title , 6);
|
||||||
|
ttl.setPos(COL_1 - ttl.width() / 2f, bottom + GAP);
|
||||||
|
PixelScene.align(ttl);
|
||||||
|
add(ttl);
|
||||||
|
|
||||||
|
RenderedTextBlock m1 = PixelScene.renderTextBlock(msg1, 6);
|
||||||
|
m1.setPos(COL_2 - m1.width() / 2f, ttl.top());
|
||||||
|
PixelScene.align(m1);
|
||||||
|
add(m1);
|
||||||
|
|
||||||
|
RenderedTextBlock m2 = PixelScene.renderTextBlock(msg2, 6);
|
||||||
|
m2.setPos(COL_3 - m2.width() / 2f, ttl.top());
|
||||||
|
PixelScene.align(m2);
|
||||||
|
add(m2);
|
||||||
|
|
||||||
|
return m2.bottom() + GAP + 1;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private float addMessage(String text, int color, float bottom){
|
||||||
|
RenderedTextBlock message = PixelScene.renderTextBlock(6);
|
||||||
|
message.text(text, WIDTH);
|
||||||
|
message.setPos(0, bottom + GAP);
|
||||||
|
message.hardlight(color);
|
||||||
|
add(message);
|
||||||
|
|
||||||
|
return message.bottom();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user