mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-17 03:08:02 +00:00
Implement quest preferences screen
This commit is contained in:
@@ -213,12 +213,12 @@ public class QuestMenu extends FPopupMenu implements IVQuestStats {
|
||||
Forge.openScreen(new LoadQuestScreen());
|
||||
}
|
||||
}));
|
||||
/*addItem(new FMenuItem("Preferences", FSkinImage.SETTINGS, new FEventHandler() {
|
||||
addItem(new FMenuItem("Preferences", FSkinImage.SETTINGS, new FEventHandler() {
|
||||
@Override
|
||||
public void handleEvent(FEvent e) {
|
||||
Forge.openScreen(prefsScreen);
|
||||
}
|
||||
}));*/
|
||||
}));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -1,15 +1,187 @@
|
||||
package forge.screens.quest;
|
||||
|
||||
import forge.assets.FImage;
|
||||
import forge.assets.FSkinFont;
|
||||
import forge.assets.FSkinImage;
|
||||
import forge.model.FModel;
|
||||
import forge.quest.data.QuestPreferences.QPref;
|
||||
import forge.screens.FScreen;
|
||||
import forge.toolbox.FContainer;
|
||||
import forge.toolbox.FDisplayObject;
|
||||
import forge.toolbox.FEvent;
|
||||
import forge.toolbox.FEvent.FEventHandler;
|
||||
import forge.toolbox.FLabel;
|
||||
import forge.toolbox.FNumericTextField;
|
||||
import forge.toolbox.FScrollPane;
|
||||
import forge.toolbox.FTextField;
|
||||
import forge.util.Utils;
|
||||
|
||||
public class QuestPrefsScreen extends FScreen {
|
||||
private static final float PADDING = Utils.scaleMin(5);
|
||||
|
||||
private enum PrefsGroup {
|
||||
REWARDS,
|
||||
BOOSTER,
|
||||
SHOP,
|
||||
DIFFICULTY_ALL,
|
||||
DIFFICULTY_EASY,
|
||||
DIFFICULTY_MEDIUM,
|
||||
DIFFICULTY_HARD,
|
||||
DIFFICULTY_EXPERT
|
||||
}
|
||||
|
||||
private FScrollPane scroller = add(new FScrollPane() {
|
||||
@Override
|
||||
protected ScrollBounds layoutAndGetScrollBounds(float visibleWidth, float visibleHeight) {
|
||||
float x = PADDING;
|
||||
float y = PADDING;
|
||||
float w = visibleWidth - 2 * PADDING;
|
||||
float fieldHeight = FTextField.getDefaultHeight();
|
||||
float dy = fieldHeight + PADDING;
|
||||
|
||||
for (FDisplayObject child : getChildren()) {
|
||||
if (child.isVisible()) {
|
||||
child.setBounds(x, y, w, fieldHeight);
|
||||
y += dy;
|
||||
}
|
||||
}
|
||||
|
||||
return new ScrollBounds(visibleWidth, y);
|
||||
}
|
||||
});
|
||||
|
||||
public QuestPrefsScreen() {
|
||||
super("Quest Preferences", QuestMenu.getMenu());
|
||||
|
||||
//Rewards
|
||||
scroller.add(new PrefsHeader("Rewards", FSkinImage.QUEST_COIN, PrefsGroup.REWARDS));
|
||||
scroller.add(new PrefsOption("Base winnings", QPref.REWARDS_BASE, PrefsGroup.REWARDS));
|
||||
scroller.add(new PrefsOption("No losses", QPref.REWARDS_UNDEFEATED, PrefsGroup.REWARDS));
|
||||
scroller.add(new PrefsOption("Poison win", QPref.REWARDS_POISON, PrefsGroup.REWARDS));
|
||||
scroller.add(new PrefsOption("Milling win", QPref.REWARDS_MILLED, PrefsGroup.REWARDS));
|
||||
scroller.add(new PrefsOption("Mulligan 0 win", QPref.REWARDS_MULLIGAN0, PrefsGroup.REWARDS));
|
||||
scroller.add(new PrefsOption("Alternative win", QPref.REWARDS_ALTERNATIVE, PrefsGroup.REWARDS));
|
||||
scroller.add(new PrefsOption("Win by turn 15", QPref.REWARDS_TURN15, PrefsGroup.REWARDS));
|
||||
scroller.add(new PrefsOption("Win by turn 10", QPref.REWARDS_TURN10, PrefsGroup.REWARDS));
|
||||
scroller.add(new PrefsOption("Win by turn 5", QPref.REWARDS_TURN5, PrefsGroup.REWARDS));
|
||||
scroller.add(new PrefsOption("First turn win", QPref.REWARDS_TURN1, PrefsGroup.REWARDS));
|
||||
|
||||
//Booster Pack Ratios
|
||||
scroller.add(new PrefsHeader("Booster Pack Ratios", FSkinImage.QUEST_BOOK, PrefsGroup.BOOSTER));
|
||||
scroller.add(new PrefsOption("Common", QPref.BOOSTER_COMMONS, PrefsGroup.BOOSTER));
|
||||
scroller.add(new PrefsOption("Uncommon", QPref.BOOSTER_UNCOMMONS, PrefsGroup.BOOSTER));
|
||||
scroller.add(new PrefsOption("Rare", QPref.BOOSTER_RARES, PrefsGroup.BOOSTER));
|
||||
|
||||
//Shop Preferences
|
||||
scroller.add(new PrefsHeader("Shop Preferences", FSkinImage.QUEST_COIN, PrefsGroup.SHOP));
|
||||
scroller.add(new PrefsOption("Maximum Packs", QPref.SHOP_MAX_PACKS, PrefsGroup.SHOP));
|
||||
scroller.add(new PrefsOption("Starting Packs", QPref.SHOP_STARTING_PACKS, PrefsGroup.SHOP));
|
||||
scroller.add(new PrefsOption("Wins for Pack", QPref.SHOP_WINS_FOR_ADDITIONAL_PACK, PrefsGroup.SHOP));
|
||||
scroller.add(new PrefsOption("Wins per Set Unlock", QPref.WINS_UNLOCK_SET, PrefsGroup.SHOP));
|
||||
scroller.add(new PrefsOption("Common Singles", QPref.SHOP_SINGLES_COMMON, PrefsGroup.SHOP));
|
||||
scroller.add(new PrefsOption("Uncommon Singles", QPref.SHOP_SINGLES_UNCOMMON, PrefsGroup.SHOP));
|
||||
scroller.add(new PrefsOption("Rare Singles", QPref.SHOP_SINGLES_RARE, PrefsGroup.SHOP));
|
||||
|
||||
//Difficulty Adjustments (All)
|
||||
scroller.add(new PrefsHeader("Difficulty Adjustments (All)", FSkinImage.QUEST_NOTES, PrefsGroup.DIFFICULTY_ALL));
|
||||
scroller.add(new PrefsOption("Starting basic lands", QPref.STARTING_BASIC_LANDS, PrefsGroup.DIFFICULTY_ALL));
|
||||
scroller.add(new PrefsOption("Starting snow lands", QPref.STARTING_SNOW_LANDS, PrefsGroup.DIFFICULTY_ALL));
|
||||
scroller.add(new PrefsOption("Color bias (1-10)", QPref.STARTING_POOL_COLOR_BIAS, PrefsGroup.DIFFICULTY_ALL));
|
||||
scroller.add(new PrefsOption("Penalty for loss", QPref.PENALTY_LOSS, PrefsGroup.DIFFICULTY_ALL));
|
||||
|
||||
//Difficult Adjustments (Easy)
|
||||
scroller.add(new PrefsHeader("Difficulty Adjustments (Easy)", FSkinImage.QUEST_NOTES, PrefsGroup.DIFFICULTY_EASY));
|
||||
scroller.add(new PrefsOption("Wins For Booster", QPref.WINS_BOOSTER_EASY, PrefsGroup.DIFFICULTY_EASY));
|
||||
scroller.add(new PrefsOption("Wins For Rank Increase", QPref.WINS_RANKUP_EASY, PrefsGroup.DIFFICULTY_EASY));
|
||||
scroller.add(new PrefsOption("Wins For Medium AI", QPref.WINS_MEDIUMAI_EASY, PrefsGroup.DIFFICULTY_EASY));
|
||||
scroller.add(new PrefsOption("Wins For Hard AI", QPref.WINS_HARDAI_EASY, PrefsGroup.DIFFICULTY_EASY));
|
||||
scroller.add(new PrefsOption("Wins For Expert AI", QPref.WINS_EXPERTAI_EASY, PrefsGroup.DIFFICULTY_EASY));
|
||||
scroller.add(new PrefsOption("Starting commons", QPref.STARTING_COMMONS_EASY, PrefsGroup.DIFFICULTY_EASY));
|
||||
scroller.add(new PrefsOption("Starting uncommons", QPref.STARTING_UNCOMMONS_EASY, PrefsGroup.DIFFICULTY_EASY));
|
||||
scroller.add(new PrefsOption("Starting rares", QPref.STARTING_RARES_EASY, PrefsGroup.DIFFICULTY_EASY));
|
||||
scroller.add(new PrefsOption("Starting credits", QPref.STARTING_CREDITS_EASY, PrefsGroup.DIFFICULTY_EASY));
|
||||
|
||||
//Difficult Adjustments (Medium)
|
||||
scroller.add(new PrefsHeader("Difficulty Adjustments (Medium)", FSkinImage.QUEST_NOTES, PrefsGroup.DIFFICULTY_MEDIUM));
|
||||
scroller.add(new PrefsOption("Wins For Booster", QPref.WINS_BOOSTER_MEDIUM, PrefsGroup.DIFFICULTY_MEDIUM));
|
||||
scroller.add(new PrefsOption("Wins For Rank Increase", QPref.WINS_RANKUP_MEDIUM, PrefsGroup.DIFFICULTY_MEDIUM));
|
||||
scroller.add(new PrefsOption("Wins For Medium AI", QPref.WINS_MEDIUMAI_MEDIUM, PrefsGroup.DIFFICULTY_MEDIUM));
|
||||
scroller.add(new PrefsOption("Wins For Hard AI", QPref.WINS_HARDAI_MEDIUM, PrefsGroup.DIFFICULTY_MEDIUM));
|
||||
scroller.add(new PrefsOption("Wins For Expert AI", QPref.WINS_EXPERTAI_MEDIUM, PrefsGroup.DIFFICULTY_MEDIUM));
|
||||
scroller.add(new PrefsOption("Starting commons", QPref.STARTING_COMMONS_MEDIUM, PrefsGroup.DIFFICULTY_MEDIUM));
|
||||
scroller.add(new PrefsOption("Starting uncommons", QPref.STARTING_UNCOMMONS_MEDIUM, PrefsGroup.DIFFICULTY_MEDIUM));
|
||||
scroller.add(new PrefsOption("Starting rares", QPref.STARTING_RARES_MEDIUM, PrefsGroup.DIFFICULTY_MEDIUM));
|
||||
scroller.add(new PrefsOption("Starting credits", QPref.STARTING_CREDITS_MEDIUM, PrefsGroup.DIFFICULTY_MEDIUM));
|
||||
|
||||
//Difficult Adjustments (Hard)
|
||||
scroller.add(new PrefsHeader("Difficulty Adjustments (Hard)", FSkinImage.QUEST_NOTES, PrefsGroup.DIFFICULTY_HARD));
|
||||
scroller.add(new PrefsOption("Wins For Booster", QPref.WINS_BOOSTER_HARD, PrefsGroup.DIFFICULTY_HARD));
|
||||
scroller.add(new PrefsOption("Wins For Rank Increase", QPref.WINS_RANKUP_HARD, PrefsGroup.DIFFICULTY_HARD));
|
||||
scroller.add(new PrefsOption("Wins For Medium AI", QPref.WINS_MEDIUMAI_HARD, PrefsGroup.DIFFICULTY_HARD));
|
||||
scroller.add(new PrefsOption("Wins For Hard AI", QPref.WINS_HARDAI_HARD, PrefsGroup.DIFFICULTY_HARD));
|
||||
scroller.add(new PrefsOption("Wins For Expert AI", QPref.WINS_EXPERTAI_HARD, PrefsGroup.DIFFICULTY_HARD));
|
||||
scroller.add(new PrefsOption("Starting commons", QPref.STARTING_COMMONS_HARD, PrefsGroup.DIFFICULTY_HARD));
|
||||
scroller.add(new PrefsOption("Starting uncommons", QPref.STARTING_UNCOMMONS_HARD, PrefsGroup.DIFFICULTY_HARD));
|
||||
scroller.add(new PrefsOption("Starting rares", QPref.STARTING_RARES_HARD, PrefsGroup.DIFFICULTY_HARD));
|
||||
scroller.add(new PrefsOption("Starting credits", QPref.STARTING_CREDITS_HARD, PrefsGroup.DIFFICULTY_HARD));
|
||||
|
||||
//Difficult Adjustments (Expert)
|
||||
scroller.add(new PrefsHeader("Difficulty Adjustments (Expert)", FSkinImage.QUEST_NOTES, PrefsGroup.DIFFICULTY_EXPERT));
|
||||
scroller.add(new PrefsOption("Wins For Booster", QPref.WINS_BOOSTER_EXPERT, PrefsGroup.DIFFICULTY_EXPERT));
|
||||
scroller.add(new PrefsOption("Wins For Rank Increase", QPref.WINS_RANKUP_EXPERT, PrefsGroup.DIFFICULTY_EXPERT));
|
||||
scroller.add(new PrefsOption("Wins For Medium AI", QPref.WINS_MEDIUMAI_EXPERT, PrefsGroup.DIFFICULTY_EXPERT));
|
||||
scroller.add(new PrefsOption("Wins For Hard AI", QPref.WINS_HARDAI_EXPERT, PrefsGroup.DIFFICULTY_EXPERT));
|
||||
scroller.add(new PrefsOption("Wins For Expert AI", QPref.WINS_EXPERTAI_EXPERT, PrefsGroup.DIFFICULTY_EXPERT));
|
||||
scroller.add(new PrefsOption("Starting commons", QPref.STARTING_COMMONS_EXPERT, PrefsGroup.DIFFICULTY_EXPERT));
|
||||
scroller.add(new PrefsOption("Starting uncommons", QPref.STARTING_UNCOMMONS_EXPERT, PrefsGroup.DIFFICULTY_EXPERT));
|
||||
scroller.add(new PrefsOption("Starting rares", QPref.STARTING_RARES_EXPERT, PrefsGroup.DIFFICULTY_EXPERT));
|
||||
scroller.add(new PrefsOption("Starting credits", QPref.STARTING_CREDITS_EXPERT, PrefsGroup.DIFFICULTY_EXPERT));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void doLayout(float startY, float width, float height) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
scroller.setBounds(0, startY, width, height - startY);
|
||||
}
|
||||
|
||||
private class PrefsHeader extends FLabel {
|
||||
private PrefsHeader(String title, FImage icon, final PrefsGroup group) {
|
||||
super(new ButtonBuilder().text(title).font(FSkinFont.get(16)).icon(icon).iconScaleFactor(1f)
|
||||
.command(new FEventHandler() {
|
||||
private boolean showOptions = true;
|
||||
|
||||
@Override
|
||||
public void handleEvent(FEvent e) {
|
||||
showOptions = !showOptions;
|
||||
for (FDisplayObject child : scroller.getChildren()) {
|
||||
if (child instanceof PrefsOption && ((PrefsOption)child).group == group) {
|
||||
child.setVisible(showOptions);
|
||||
}
|
||||
}
|
||||
scroller.revalidate();
|
||||
}
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
||||
private static class PrefsOption extends FContainer {
|
||||
private static final float FIELD_WIDTH = new FTextField("99999").getAutoSizeWidth(); //base width on 5 digit number
|
||||
|
||||
private final FLabel label = add(new FLabel.Builder().build());
|
||||
private final FNumericTextField field = add(new FNumericTextField());
|
||||
private final QPref pref;
|
||||
private final PrefsGroup group;
|
||||
|
||||
private PrefsOption(String label0, QPref pref0, PrefsGroup group0) {
|
||||
label.setText(label0);
|
||||
pref = pref0;
|
||||
group = group0;
|
||||
field.setText(FModel.getQuestPreferences().getPref(pref0));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void doLayout(float width, float height) {
|
||||
label.setBounds(0, 0, width - FIELD_WIDTH - PADDING, height);
|
||||
field.setBounds(width - FIELD_WIDTH, 0, FIELD_WIDTH, height);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
23
forge-gui-mobile/src/forge/toolbox/FNumericTextField.java
Normal file
23
forge-gui-mobile/src/forge/toolbox/FNumericTextField.java
Normal file
@@ -0,0 +1,23 @@
|
||||
package forge.toolbox;
|
||||
|
||||
import com.badlogic.gdx.graphics.g2d.BitmapFont.HAlignment;
|
||||
|
||||
public class FNumericTextField extends FTextField {
|
||||
private int value;
|
||||
|
||||
public FNumericTextField() {
|
||||
setAlignment(HAlignment.RIGHT);
|
||||
}
|
||||
|
||||
public int getValue() {
|
||||
return value;
|
||||
}
|
||||
public void setValue(int value0) {
|
||||
if (value0 < 0) {
|
||||
value0 = 0;
|
||||
}
|
||||
if (value == value0) { return; }
|
||||
value = value0;
|
||||
setText(String.valueOf(value));
|
||||
}
|
||||
}
|
||||
@@ -18,7 +18,7 @@ import forge.util.Utils;
|
||||
public class FTextField extends FDisplayObject implements ITextField {
|
||||
private static final FSkinFont DEFAULT_FONT = FSkinFont.get(14);
|
||||
private static final float BORDER_THICKNESS = Utils.scaleX(1);
|
||||
protected static final float PADDING = Utils.scaleX(5);
|
||||
public static final float PADDING = Utils.scaleX(5);
|
||||
protected static final FSkinColor FORE_COLOR = FSkinColor.get(Colors.CLR_TEXT);
|
||||
protected static final FSkinColor BACK_COLOR = FSkinColor.get(Colors.CLR_THEME2);
|
||||
protected static final FSkinColor GHOST_TEXT_COLOR = FORE_COLOR.alphaColor(0.7f);
|
||||
@@ -126,11 +126,11 @@ public class FTextField extends FDisplayObject implements ITextField {
|
||||
}
|
||||
|
||||
public float getAutoSizeWidth() {
|
||||
return PADDING + font.getBounds(text).width + getRightPadding();
|
||||
return getLeftPadding() + font.getBounds(text).width + getRightPadding();
|
||||
}
|
||||
|
||||
private int getCharIndexAtPoint(float x, float y) {
|
||||
float charLeft = getLeftPadding();
|
||||
float charLeft = getTextLeft();
|
||||
if (x < charLeft) {
|
||||
return 0;
|
||||
}
|
||||
@@ -320,7 +320,13 @@ public class FTextField extends FDisplayObject implements ITextField {
|
||||
|
||||
//draw selection if key input is active
|
||||
if (isEditing) {
|
||||
float selLeft = getLeftPadding();
|
||||
float selLeft = getTextLeft();
|
||||
if (alignment == HAlignment.CENTER) {
|
||||
|
||||
}
|
||||
else if (alignment == HAlignment.RIGHT) {
|
||||
|
||||
}
|
||||
if (selStart > 0) {
|
||||
selLeft += renderedFont.getBounds(text.substring(0, selStart)).width;
|
||||
}
|
||||
@@ -358,6 +364,18 @@ public class FTextField extends FDisplayObject implements ITextField {
|
||||
}
|
||||
}
|
||||
|
||||
protected float getTextLeft() {
|
||||
switch (alignment) {
|
||||
case LEFT:
|
||||
default:
|
||||
return getLeftPadding();
|
||||
case CENTER:
|
||||
return getLeftPadding() + (getWidth() - getRightPadding() - getLeftPadding() - renderedFont.getBounds(text).width) / 2;
|
||||
case RIGHT:
|
||||
return getWidth() - getRightPadding() - renderedFont.getBounds(text).width;
|
||||
}
|
||||
}
|
||||
|
||||
protected float getLeftPadding() {
|
||||
return PADDING;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user