Skip to content
Snippets Groups Projects
Commit 4dd072ee authored by Matyáš Latner's avatar Matyáš Latner
Browse files

Merge branch 'feature-newgamesstatistics' into 'V3.3'

#396, #414 New design of Statistics screen

* Added buttons for changing games
* Improved layout of other elements

See merge request !395
parents e39adc0a 5352418a
No related branches found
No related tags found
No related merge requests found
Showing
with 120 additions and 78 deletions
core/assets/common/screen/statistics/gfx/arrow_down.png

6.9 KiB

core/assets/common/screen/statistics/gfx/arrow_down_pressed.png

6.22 KiB

core/assets/common/screen/statistics/gfx/arrow_up.png

7.02 KiB

core/assets/common/screen/statistics/gfx/arrow_up_pressed.png

6.26 KiB

core/assets/common/screen/statistics/gfx/bookmark1.png

15.8 KiB

core/assets/common/screen/statistics/gfx/bookmark1_pressed.png

18.4 KiB

core/assets/common/screen/statistics/gfx/bookmark2.png

12.8 KiB

core/assets/common/screen/statistics/gfx/bookmark2_pressed.png

19.6 KiB

core/assets/common/screen/statistics/gfx/bookmark3.png

18.2 KiB

core/assets/common/screen/statistics/gfx/bookmark3_pressed.png

18.3 KiB

