v0.6.1: Totally overhauled changes scene (no content for now)

This commit is contained in:
Evan Debenham 2017-07-28 18:33:43 -04:00 committed by Evan Debenham
parent ab639a0125
commit 4a2acc4b2b

View File

@ -23,86 +23,28 @@ package com.shatteredpixel.shatteredpixeldungeon.scenes;
import com.shatteredpixel.shatteredpixeldungeon.Chrome; import com.shatteredpixel.shatteredpixeldungeon.Chrome;
import com.shatteredpixel.shatteredpixeldungeon.ShatteredPixelDungeon; import com.shatteredpixel.shatteredpixeldungeon.ShatteredPixelDungeon;
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSprite;
import com.shatteredpixel.shatteredpixeldungeon.ui.Archs; import com.shatteredpixel.shatteredpixeldungeon.ui.Archs;
import com.shatteredpixel.shatteredpixeldungeon.ui.ExitButton; import com.shatteredpixel.shatteredpixeldungeon.ui.ExitButton;
import com.shatteredpixel.shatteredpixeldungeon.ui.RenderedTextMultiline; import com.shatteredpixel.shatteredpixeldungeon.ui.RenderedTextMultiline;
import com.shatteredpixel.shatteredpixeldungeon.ui.ScrollPane; import com.shatteredpixel.shatteredpixeldungeon.ui.ScrollPane;
import com.shatteredpixel.shatteredpixeldungeon.ui.Window; import com.shatteredpixel.shatteredpixeldungeon.ui.Window;
import com.shatteredpixel.shatteredpixeldungeon.windows.WndTitledMessage;
import com.watabou.noosa.Camera; import com.watabou.noosa.Camera;
import com.watabou.noosa.ColorBlock;
import com.watabou.noosa.Image;
import com.watabou.noosa.NinePatch; import com.watabou.noosa.NinePatch;
import com.watabou.noosa.RenderedText; import com.watabou.noosa.RenderedText;
import com.watabou.noosa.ui.Component; import com.watabou.noosa.ui.Component;
import java.util.ArrayList;
//TODO: update this class with relevant info as new versions come out. //TODO: update this class with relevant info as new versions come out.
public class ChangesScene extends PixelScene { public class ChangesScene extends PixelScene {
private static final String TXT_Update = private static final ArrayList<ChangeInfo> infos = new ArrayList<>();
"_v0.6.0b:_\n" +
"_-_ Additional bug and crash fixes\n" +
"\n"+
"_v0.6.0a:_\n" +
"_-_ Various bug and crash fixes\n" +
"_-_ Resume indicator now appears in more cases\n" +
"\n"+
"_v0.6.0:_\n" +
"New levelgen!\n" +
"_-_ Level creation algorithm completely overhauled!\n" +
"_-_ Sewers are now smaller, caves+ are now larger\n" +
"_-_ Some rooms can now be much larger than before\n" +
"_-_ Added 8 new standard room types,\n" +
"\t\t and loads of new standard room layouts\n" +
"\n"+
"Environment Balance Changes:\n"+
"_-_ Falling damage tweaked to be less random\n" +
"_-_ Reduced number of traps in later chapters\n" +
"_-_ Floor 2 entry doors only hidden for new players\n" +
"_-_ Visiting floor 21 before completing the imp quest\n" +
"\t\t no longer prevents his shop from spawning\n" +
"_-_ Light sources now grant significantly more vision\n" +
"_-_ Light from torches now lasts 20% longer\n" +
"_-_ Slightly increased visibility on floor 22+\n" +
"_-_ Floor 21 shop now sells 3 torches, up from 2\n" +
"\n"+
"Item Balance Changes:\n"+
"_-_ Meat and small rations are 50% more filling\n" +
"_-_ Pasties and blandfruit are 12.5% more filling\n" +
"_-_ Greataxe base damage increased by ~22%\n" +
"_-_ Greatshield base damage increased by ~17%\n" +
"_-_ Vampiric enchant lifesteal reduced by 20%\n" +
"_-_ Lucky enchant rebalanced:\n" +
"\t\t now deals 2x/0x damage, instead of min/max\n" +
"\t\t base chance to deal 2x increased by ~10%\n" +
"_-_ Glyph of Viscosity rebalanced:\n" +
"\t\t proc chance reduced by ~25% \n" +
"\t\t damage over time reverted from 15% to 10%\n" +
"_-_ Glyph of Entanglement root time reduced by 40%\n" +
"_-_ Glyph of Potential rebalanced:\n" +
"\t\t self-damage no longer scales with max hp\n" +
"\t\t grants more charge at higher levels\n" +
"\n"+
"_v0.5.0:_ New visual style, shadows and depth!\n" +
"\n"+
"_v0.4.3:_ Various utility features and improvements\n" +
"_v0.4.2:_ Performance and game engine improvements\n" +
"_v0.4.1:_ Balance adjustments to enemies & armor\n" +
"_v0.4.0:_ Reworked equips, enchants & curses\n" +
"\n" +
"_v0.3.5:_ Reworked Warrior & subclasses\n" +
"_v0.3.4:_ Multiple language support\n" +
"_v0.3.3:_ Support for Google Play Games\n" +
"_v0.3.2:_ Prison Rework & Balance Changes\n" +
"_v0.3.1:_ Traps reworked & UI upgrades\n" +
"_v0.3.0:_ Wands & Mage completely reworked\n" +
"\n" +
"_v0.2.4:_ Small improvements and tweaks\n" +
"_v0.2.3:_ Artifact additions & improvements\n" +
"_v0.2.2:_ Small improvements and tweaks\n" +
"_v0.2.1:_ Sewer improvements\n" +
"_v0.2.0:_ Added artifacts, reworked rings\n" +
"\n" +
"_v0.1.1:_ Added blandfruit, reworked dew vial\n" +
"_v0.1.0:_ Improvements to potions/scrolls";
@Override @Override
public void create() { public void create() {
@ -122,8 +64,6 @@ public class ChangesScene extends PixelScene {
btnExit.setPos( Camera.main.width - btnExit.width(), 0 ); btnExit.setPos( Camera.main.width - btnExit.width(), 0 );
add( btnExit ); add( btnExit );
RenderedTextMultiline text = renderMultiline(TXT_Update, 6 );
NinePatch panel = Chrome.get(Chrome.Type.TOAST); NinePatch panel = Chrome.get(Chrome.Type.TOAST);
int pw = 135 + panel.marginLeft() + panel.marginRight() - 2; int pw = 135 + panel.marginLeft() + panel.marginRight() - 2;
@ -135,17 +75,38 @@ public class ChangesScene extends PixelScene {
align( panel ); align( panel );
add( panel ); add( panel );
ScrollPane list = new ScrollPane( new Component() ); ScrollPane list = new ScrollPane( new Component() ){
@Override
public void onClick(float x, float y) {
for (ChangeInfo info : infos){
if (info.onClick( x, y )){
return;
}
}
}
};
add( list ); add( list );
Component content = list.content(); Component content = list.content();
content.clear(); content.clear();
text.maxWidth((int) panel.innerWidth()); float posY;
content.add(text); ChangeInfo changes = new ChangeInfo("Test", 12, "Lorem ipsum dolor sit amet, consectetur " +
"adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua." +
" Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip" +
" ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit" +
" esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non" +
" proident, sunt in culpa qui officia deserunt mollit anim id est laborum.");
changes.setRect(0, 0, panel.innerWidth(), 0);
changes.hardlight(Window.TITLE_COLOR);
content.add(changes);
infos.add(changes);
posY = changes.bottom();
content.setSize( panel.innerWidth(), (int)Math.ceil(text.height()) ); content.setSize( panel.innerWidth(), (int)Math.ceil(posY) );
list.setRect( list.setRect(
panel.x + panel.marginLeft(), panel.x + panel.marginLeft(),
@ -165,6 +126,147 @@ public class ChangesScene extends PixelScene {
protected void onBackPressed() { protected void onBackPressed() {
ShatteredPixelDungeon.switchNoFade(TitleScene.class); ShatteredPixelDungeon.switchNoFade(TitleScene.class);
} }
private static class ChangeInfo extends Component {
protected ColorBlock line;
private RenderedText title;
private RenderedTextMultiline text;
private ArrayList<ChangeButton> buttons = new ArrayList<>();
public ChangeInfo( String title, int titleSize, String text){
super();
line = new ColorBlock( 1, 1, 0xFF222222);
add(line);
this.title = PixelScene.renderText( title, titleSize );
add(this.title);
if (text != null && !text.equals("")){
this.text = PixelScene.renderMultiline(text, 6);
add(this.text);
}
}
public void hardlight( int color ){
title.hardlight( color );
}
public void addButton( ChangeButton button ){
buttons.add(button);
add(button);
button.setSize(16, 16);
layout();
}
public boolean onClick( float x, float y ){
for( ChangeButton button : buttons){
if (button.inside(x, y)){
button.onClick();
return true;
}
}
return false;
}
@Override
protected void layout() {
float posY = this.y;
line.size(width(), 1);
line.x = x;
line.y = posY;
posY += 2;
title.x = x + (width - title.width()) / 2f;
title.y = posY;
PixelScene.align( title );
posY += title.baseLine() + 2;
if (text != null) {
text.maxWidth((int) width());
text.setPos(x, posY);
posY += text.height();
}
float posX = 0;
float tallest = 0;
for (ChangeButton change : buttons){
if (posX + change.width() >= width()){
posX = 0;
posY += tallest;
tallest = 0;
}
//centers
if (posX == 0){
float offset = width;
for (ChangeButton b : buttons){
offset -= b.width();
if (offset <= 0){
offset += b.width();
break;
}
}
posX += offset / 2f;
}
change.setPos(posX, posY);
posX += change.width();
if (tallest < change.height()){
tallest = change.height();
}
}
posY += tallest + 2;
height = posY - this.y;
}
}
//not actually a button, but functions as one.
private static class ChangeButton extends Component {
protected Image icon;
protected String title;
protected String message;
public ChangeButton( Image icon, String title, String message){
super();
this.icon = icon;
add(this.icon);
this.title = title;
this.message = message;
layout();
}
public ChangeButton( Item item, String message ){
this( new ItemSprite(item), item.name(), message);
}
protected void onClick() {
ShatteredPixelDungeon.scene().add(new WndTitledMessage(new Image(icon), title, message));
}
@Override
protected void layout() {
super.layout();
icon.x = x + (width - icon.width) / 2f;
icon.y = y + (height - icon.height) / 2f;
PixelScene.align(icon);
}
}
} }