......@@ -7,6 +7,7 @@ import com.badlogic.gdx.scenes.scene2d.Actor;
import com.badlogic.gdx.scenes.scene2d.Group;
import com.badlogic.gdx.scenes.scene2d.InputEvent;
import com.badlogic.gdx.scenes.scene2d.InputListener;
import com.badlogic.gdx.scenes.scene2d.Touchable;
import com.badlogic.gdx.scenes.scene2d.ui.Cell;
import com.badlogic.gdx.scenes.scene2d.ui.Container;
import com.badlogic.gdx.scenes.scene2d.ui.HorizontalGroup;
......@@ -14,7 +15,6 @@ import com.badlogic.gdx.scenes.scene2d.ui.Image;
import com.badlogic.gdx.scenes.scene2d.ui.ScrollPane;
import com.badlogic.gdx.scenes.scene2d.ui.Stack;
import com.badlogic.gdx.scenes.scene2d.ui.Table;
import com.badlogic.gdx.scenes.scene2d.ui.VerticalGroup;
import com.badlogic.gdx.scenes.scene2d.ui.WidgetGroup;
import com.badlogic.gdx.scenes.scene2d.utils.ClickListener;
import com.badlogic.gdx.scenes.scene2d.utils.NinePatchDrawable;
......@@ -65,45 +65,68 @@ public class StatisticsScreen extends AbstractTablexiaScreen<Void> {
private static final ApplicationFontManager.FontType_NEW BOOKMARK_FONT_TYPE = ApplicationFontManager.FontType_NEW.BOLD_26;
private static final ApplicationFontManager.FontType_NEW TITLE_FONT_TYPE = ApplicationFontManager.FontType_NEW.BOLD_30;
private static final float GRAPH_DIALOG_WIDTH = 270;
private static final float GRAPH_DIALOG_HEIGHT = 180;
private static final float COMPONENTS_PADDING = 10f, COMPONENTS_THRESHOLD_PADDING = 52f, TITLE_PADDING = 50f;
private static final float CLOSE_BUTTON_POSITION = 25f;
private static final float DRAWER_SCALE = 0.6f;
private static final float SWITCH_GRAPH_POSITION_X_SCALE = 0.30f, SWITCH_GRAPH_POSITION_Y_SCALE = 0.88f, SWITCH_GRAPH_PADDING_X = 52f, SWITCH_GRAPH_PADDING_Y = 5f;
private static final float DIFFICULTIES_SCALE = 0.8f, DIFFICULTIES_POSITION_X_SCALE = 0.63f, DIFFICULTIES_POSITION_Y_SCALE = 0.9f;
private static final float NOTEBOOK_POSITION_SCALE = 0.3f, NOTEBOOK_WIDTH_SCALE = 0.7f, NOTEBOOK_HEIGHT_SCALE = 0.85f;
private static final float BOOKMARK_SIZE_SCALE = 0.6f, BOOKMARKS_POSITION_X_SCALE = 0.24f, BOOKMARKS_POSITION_Y_SCALE = 0.7f;
private static final float GRAPH_DIALOG_WIDTH = 270;
private static final float GRAPH_DIALOG_HEIGHT = 180;
private static final float COMPONENTS_PADDING = 10f;
private static final float COMPONENTS_THRESHOLD_PADDING = 52f;
private static final float TITLE_PADDING = 100f;
private static final float CLOSE_BUTTON_POSITION = 25f;
private static final float DRAWER_SCALE = 0.6f;
private static final float SWITCH_GRAPH_POSITION_X_SCALE = 0.3f;
private static final float SWITCH_GRAPH_POSITION_Y_SCALE = 0.88f;
private static final float SWITCH_GRAPH_PADDING_X = 52f;
private static final float SWITCH_GRAPH_PADDING_Y = 5f;
private static final float DIFFICULTIES_SCALE = 0.8f;
private static final float DIFFICULTIES_POSITION_X_SCALE = 0.63f;
private static final float DIFFICULTIES_POSITION_Y_SCALE = 0.9f;
private static final float NOTEBOOK_POSITION_SCALE = 0.3f;
private static final float NOTEBOOK_WIDTH_SCALE = 0.7f;
private static final float NOTEBOOK_HEIGHT_SCALE = 0.85f;
private static final float BOOKMARK_SIZE_SCALE = 0.6f;
private static final float BOOKMARKS_POSITION_X_SCALE = 0.112f;
private static final float BOOKMARKS_POSITION_Y_SCALE = 0.15f;
private static final float BOOKMARKS_PADDING = 0.1f;
private static final float UP_DOWN_BUTTON_SIZE = 65;
private static final float UP_BUTTON_POSITION_Y_SCALE = 0.72f;
private static final float UP_DOWN_BUTTON_POSITION_X_SCALE = 0.2f;
private static final float DOWN_BUTTON_POSITION_Y_SCALE = 0.08f;
private static final float SELECTED_GAME_WIDTH = 0.66f;
public static final String GFX_PATH = "gfx/";
public static final String STATISTICS_SPEECH = MFX_PATH + "statistics.mp3";
private static final String[] BOOKMARKS_TEXTURES = {"1", "2", "3", "2", "1", "3", "1", "2"};
private static final String SELECTED_SWITCH_KEY = "selected_switch", SELECTED_GAME_KEY = "selected_game", DIFFICULTY_EASY_KEY = "diff_easy", DIFFICULTY_MEDIUM_KEY = "diff_medium", DIFFICULTY_HARD_KEY = "diff_hard";
private static final String ARROW_UP_TEXT = "arrow_up";
private static final String ARROW_DOWN_TEXT = "arrow_down";
private static final String PRESSED_TEXT = "_pressed";
private static final String BOOKMARK_TEXT = "bookmark";
private static final GameDefinition DEFAULT_GAME = GameDefinition.ROBBERY;
private static final int DIFFICULTY_BUTTON_SIZE = 70;
private static final ApplicationFontManager.FontType_NEW DIALOG_BOLD_FONT = ApplicationFontManager.FontType_NEW.BOLD_16;
private Group content;
private Image background;
private TablexiaLabel titleLabel;
private TablexiaButton buttonClose;
private Image imageDrawer;
private WidgetGroup switchGraphType;
private Container<Group> notebook;
private Stack graphs;
private WidgetGroup bookmarks, difficulties;
private GraphStyle graphStyle;
private Set<GameDifficulty> selectedGameDifficulties;
private GameDifficulty lastSelectedDifficulty;
private GameDefinition selectedGameDefinition;
private Switch switchGraph;
private ScrollPane scrollPane;
private float distanceScrolled;
private Table graphPaneHolder;
private GraphPane graphPane;
private Group content;
private Image background;
private TablexiaLabel titleLabel;
private TablexiaButton buttonClose;
private Image imageDrawer;
private WidgetGroup switchGraphType;
private Container<Group> notebook;
private Stack graphs;
private WidgetGroup difficulties;
private Group bookmarksGroup;
private GraphStyle graphStyle;
private Set<GameDifficulty> selectedGameDifficulties;
private GameDifficulty lastSelectedDifficulty;
private GameDefinition selectedGameDefinition;
private Switch switchGraph;
private ScrollPane scrollPane;
private float distanceScrolled;
private Table graphPaneHolder;
private GraphPane graphPane;
private Map<GameDifficulty, TablexiaButton> difficultyButtons;
private TablexiaComponentDialog dialog;
private TablexiaComponentDialog dialog;
private TablexiaButton upButton, downButton;
@Override
protected void screenPaused(Map<String, String> screenState) {
......@@ -122,7 +145,6 @@ public class StatisticsScreen extends AbstractTablexiaScreen<Void> {
content.addActor(background = new TablexiaNoBlendingImage(getApplicationTextureRegion(ApplicationAtlasManager.BACKGROUND_WOODEN)));
content.addActor(titleLabel = new TablexiaLabel(getText("statistics_label"), new TablexiaLabel.TablexiaLabelStyle(TITLE_FONT_TYPE, Color.BLACK)));
content.addActor(buttonClose = new CloseTablexiaButton().setInputListener(closeClickListener));
content.addActor(imageDrawer = new Image(getScreenTextureRegion(GFX_PATH + "cardfile")));
// TODO move in action??
......@@ -130,6 +152,10 @@ public class StatisticsScreen extends AbstractTablexiaScreen<Void> {
scrollPane = new ScrollPane(null);
graphPaneHolder = new Table();
bookmarksGroup = new Group();
bookmarksGroup.setScale(BOOKMARK_SIZE_SCALE);
createUpAndDownButtons();
selectedGameDifficulties = new HashSet<GameDifficulty>();
switchGraph = new Switch(getScreenTextureRegion(GFX_PATH + "switch_background"), getScreenTextureRegion(GFX_PATH + "switch_left"), getScreenTextureRegion(GFX_PATH + "switch_center"), getScreenTextureRegion(GFX_PATH + "switch_right"));
......@@ -186,35 +212,36 @@ public class StatisticsScreen extends AbstractTablexiaScreen<Void> {
notebook.setBackground(new NinePatchDrawable(chartBackground));
notebook.setActor(graphs);
notebook.fill();
content.addActor(bookmarksGroup);
bookmarks = new VerticalGroup().space(COMPONENTS_PADDING);
List<TablexiaButton> bookmarks = new ArrayList<TablexiaButton>();
boolean gameFromDBLoaded = false;
for (int i = 0; i < GameMenuDefinition.values().length; i++) {
for (int i = 0; i <GameMenuDefinition.values().length; i++) {
GameMenuDefinition gameMenuDefinition = GameMenuDefinition.values()[i];
TablexiaButton button = new TablexiaButton(
gameMenuDefinition.getTitle(),
gameMenuDefinition.getTitle() + " ", //right padding for text
true,
getScreenTextureRegion(GFX_PATH + "gamelist_listitem_background" + BOOKMARKS_TEXTURES[i] + "_inactive"),
getScreenTextureRegion(GFX_PATH + "gamelist_listitem_background" + BOOKMARKS_TEXTURES[i] + "_active"),
getScreenTextureRegion(GFX_PATH + BOOKMARK_TEXT + BOOKMARKS_TEXTURES[i] + PRESSED_TEXT),
getScreenTextureRegion(GFX_PATH + BOOKMARK_TEXT + BOOKMARKS_TEXTURES[i]),
null,
null
);
button.adaptiveSize(false);
button.setChecked(false);
button.onlyOnClick(true);
button.setTouchable(Touchable.disabled);
button.getLabel().setAlignment(Align.right);
button.getLabel().setTablexiaLabelStyle(new TablexiaLabel.TablexiaLabelStyle(BOOKMARK_FONT_TYPE, Color.BLACK));
button.setUserObject(gameMenuDefinition);
button.setInputListener(bookmarkClickListener);
button.setWidth(getScreenTextureRegion(GFX_PATH + "gamelist_listitem_background" + BOOKMARKS_TEXTURES[i] + "_inactive").getRegionWidth());
bookmarks.addActor(button);
button.setWidth(getScreenTextureRegion(GFX_PATH + BOOKMARK_TEXT + BOOKMARKS_TEXTURES[i]).getRegionWidth() * SELECTED_GAME_WIDTH);
button.setY((GameMenuDefinition.values().length - i) * BOOKMARKS_PADDING * getViewportHeight());
bookmarks.add(button);
//if user selected some graphs on last session, select them
if(selectGame(screenState, gameMenuDefinition.getGameDefinition()) && !gameFromDBLoaded) gameFromDBLoaded = true;
}
bookmarks.setScale(BOOKMARK_SIZE_SCALE);
content.addActor(bookmarks);
for(TablexiaButton button : bookmarks) {
bookmarksGroup.addActor(button);
}
//if not loaded from DB, select first available or default game and difficulty
if(!gameFromDBLoaded)selectFirstGameAndDifficultyAvailable();
......@@ -234,8 +261,37 @@ public class StatisticsScreen extends AbstractTablexiaScreen<Void> {
return STATISTICS_SPEECH;
}
private void selectFirstGameAndDifficultyAvailable() {
private void createUpAndDownButtons() {
content.addActor(upButton = createButton(UP_BUTTON_POSITION_Y_SCALE, ARROW_UP_TEXT, new ClickListener() {
@Override
public void clicked(InputEvent event, float x, float y) {
int nextValue = selectedGameDefinition.getGameNumber() - 1;
if(nextValue < 1) nextValue = GameDefinition.values().length;
selectGame(GameDefinition.getGameDefinitionForGameNumber(nextValue));
}
}));
content.addActor(downButton = createButton(DOWN_BUTTON_POSITION_Y_SCALE, ARROW_DOWN_TEXT, new ClickListener() {
@Override
public void clicked(InputEvent event, float x, float y) {
int nextValue = selectedGameDefinition.getGameNumber() + 1;
if(nextValue > GameDefinition.values().length) nextValue = 1;
selectGame(GameDefinition.getGameDefinitionForGameNumber(nextValue));
}
}));
}
private TablexiaButton createButton(float positionYScale, String texture, ClickListener listener) {
TablexiaButton button = new TablexiaButton(null, false, getScreenTextureRegion(GFX_PATH + texture), getScreenTextureRegion(GFX_PATH + texture + PRESSED_TEXT), null, null);
button.setButtonSize(UP_DOWN_BUTTON_SIZE, UP_DOWN_BUTTON_SIZE)
.setButtonPosition(getViewportWidth() * UP_DOWN_BUTTON_POSITION_X_SCALE, getViewportHeight() * positionYScale)
.adaptiveSizePositionFix(false)
.setEnabled()
.setInputListener(listener);
return button;
}
private void selectFirstGameAndDifficultyAvailable() {
List<Game> games;
boolean gameSelected = false;
for(int i = 1; i < GameMenuDefinition.values().length+1; i++) {
......@@ -263,7 +319,6 @@ public class StatisticsScreen extends AbstractTablexiaScreen<Void> {
}
private void setDifficultyButtonByDifficulty(GameDifficulty difficulty, Map<String, String> screenState, TablexiaButton button) {
switch (difficulty) {
case EASY:
if(screenState.containsKey(DIFFICULTY_EASY_KEY)) setDifficultyButtonChecked(button, Boolean.parseBoolean(screenState.get(DIFFICULTY_EASY_KEY)), GameDifficulty.EASY);
......@@ -298,8 +353,19 @@ public class StatisticsScreen extends AbstractTablexiaScreen<Void> {
/**used when selecting first available or default game */
private void selectGame(GameDefinition definition) {
((TablexiaButton) bookmarks.getChildren().get(definition.getGameNumber()-1)).setChecked(true);
if(selectedGameDefinition == definition) return;
selectedGameDefinition = definition;
for(Actor actor : bookmarksGroup.getChildren()) {
((TablexiaButton) bookmarksGroup.getChildren().get(bookmarksGroup.getChildren().indexOf(actor, true))).setChecked(false);
((TablexiaButton) bookmarksGroup.getChildren().get(bookmarksGroup.getChildren().indexOf(actor, true))).getLabel().setAlignment(Align.right);
}
((TablexiaButton) bookmarksGroup.getChildren().get(definition.getGameNumber() - 1)).setChecked(true);
((TablexiaButton) bookmarksGroup.getChildren().get(definition.getGameNumber() - 1)).getLabel().setAlignment(Align.center);
//When changing game, scroll to start
scrollPane.scrollTo(0, 0, 0, 0);
datasetChanged();
}
private void setSelectedGraphType(Map<String,String> screenState) {
......@@ -363,31 +429,6 @@ public class StatisticsScreen extends AbstractTablexiaScreen<Void> {
}
};
private InputListener bookmarkClickListener = new ClickListener() {
public void clicked(InputEvent event, float x, float y) {
GameMenuDefinition gameMenuDefinition = (GameMenuDefinition) event.getListenerActor().getUserObject();
Log.info(((Object) this).getClass(), "Selected game " + gameMenuDefinition.getGameDefinition().getTitle());
for (Actor game : bookmarks.getChildren()) {
((TablexiaButton) game).setChecked(true);
if (!game.equals(event.getListenerActor())) {
((TablexiaButton) game).setChecked(false);
}
}
if(selectedGameDefinition == gameMenuDefinition.getGameDefinition()) {
return;
}
selectedGameDefinition = gameMenuDefinition.getGameDefinition();
datasetChanged();
//When changing game, scroll to start
scrollPane.scrollTo(0, 0, 0, 0);
}
};
private GameClickListener graphClickListener = new GameClickListener() {
@Override
......@@ -514,7 +555,6 @@ public class StatisticsScreen extends AbstractTablexiaScreen<Void> {
};
private TextureRegion[] getRatingStars(Game game) {
TextureRegion[] textures = new TextureRegion[3];
TextureRegion starAchievedTexture = getScreenTextureRegion(GFX_PATH + "ratingstar_achieved");
TextureRegion starNotAchievedTexture = getScreenTextureRegion(GFX_PATH + "ratingstar_not_achieved");
......@@ -546,9 +586,7 @@ public class StatisticsScreen extends AbstractTablexiaScreen<Void> {
}
private String getCorrectedScore(GameDefinition gameDefinition, float score) {
if(gameDefinition == GameDefinition.PURSUIT) return millisecondsToTimeText(score);
return String.valueOf(Math.round(score));
}
......@@ -618,7 +656,7 @@ public class StatisticsScreen extends AbstractTablexiaScreen<Void> {
public void position() {
titleLabel.setPosition(TITLE_PADDING, getStage().getHeight() - TITLE_PADDING);
titleLabel.setPosition(TITLE_PADDING, getStage().getHeight() * SWITCH_GRAPH_POSITION_Y_SCALE);
background.setBounds(0, 0, getStage().getWidth(), getStage().getHeight());
buttonClose.setPosition(CLOSE_BUTTON_POSITION, CLOSE_BUTTON_POSITION);
ScaleUtil.setImageHeight(imageDrawer, getStage().getHeight() * DRAWER_SCALE);
......@@ -626,7 +664,12 @@ public class StatisticsScreen extends AbstractTablexiaScreen<Void> {
switchGraphType.setPosition(getStage().getWidth() * SWITCH_GRAPH_POSITION_X_SCALE, getStage().getHeight() * SWITCH_GRAPH_POSITION_Y_SCALE);
difficulties.setPosition(getStage().getWidth() * DIFFICULTIES_POSITION_X_SCALE, getStage().getHeight() * DIFFICULTIES_POSITION_Y_SCALE);
notebook.setBounds(getStage().getWidth() * NOTEBOOK_POSITION_SCALE, 0, getStage().getWidth() * NOTEBOOK_WIDTH_SCALE, getStage().getHeight() * NOTEBOOK_HEIGHT_SCALE);
bookmarks.setPosition(getStage().getWidth() * BOOKMARKS_POSITION_X_SCALE, getStage().getHeight() * BOOKMARKS_POSITION_Y_SCALE);
upButton.setButtonPosition(getViewportWidth() * UP_DOWN_BUTTON_POSITION_X_SCALE, getViewportHeight() * UP_BUTTON_POSITION_Y_SCALE);
downButton.setPosition(getViewportWidth() * UP_DOWN_BUTTON_POSITION_X_SCALE, getViewportHeight() * DOWN_BUTTON_POSITION_Y_SCALE);
bookmarksGroup.setPosition(getStage().getWidth() * BOOKMARKS_POSITION_X_SCALE, getStage().getHeight() * BOOKMARKS_POSITION_Y_SCALE);
for(Actor button : bookmarksGroup.getChildren()) {
button.setY((GameMenuDefinition.values().length - bookmarksGroup.getChildren().indexOf(button, true)) * BOOKMARKS_PADDING * getViewportHeight());
}
scrollPane.setSize(graphs.getWidth(), graphs.getHeight());
if (graphPaneHolder.getCells().size > 0) graphPaneHolder.getCells().get(0).width(graphPane.getWidth()).height(graphs.getHeight());
......@@ -643,7 +686,6 @@ public class StatisticsScreen extends AbstractTablexiaScreen<Void> {
@Override
public void screenResized(int width, int height) {
if(graphPane != null) graphPane.resetHeight();
ScaleUtil.setFullscreenBounds(content, getStage());
position();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment