diff --git a/core/assets/common/game/runes/common/gfx/background.jpg b/core/assets/common/game/runes/common/gfx/background.jpg deleted file mode 100644 index 1a2cd4e7ce1008d9db274f2df84d7b521fe160ac..0000000000000000000000000000000000000000 Binary files a/core/assets/common/game/runes/common/gfx/background.jpg and /dev/null differ diff --git a/core/assets/common/game/runes/common/gfx/background.png b/core/assets/common/game/runes/common/gfx/background.png new file mode 100644 index 0000000000000000000000000000000000000000..43ad54697e94ca5022bd74b951cc0bac327af1a1 Binary files /dev/null and b/core/assets/common/game/runes/common/gfx/background.png differ diff --git a/core/assets/common/screen/statistics/gfx/arrow_down.png b/core/assets/common/screen/statistics/gfx/arrow_down.png index 84d9898de3f0af7ecd1dc5ca5863f5c9422ac4c4..cee92d4075302f2e218f4aca37a5e095c41a4e71 100644 Binary files a/core/assets/common/screen/statistics/gfx/arrow_down.png and b/core/assets/common/screen/statistics/gfx/arrow_down.png differ diff --git a/core/assets/common/screen/statistics/gfx/arrow_down_pressed.png b/core/assets/common/screen/statistics/gfx/arrow_down_pressed.png index 3a7fe9eac49c3c2e17fa79735dd5d44c09d9541d..d92016be7c116dd6868e786f0ba7f32081658f89 100644 Binary files a/core/assets/common/screen/statistics/gfx/arrow_down_pressed.png and b/core/assets/common/screen/statistics/gfx/arrow_down_pressed.png differ diff --git a/core/assets/common/screen/statistics/gfx/arrow_up.png b/core/assets/common/screen/statistics/gfx/arrow_up.png index 5e6eb51a9aee3b2b61d12547ef0ce8415882359e..bac7a550172921e261ec34e24dd16665bd642207 100644 Binary files a/core/assets/common/screen/statistics/gfx/arrow_up.png and b/core/assets/common/screen/statistics/gfx/arrow_up.png differ diff --git a/core/assets/common/screen/statistics/gfx/arrow_up_pressed.png b/core/assets/common/screen/statistics/gfx/arrow_up_pressed.png index 64e4c307c1f90c25bdc81138bb587cea28dd5521..b37943fa5e96728fe3eaf054b6a7e7ab852446bd 100644 Binary files a/core/assets/common/screen/statistics/gfx/arrow_up_pressed.png and b/core/assets/common/screen/statistics/gfx/arrow_up_pressed.png differ diff --git a/core/assets/common/screen/statistics/gfx/bookmark1.png b/core/assets/common/screen/statistics/gfx/bookmark1.png index 17e3a75f4b1163bfd8f31349ecbe18a4bae3c096..faafe62a51bcb4166af383c3c7e5545d82808087 100644 Binary files a/core/assets/common/screen/statistics/gfx/bookmark1.png and b/core/assets/common/screen/statistics/gfx/bookmark1.png differ diff --git a/core/assets/common/screen/statistics/gfx/bookmark1_pressed.png b/core/assets/common/screen/statistics/gfx/bookmark1_pressed.png index de155565c07d3dbc6f9e789ec55ceb604f4a4906..21571ad1abc765d427557c6acb09f438e0b02362 100644 Binary files a/core/assets/common/screen/statistics/gfx/bookmark1_pressed.png and b/core/assets/common/screen/statistics/gfx/bookmark1_pressed.png differ diff --git a/core/assets/common/screen/statistics/gfx/bookmark2.png b/core/assets/common/screen/statistics/gfx/bookmark2.png index 748219cf2434befe768cc9da2ee27a4caf39dc6c..55b6250ce89fcf22fd3b2110531596bfef71648a 100644 Binary files a/core/assets/common/screen/statistics/gfx/bookmark2.png and b/core/assets/common/screen/statistics/gfx/bookmark2.png differ diff --git a/core/assets/common/screen/statistics/gfx/bookmark2_pressed.png b/core/assets/common/screen/statistics/gfx/bookmark2_pressed.png index 1ebed0b50811df770d7c2fed7392fccc3ebc6d46..0ff8510d3c6f8ea1c1216af43d01e82259379759 100644 Binary files a/core/assets/common/screen/statistics/gfx/bookmark2_pressed.png and b/core/assets/common/screen/statistics/gfx/bookmark2_pressed.png differ diff --git a/core/assets/common/screen/statistics/gfx/bookmark3.png b/core/assets/common/screen/statistics/gfx/bookmark3.png index 248956ee248c9d29a8a005111944e9a0c2bf2912..bf9a09d45b0b160bf24d61a5bdab26edf6e98c60 100644 Binary files a/core/assets/common/screen/statistics/gfx/bookmark3.png and b/core/assets/common/screen/statistics/gfx/bookmark3.png differ diff --git a/core/assets/common/screen/statistics/gfx/bookmark3_pressed.png b/core/assets/common/screen/statistics/gfx/bookmark3_pressed.png index 8932cd2126f41b3920cfe1678da003f389a34221..6d4544f32fead2e981df30bb48bf7b5566efe60a 100644 Binary files a/core/assets/common/screen/statistics/gfx/bookmark3_pressed.png and b/core/assets/common/screen/statistics/gfx/bookmark3_pressed.png differ diff --git a/core/assets/cs/screen/nightwatchpage/gfx/startbutton.png b/core/assets/cs/screen/nightwatchpage/gfx/startbutton.png index a08e4fb798fd89f9a0b68226b65bfadc84ad936c..e1c22c819856d5c7318e859470bb0dbee1b421f6 100644 Binary files a/core/assets/cs/screen/nightwatchpage/gfx/startbutton.png and b/core/assets/cs/screen/nightwatchpage/gfx/startbutton.png differ diff --git a/core/assets/cs/screen/nightwatchpage/gfx/startbutton_pressed.png b/core/assets/cs/screen/nightwatchpage/gfx/startbutton_pressed.png index b6ded16e2a6d75564ed00a6c2a59ddffa4c729a6..e23fadb7cfc3c7fd4d322167823cbcf95c4ddca7 100644 Binary files a/core/assets/cs/screen/nightwatchpage/gfx/startbutton_pressed.png and b/core/assets/cs/screen/nightwatchpage/gfx/startbutton_pressed.png differ diff --git a/core/assets/de/screen/nightwatchpage/gfx/startbutton.png b/core/assets/de/screen/nightwatchpage/gfx/startbutton.png index 7667886e786f5a5086479a6a79b7eba3e1066fe2..bd87164f66c9b22d645e877f92981ba67bbc1a36 100644 Binary files a/core/assets/de/screen/nightwatchpage/gfx/startbutton.png and b/core/assets/de/screen/nightwatchpage/gfx/startbutton.png differ diff --git a/core/assets/de/screen/nightwatchpage/gfx/startbutton_pressed.png b/core/assets/de/screen/nightwatchpage/gfx/startbutton_pressed.png index 44d037b6c0d0b438c3367883b55ee2cfbc45b9d3..dee5160c8327bb11b00af467ec15a7da32bdde25 100644 Binary files a/core/assets/de/screen/nightwatchpage/gfx/startbutton_pressed.png and b/core/assets/de/screen/nightwatchpage/gfx/startbutton_pressed.png differ diff --git a/core/assets/sk/screen/nightwatchpage/gfx/startbutton.png b/core/assets/sk/screen/nightwatchpage/gfx/startbutton.png index e636fb42fb127f6ab8cd6bbe027672b2ca613b1b..237d9e9e76031877c407184f97834bad5111e324 100644 Binary files a/core/assets/sk/screen/nightwatchpage/gfx/startbutton.png and b/core/assets/sk/screen/nightwatchpage/gfx/startbutton.png differ diff --git a/core/assets/sk/screen/nightwatchpage/gfx/startbutton_pressed.png b/core/assets/sk/screen/nightwatchpage/gfx/startbutton_pressed.png index a51901669e877752acbe7a920e5ab6221d0d8358..5b57b4190142f2dbfadae932e899292f63cbb2eb 100644 Binary files a/core/assets/sk/screen/nightwatchpage/gfx/startbutton_pressed.png and b/core/assets/sk/screen/nightwatchpage/gfx/startbutton_pressed.png differ diff --git a/core/src/cz/nic/tablexia/game/GameDefinition.java b/core/src/cz/nic/tablexia/game/GameDefinition.java index a58c0962657dafa5c67e690318c8b6fad1a88b93..855035ec0925594171a970b73121fd4855ac56c3 100644 --- a/core/src/cz/nic/tablexia/game/GameDefinition.java +++ b/core/src/cz/nic/tablexia/game/GameDefinition.java @@ -47,10 +47,20 @@ public enum GameDefinition implements ApplicationEvent, IMenuItem { RUNES (7, ApplicationTextManager.ApplicationTextsAssets.GAME_RUNES_TITLE, ApplicationTextManager.ApplicationTextsAssets.GAME_RUNES_DESCRIPTION, RunesPageScreen.class, RunesGame.class, false, new RunesGameResultResolver(),ApplicationTextManager.ApplicationTextsAssets.GAME_SCORE, ApplicationTextManager.ApplicationTextsAssets.GAME_AVERAGE_SCORE), CRIME_SCENE (8, ApplicationTextManager.ApplicationTextsAssets.GAME_CRIME_SCENE_TITLE, ApplicationTextManager.ApplicationTextsAssets.GAME_CRIME_SCENE_DESCRIPTION, CrimeScenePageScreen.class, CrimeSceneGame.class, false, new CrimeSceneGame.GameResultResolver(), ApplicationTextManager.ApplicationTextsAssets.GAME_SCORE, ApplicationTextManager.ApplicationTextsAssets.GAME_AVERAGE_SCORE); - public interface GameResultResolver { - AbstractTablexiaGame.GameResult getGameCupsResult(Game game); - float getGameScoreResult(Game game); - List<GameScore> getGameScoreList(GameDifficulty difficulty, AbstractTablexiaGame.GameResult result); + public static abstract class GameResultResolver { + public abstract AbstractTablexiaGame.GameResult getGameCupsResult(Game game); + public abstract float getGameScoreResult(Game game); + public abstract List<GameScore> getGameScoreList(GameDifficulty difficulty, AbstractTablexiaGame.GameResult result); + + //Override this method if you want to use different values to sort graphs in statistics screen (eg. CrimeScene) + public float getStatisticsScore(Game game) { + return getGameScoreResult(game); + } + + //Override this method if you want to show different formatted score in graph detail dialogs in statistics screen (eg. Pursuit or CrimeScene) + public String getFormattedScoreForStatistics(Game game) { + return Integer.toString(Math.round(getGameScoreResult(game))); + } } private int gameNumber; diff --git a/core/src/cz/nic/tablexia/game/games/crime_scene/CrimeSceneGame.java b/core/src/cz/nic/tablexia/game/games/crime_scene/CrimeSceneGame.java index 23d4ca03c4ca28165d9e1e0c345195eebaaf3dcf..645ebf2e305da0c47b44082e416ef9229a68af53 100644 --- a/core/src/cz/nic/tablexia/game/games/crime_scene/CrimeSceneGame.java +++ b/core/src/cz/nic/tablexia/game/games/crime_scene/CrimeSceneGame.java @@ -108,7 +108,8 @@ public class CrimeSceneGame extends AbstractTablexiaGame<CrimeSceneGameState> { private int actualRound = 1; private int wrongRounds = 0; - public static class GameResultResolver implements GameDefinition.GameResultResolver { + public static class GameResultResolver extends GameDefinition.GameResultResolver { + private static final String FORMATTED_TEXT_FOR_STATISTICS_FORMAT = "%d / %d"; @Override public AbstractTablexiaGame.GameResult getGameCupsResult(Game game) { @@ -121,6 +122,17 @@ public class CrimeSceneGame extends AbstractTablexiaGame<CrimeSceneGameState> { return Float.parseFloat(game.getGameScore(SCORE_KEY_COUNT, String.valueOf(correctSounds))); } + @Override + public float getStatisticsScore(Game game) { + //Score to sort graph values in statistics is calculated as "actualScore / maxScore". So 2 cups on hard difficulty wont show up higher than 3 cups on medium difficulty. + return getGameScoreResult(game) / (float)(getMaxScoreForDifficulty(GameDifficulty.getGameDifficultyForDifficultyNumber(game.getGameDifficulty()))); + } + + @Override + public String getFormattedScoreForStatistics(Game game) { + return String.format(FORMATTED_TEXT_FOR_STATISTICS_FORMAT, Math.round(getGameScoreResult(game)), getMaxScoreForDifficulty(GameDifficulty.getGameDifficultyForDifficultyNumber(game.getGameDifficulty()))); + } + @Override public List<GameScore> getGameScoreList(GameDifficulty difficulty, GameResult result) { ArrayList gameScoreList = new ArrayList<GameScore>(1); @@ -549,14 +561,18 @@ public class CrimeSceneGame extends AbstractTablexiaGame<CrimeSceneGameState> { actionsStripWidget.getSelectedActions().size() + objectsLayer.getChildren().size == getData().getSolution().size(); } - private int getMaxScore() { + private static int getMaxScoreForDifficulty(GameDifficulty gameDifficulty) { int maxScore = 0; for(int i = 0; i < MAX_ROUNDS; i++) { - maxScore += CrimeSceneDifficulty.getCrimeSceneDifficultyForGameDifficulty(getGameDifficulty()).getNumberOfObjects() + i; + maxScore += CrimeSceneDifficulty.getCrimeSceneDifficultyForGameDifficulty(gameDifficulty).getNumberOfObjects() + i; } return maxScore; } + private int getMaxScore() { + return getMaxScoreForDifficulty(getGameDifficulty()); + } + private void playAllSounds() { preparePlaySoundScreen(true); playSoundScreen.playSounds(); diff --git a/core/src/cz/nic/tablexia/game/games/crime_scene/model/ResultStars.java b/core/src/cz/nic/tablexia/game/games/crime_scene/model/ResultStars.java index be59c52d666e055424635b5f7c1bdd872415dd5d..906faed755f872724ace4d78a2cdd96c9786ac5c 100644 --- a/core/src/cz/nic/tablexia/game/games/crime_scene/model/ResultStars.java +++ b/core/src/cz/nic/tablexia/game/games/crime_scene/model/ResultStars.java @@ -48,7 +48,7 @@ public enum ResultStars { return 0; } - private int getScoreForDifficulty(GameDifficulty gameDifficulty) { + public int getScoreForDifficulty(GameDifficulty gameDifficulty) { switch(gameDifficulty) { case EASY: return easyScore; diff --git a/core/src/cz/nic/tablexia/game/games/in_the_darkness/InTheDarknessGame.java b/core/src/cz/nic/tablexia/game/games/in_the_darkness/InTheDarknessGame.java index c6b8fa51d8ac134cfd749b0571c8dbe492d88984..d6c48092ac80ab48e03d9c2bbda08f8b21835ee9 100644 --- a/core/src/cz/nic/tablexia/game/games/in_the_darkness/InTheDarknessGame.java +++ b/core/src/cz/nic/tablexia/game/games/in_the_darkness/InTheDarknessGame.java @@ -66,7 +66,7 @@ import static com.badlogic.gdx.scenes.scene2d.actions.Actions.sequence; */ public class InTheDarknessGame extends AbstractTablexiaGame<List<MapWidget>> implements MapWidget.TileMapClickListener { - public static class GameResultResolver implements GameDefinition.GameResultResolver { + public static class GameResultResolver extends GameDefinition.GameResultResolver { public static final int ERROR_COUNT_THREE_STARS = 2; public static final int ERROR_COUNT_TWO_STARS = 4; public static final int ERROR_COUNT_ONE_STAR = 8; diff --git a/core/src/cz/nic/tablexia/game/games/kidnapping/util/KidnappingResultResolver.java b/core/src/cz/nic/tablexia/game/games/kidnapping/util/KidnappingResultResolver.java index 78f554df3b51ec32349920cdcb47cc9a0115ca59..b18ba6c30314ae2233bfcb3936c618f3d8240f16 100644 --- a/core/src/cz/nic/tablexia/game/games/kidnapping/util/KidnappingResultResolver.java +++ b/core/src/cz/nic/tablexia/game/games/kidnapping/util/KidnappingResultResolver.java @@ -6,17 +6,15 @@ import java.util.List; import cz.nic.tablexia.game.AbstractTablexiaGame; import cz.nic.tablexia.game.GameDefinition; import cz.nic.tablexia.game.difficulty.GameDifficulty; -import cz.nic.tablexia.game.games.kidnapping.KidnappingGame; import cz.nic.tablexia.game.games.kidnapping.Properties; import cz.nic.tablexia.game.games.kidnapping.model.GameState; -import cz.nic.tablexia.game.games.robbery.RobberyGame; import cz.nic.tablexia.shared.model.Game; import cz.nic.tablexia.shared.model.GameScore; /** * Created by lhoracek on 10/6/15. */ -public class KidnappingResultResolver implements GameDefinition.GameResultResolver { +public class KidnappingResultResolver extends GameDefinition.GameResultResolver { @Override public AbstractTablexiaGame.GameResult getGameCupsResult(Game game) { int[] levels = Properties.GAMERULE_CUPS[game.getGameDifficulty() - 1]; diff --git a/core/src/cz/nic/tablexia/game/games/night_watch/NightWatchGame.java b/core/src/cz/nic/tablexia/game/games/night_watch/NightWatchGame.java index 5e52bd016915392424b3172d792e4b544330daee..c02485db71db8405f6515b7d30d7a4b14c37873d 100644 --- a/core/src/cz/nic/tablexia/game/games/night_watch/NightWatchGame.java +++ b/core/src/cz/nic/tablexia/game/games/night_watch/NightWatchGame.java @@ -51,7 +51,7 @@ import cz.nic.tablexia.util.ui.dialog.components.TwoColumnContentDialogComponent * Created by Václav TarantĂk on 6.3.15. */ public class NightWatchGame extends AbstractTablexiaGame<int[][]> { - public static class GameResultResolver implements GameDefinition.GameResultResolver { + public static class GameResultResolver extends GameDefinition.GameResultResolver { @Override public GameResult getGameCupsResult(Game game) { int correctWindows = LEVELS_COUNT - Integer.valueOf(game.getGameScoreValue(SCORE_WRONG_WINDOWS)); diff --git a/core/src/cz/nic/tablexia/game/games/pursuit/PursuitGame.java b/core/src/cz/nic/tablexia/game/games/pursuit/PursuitGame.java index c24eddeec2f97b818fda9602a687a77ceddf51d1..904632d63915a953009d8f0bd66eacee7da5ccb0 100644 --- a/core/src/cz/nic/tablexia/game/games/pursuit/PursuitGame.java +++ b/core/src/cz/nic/tablexia/game/games/pursuit/PursuitGame.java @@ -66,7 +66,7 @@ import cz.nic.tablexia.util.ui.dialog.components.TwoColumnContentDialogComponent */ public class PursuitGame extends AbstractTablexiaGame<int[][]> { - public static class GameResultResolver implements GameDefinition.GameResultResolver { + public static class GameResultResolver extends GameDefinition.GameResultResolver { @Override public GameResult getGameCupsResult(Game game) { return GameRulesHelper.getNumberOfStarsForTime(GameDifficulty.getGameDifficultyForDifficultyNumber(game.getGameDifficulty()), GameDAO.getGameDuration(game, false)); @@ -83,6 +83,22 @@ public class PursuitGame extends AbstractTablexiaGame<int[][]> { gameScores.add(new GameScore(SCORE_KEY_MOVE_COUNT, Integer.toString(30))); return gameScores; } + + @Override + public String getFormattedScoreForStatistics(Game game) { + float time = getGameScoreResult(game); + + int minutes = (int) ((time / 1000) / 60); + int seconds = (int) ((time / 1000) % 60); + + if(minutes == 0) { + return seconds + "s"; + } else if (seconds == 0){ + return minutes + "m "; + } else { + return minutes + "m " + seconds + "s"; + } + } } private enum ResultMapping { diff --git a/core/src/cz/nic/tablexia/game/games/robbery/RobberyGame.java b/core/src/cz/nic/tablexia/game/games/robbery/RobberyGame.java index 471f4d3cda892766c5336b5fba4482f931ccb6c4..c0d2377cabd6eb6bb9d4e21053d71ee22dfe1761 100644 --- a/core/src/cz/nic/tablexia/game/games/robbery/RobberyGame.java +++ b/core/src/cz/nic/tablexia/game/games/robbery/RobberyGame.java @@ -33,7 +33,7 @@ import cz.nic.tablexia.util.ui.dialog.components.TwoColumnContentDialogComponent public class RobberyGame extends AbstractTablexiaGame<GameRule> { - public static class GameResultResolver implements GameDefinition.GameResultResolver { + public static class GameResultResolver extends GameDefinition.GameResultResolver { public static final int FINAL_SCORE_THREE_STARS = 47; public static final int FINAL_SCORE_TWO_STARS = 29; public static final int FINAL_SCORE_ONE_STAR = 15; diff --git a/core/src/cz/nic/tablexia/game/games/runes/RunesGame.java b/core/src/cz/nic/tablexia/game/games/runes/RunesGame.java index 9057abde025cc1aeb2e54b18e9444826b67cfbb8..0619ff2ff80688881480249baa6357d3176b9d41 100644 --- a/core/src/cz/nic/tablexia/game/games/runes/RunesGame.java +++ b/core/src/cz/nic/tablexia/game/games/runes/RunesGame.java @@ -40,7 +40,6 @@ import cz.nic.tablexia.shared.model.Game; import cz.nic.tablexia.util.Log; import cz.nic.tablexia.util.Utility; import cz.nic.tablexia.util.ui.TablexiaLabel; -import cz.nic.tablexia.util.ui.actionwidget.Action; import cz.nic.tablexia.util.ui.dialog.components.FixedSpaceContentDialogComponent; import cz.nic.tablexia.util.ui.dialog.components.TablexiaDialogComponentAdapter; import cz.nic.tablexia.util.ui.dialog.components.TextContentDialogComponent; @@ -52,7 +51,7 @@ public class RunesGame extends AbstractTablexiaGame<RunesGameState> { private static final int ONE_SECOND_DELAY = 1; - private static final float SIDEBAR_RELATIVE_WIDTH = 0.17f; + public static final float SIDEBAR_RELATIVE_WIDTH = 0.17f; private static final int SIDEBAR_ITEMS_PAD = 10; private static final float TARGET_PLATE_RELATIVE_HEIGHT = 0.45f; private static final float HEALTHBAR_RELATIVE_HEIGHT = 0.2f; diff --git a/core/src/cz/nic/tablexia/game/games/runes/actors/RunesHolder.java b/core/src/cz/nic/tablexia/game/games/runes/actors/RunesHolder.java index 0333666f5510eda1b69b7e9a581262a6eed8e789..e7c643bd60eed1917f97b8231cb628c2109b8439 100644 --- a/core/src/cz/nic/tablexia/game/games/runes/actors/RunesHolder.java +++ b/core/src/cz/nic/tablexia/game/games/runes/actors/RunesHolder.java @@ -14,7 +14,7 @@ import cz.nic.tablexia.TablexiaSettings; import cz.nic.tablexia.game.common.TablexiaRandom; import cz.nic.tablexia.game.common.media.GfxLibrary; import cz.nic.tablexia.game.difficulty.GameDifficulty; -import cz.nic.tablexia.game.games.runes.assets.RuneDefinition; +import cz.nic.tablexia.game.games.runes.RunesGame; import cz.nic.tablexia.game.games.runes.helper.PositionDefinition; import cz.nic.tablexia.game.games.runes.helper.RuneDescription; import cz.nic.tablexia.game.games.runes.model.RunesDifficultyDefinition; @@ -80,10 +80,6 @@ public class RunesHolder extends Group { return false; } - public int getRunesCount() { - return runesCount; - } - public int getWrongRunesCount() { return runesCount - holderTargets.size(); } @@ -135,10 +131,6 @@ public class RunesHolder extends Group { setWidth(getWidth() + actor.getWidth() + runesGroup.getSpace()); } - public void setHolderTargets(List<RuneDescription> runeDescriptions) { - holderTargets = runeDescriptions; - } - /** * Set scale value depending on position (folded holder can be smaller/bigger depending on PositionDefinition values) * @@ -182,11 +174,12 @@ public class RunesHolder extends Group { setTouchable(Touchable.childrenOnly); toFront(); prevX = getX(); + float stageWidth = getStage().getWidth() * (1-RunesGame.SIDEBAR_RELATIVE_WIDTH); float prevMid = prevX + getWidth() * 0.5f * getScaleX(); setScale(UNFOLDED_SCALE); float newX = prevMid - getWidth() * getScaleX() * 0.5f; - if (newX + getWidth() * getScaleX() >= getStage().getWidth() - PAD) { - setX(getStage().getWidth() - PAD - getWidth() * getScaleX()); + if (newX + getWidth() * getScaleX() >= stageWidth - PAD) { + setX(stageWidth - PAD - getWidth() * getScaleX()); } else if (newX <= 0) { setX(PAD); } else { @@ -204,7 +197,7 @@ public class RunesHolder extends Group { prevX = 0; setAlternativeScale(positionDefinition.getScale()); setPosition(positionDefinition.getX() * width, positionDefinition.getY() * height); - maxEntities = positionDefinition.getMaxRunes(); + maxEntities = PositionDefinition.getMaxChildrenCount(gameDifficulty,positionDefinition); } public boolean isFolded() { diff --git a/core/src/cz/nic/tablexia/game/games/runes/helper/PositionDefinition.java b/core/src/cz/nic/tablexia/game/games/runes/helper/PositionDefinition.java index c23806bde6b8efc631a0930b49fac02b37f935f6..386df74e77e2bdde890f55a79644454bf8146259 100644 --- a/core/src/cz/nic/tablexia/game/games/runes/helper/PositionDefinition.java +++ b/core/src/cz/nic/tablexia/game/games/runes/helper/PositionDefinition.java @@ -14,43 +14,35 @@ import cz.nic.tablexia.game.games.runes.model.RunesGameProperties; */ public enum PositionDefinition { - //x,y, max height, max runes - - POS1(0.22f,0.14f), - POS2(0.22f,0.51f), - POS3(0.22f,0.87f), - POS4(0.58f,0.71f,3), - POS5(0.58f,0.37f,3), - POS6(0.58f,0.01f,3), - POS7(0.04f,0.57f,2), - POS8(0.02f,0.19f,2); + //x,y, max runes, max runes clusters + + POS1(0.24f, 0.14f, 5, 4), + POS2(0.24f, 0.51f, 5, 4), + POS3(0.24f, 0.87f, 5, 4), + POS4(0.62f, 0.71f, 3, 2), + POS5(0.62f, 0.37f, 3, 2), + POS6(0.62f, 0.01f, 3, 2), + POS7(0.01f, 0.57f, 3, 2), + POS8(0.01f, 0.19f, 3, 2); private static final float FOLDED_SCALE = 0.6f; - private static final int MAX_RUNES = 4; public static final PositionDefinition[] MAP_EASY = PositionDefinition.values(); public static final PositionDefinition[] MAP_MEDIUM = PositionDefinition.values(); //was meant to be different for every difficulty public static final PositionDefinition[] MAP_HARD = PositionDefinition.values(); private float x, y, scale; - private int maxRunes; - - PositionDefinition(float x, float y) { - this(x,y,FOLDED_SCALE,MAX_RUNES); - } - - PositionDefinition(float x, float y, float scale) { - this(x,y,scale,MAX_RUNES); - } + private int maxRunes, maxRunesClusters; - PositionDefinition(float x, float y, int maxRunes) { - this(x,y,FOLDED_SCALE,maxRunes); + PositionDefinition(float x, float y, int maxRunes, int maxRunesClusters) { + this(x, y, FOLDED_SCALE, maxRunes, maxRunesClusters); } - PositionDefinition(float x, float y, float scale, int maxRunes) { + PositionDefinition(float x, float y, float scale, int maxRunes, int maxRunesClusters) { this.x = x; this.y = y; this.maxRunes = maxRunes; + this.maxRunesClusters = maxRunesClusters; this.scale = scale; } @@ -71,6 +63,10 @@ public enum PositionDefinition { return y; } + public int getMaxRunesClusters() { + return maxRunesClusters; + } + private static List<PositionDefinition> getMapPositions(GameDifficulty runesDifficulty) { return Arrays.asList(RunesDifficultyDefinition.getRunesDifficultyForGameDifficulty(runesDifficulty).getPositionDefinitions()); } @@ -88,4 +84,9 @@ public enum PositionDefinition { return RunesDifficultyDefinition.getRunesDifficultyForGameDifficulty(gameDifficulty).getGroupsCount()[round]; } + public static int getMaxChildrenCount(GameDifficulty gameDifficulty, PositionDefinition positionDefinition){ + if (gameDifficulty.equals(GameDifficulty.HARD)) return positionDefinition.getMaxRunesClusters(); + else return positionDefinition.getMaxRunes(); + } + } diff --git a/core/src/cz/nic/tablexia/game/games/runes/model/RunesGameProperties.java b/core/src/cz/nic/tablexia/game/games/runes/model/RunesGameProperties.java index 941d024e1e49803766df33a2ca9d1575ebe71bd7..91fcebf851b419eda3981e08600a27ff346029d8 100644 --- a/core/src/cz/nic/tablexia/game/games/runes/model/RunesGameProperties.java +++ b/core/src/cz/nic/tablexia/game/games/runes/model/RunesGameProperties.java @@ -14,30 +14,30 @@ public class RunesGameProperties { public static final int[] CUPS_EASY = {15, 26, 38}; public static final int[] CUPS_MEDIUM = {15, 26, 38}; public static final int[] CUPS_HARD = {15, 26, 38}; - - public static final int[] GROUPS_EASY = {2,2,3,3,3,3,3,3,3,3,3,3}; - public static final int[] GROUPS_MEDIUM = {2,2,3,3,3,3,4,4,4,5,5,5}; - public static final int[] GROUPS_HARD = {2,2,3,3,3,3,4,4,5,5,6,6}; - - public static final int[] RUNES_COUNT = {6,7,8,9,10,11,11,12,13,13,14,15}; - public static final int[] RUNES_TO_FIND = {2,2,3,3,3,3,4,4,4,5,5,6}; //44 + + public static final int[] GROUPS_EASY = {3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 6, 6}; + public static final int[] GROUPS_MEDIUM = {3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 6, 6}; + public static final int[] GROUPS_HARD = {3, 3, 4, 4, 4, 4, 5, 5, 6, 6, 7, 7}; + + public static final int[] RUNES_COUNT = {6, 7, 8, 9, 10, 11, 11, 12, 13, 13, 14, 15}; + public static final int[] RUNES_TO_FIND = {2, 2, 3, 3, 3, 3, 4, 4, 4, 5, 5, 6}; //44 public static final String MFX_PATH = "common/sfx/"; - public static final String[] RESULT_SOUNDS = new String[]{ MFX_PATH + "result_0.mp3", + public static final String[] RESULT_SOUNDS = new String[]{MFX_PATH + "result_0.mp3", MFX_PATH + "result_1.mp3", MFX_PATH + "result_2.mp3", MFX_PATH + "result_3.mp3"}; - public static final String[] RESULT_TEXT = new String[]{ "game_runes_result_0", + public static final String[] RESULT_TEXT = new String[]{"game_runes_result_0", "game_runes_result_1", "game_runes_result_2", "game_runes_result_3"}; public static final String RESULT_TEXT_SUMMARY = "game_runes_stats"; - - public static int getGroupCount(GameDifficulty gameDifficulty, int round){ + + public static int getGroupCount(GameDifficulty gameDifficulty, int round) { return RunesDifficultyDefinition.getRunesDifficultyForGameDifficulty(gameDifficulty).getGroupsCount()[round]; } - + } diff --git a/core/src/cz/nic/tablexia/game/games/runes/model/RunesGameResultResolver.java b/core/src/cz/nic/tablexia/game/games/runes/model/RunesGameResultResolver.java index 5a7453c850a31a501603be866584a6feceaee027..4d6dc3a8492adccbdf4ab40fa913cae48b5e09f9 100644 --- a/core/src/cz/nic/tablexia/game/games/runes/model/RunesGameResultResolver.java +++ b/core/src/cz/nic/tablexia/game/games/runes/model/RunesGameResultResolver.java @@ -12,7 +12,7 @@ import cz.nic.tablexia.shared.model.GameScore; /** * Created by Vitaliy Vashchenko on 25.4.16. */ -public class RunesGameResultResolver implements GameDefinition.GameResultResolver { +public class RunesGameResultResolver extends GameDefinition.GameResultResolver { @Override public AbstractTablexiaGame.GameResult getGameCupsResult(Game game) { int[][] CUPS = {RunesGameProperties.CUPS_EASY, RunesGameProperties.CUPS_MEDIUM, RunesGameProperties.CUPS_HARD}; diff --git a/core/src/cz/nic/tablexia/game/games/shooting_range/tools/ShootingRangeResultResolver.java b/core/src/cz/nic/tablexia/game/games/shooting_range/tools/ShootingRangeResultResolver.java index 83f8769a9f122b98da715050c7138022cd6867cd..b192a48c1c70a7ad8446c3fd8983806e41f09077 100644 --- a/core/src/cz/nic/tablexia/game/games/shooting_range/tools/ShootingRangeResultResolver.java +++ b/core/src/cz/nic/tablexia/game/games/shooting_range/tools/ShootingRangeResultResolver.java @@ -14,7 +14,7 @@ import cz.nic.tablexia.shared.model.GameScore; /** * Created by lhoracek on 10/6/15. */ -public class ShootingRangeResultResolver implements GameDefinition.GameResultResolver { +public class ShootingRangeResultResolver extends GameDefinition.GameResultResolver { @Override public AbstractTablexiaGame.GameResult getGameCupsResult(Game game) { int[][] CUPS = {Properties.CUPS_EASY, Properties.CUPS_MEDIUM, Properties.CUPS_HARD}; diff --git a/core/src/cz/nic/tablexia/screen/statistics/StatisticsGameScoreResolver.java b/core/src/cz/nic/tablexia/screen/statistics/StatisticsGameScoreResolver.java index c1f3af4bdf59ae78979a2db45772c0cd20e9d72f..27005f9dbe012eb2a06f8c27e3102eb093760b22 100644 --- a/core/src/cz/nic/tablexia/screen/statistics/StatisticsGameScoreResolver.java +++ b/core/src/cz/nic/tablexia/screen/statistics/StatisticsGameScoreResolver.java @@ -36,7 +36,7 @@ public class StatisticsGameScoreResolver { index = 1; } lastTime = game.getGameStartTime(); - score += selectedGameDefinition.getGameResultResolver().getGameScoreResult(game); + score += selectedGameDefinition.getGameResultResolver().getStatisticsScore(game); point = score / index; index++; } @@ -81,7 +81,7 @@ public class StatisticsGameScoreResolver { public float getMaxScore(List<Game> games) { float maxScore = -Float.MAX_VALUE; for (Game game : games) { - float score = selectedGameDefinition.getGameResultResolver().getGameScoreResult(game); + float score = selectedGameDefinition.getGameResultResolver().getStatisticsScore(game); if (score > maxScore) maxScore = score; } return maxScore; @@ -90,7 +90,7 @@ public class StatisticsGameScoreResolver { public float getMinScore(List<Game> games) { float minScore = Float.MAX_VALUE; for (Game game : games) { - float score = selectedGameDefinition.getGameResultResolver().getGameScoreResult(game); + float score = selectedGameDefinition.getGameResultResolver().getStatisticsScore(game); if (score < minScore) minScore = score; } return minScore; diff --git a/core/src/cz/nic/tablexia/screen/statistics/StatisticsScreen.java b/core/src/cz/nic/tablexia/screen/statistics/StatisticsScreen.java index 24643a2b4b87ee6ac6b6a4a2056c2c178dc6f38b..cdd88074c640c427ab4b503dd1f3324cfec26449 100644 --- a/core/src/cz/nic/tablexia/screen/statistics/StatisticsScreen.java +++ b/core/src/cz/nic/tablexia/screen/statistics/StatisticsScreen.java @@ -15,6 +15,7 @@ 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; @@ -59,6 +60,7 @@ import cz.nic.tablexia.util.ui.dialog.components.TextContentDialogComponent; import cz.nic.tablexia.util.ui.dialog.components.TouchCloseDialogComponent; public class StatisticsScreen extends AbstractTablexiaScreen<Void> { + private static final ApplicationFontManager.FontType_NEW DEFAULT_FONT_TYPE = ApplicationFontManager.FontType_NEW.BOLD_16; private static final ApplicationFontManager.FontType_NEW DIFFICULTY_FONT_TYPE = ApplicationFontManager.FontType_NEW.BOLD_20; private static final ApplicationFontManager.FontType_NEW BOOKMARK_FONT_TYPE = ApplicationFontManager.FontType_NEW.BOLD_26; @@ -75,7 +77,7 @@ public class StatisticsScreen extends AbstractTablexiaScreen<Void> { 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_X_SCALE = 0.6f; 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; @@ -88,24 +90,31 @@ public class StatisticsScreen extends AbstractTablexiaScreen<Void> { private static final float UP_BUTTON_POSITION_Y_SCALE = 0.75f; private static final float UP_DOWN_BUTTON_POSITION_X_SCALE = 0.2f; private static final float DOWN_BUTTON_POSITION_Y_SCALE = 0.05f; - 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 int BOOKMARK_OPEN_TEXT_LEFT_OFFSET = 50; + + public static final String GFX_PATH = "gfx/"; + private 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 SCREEN_STATE_SWITCH_KEY = "selected_switch"; + private static final String SCREEN_STATE_GAME_KEY = "selected_game"; + private static final String SCREEN_STATE_DIFFICULTY_SET = "1"; + private static final String SCREEN_STATE_DIFFICULTY_UNSET = "0"; + 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 int BOOKMARK_OPEN_TEXT_LEFT_OFFSET = 45; private static final int BOOKMARK_OPEN_ALIGN = Align.left; - private static final int BOOKMARK_CLOSE_ALIGN = Align.right; + private static final int BOOKMARK_CLOSE_ALIGN = Align.left; + private static final int BOOKMARK_OPEN_WIDTH = 380; + private static final int BOOKMARK_CLOSE_WIDTH = 250; - 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 static final GameDefinition DEFAULT_GAME = GameDefinition.ROBBERY; + private static final int DIFFICULTY_BUTTON_SIZE = 70; + private static final int DIFFICULTY_LABEL_UNDERLINE_HEIGHT = 2; + private static final Color DIFFICULTY_LABEL_UNDERLINE_COLOR = Color.BLACK; + private static final String DIFFICULTY_LABEL_TEXT_PREFIX_KEY = "gamedifficulty_"; + private static final ApplicationFontManager.FontType_NEW DIALOG_BOLD_FONT = ApplicationFontManager.FontType_NEW.BOLD_16; private Group content; private Image background; @@ -136,11 +145,11 @@ public class StatisticsScreen extends AbstractTablexiaScreen<Void> { @Override protected void screenPaused(Map<String, String> screenState) { - screenState.put(DIFFICULTY_EASY_KEY, String.valueOf(selectedGameDifficulties.contains(GameDifficulty.EASY))); - screenState.put(DIFFICULTY_MEDIUM_KEY, String.valueOf(selectedGameDifficulties.contains(GameDifficulty.MEDIUM))); - screenState.put(DIFFICULTY_HARD_KEY, String.valueOf(selectedGameDifficulties.contains(GameDifficulty.HARD))); - screenState.put(SELECTED_GAME_KEY, Integer.toString(selectedGameDefinition.getGameNumber())); - screenState.put(SELECTED_SWITCH_KEY, String.valueOf(graphStyle == GraphStyle.DAILY ? 0 : 2)); + screenState.put(GameDifficulty.EASY.name(), String.valueOf(selectedGameDifficulties.contains(GameDifficulty.EASY) ? SCREEN_STATE_DIFFICULTY_SET : SCREEN_STATE_DIFFICULTY_UNSET)); + screenState.put(GameDifficulty.MEDIUM.name(), String.valueOf(selectedGameDifficulties.contains(GameDifficulty.MEDIUM) ? SCREEN_STATE_DIFFICULTY_SET : SCREEN_STATE_DIFFICULTY_UNSET)); + screenState.put(GameDifficulty.HARD.name(), String.valueOf(selectedGameDifficulties.contains(GameDifficulty.HARD) ? SCREEN_STATE_DIFFICULTY_SET : SCREEN_STATE_DIFFICULTY_UNSET)); + screenState.put(SCREEN_STATE_GAME_KEY, Integer.toString(selectedGameDefinition.getGameNumber())); + screenState.put(SCREEN_STATE_SWITCH_KEY, String.valueOf(graphStyle == GraphStyle.DAILY ? 0 : 2)); } @Override @@ -191,23 +200,33 @@ public class StatisticsScreen extends AbstractTablexiaScreen<Void> { for (GameDifficulty gameDifficulty : GameDifficulty.getVisibleGameDifficultyList()) { String diffString = gameDifficulty.name().toLowerCase(); + final Image difficultyLabelUnderLine = new Image(getColorTextureRegion(DIFFICULTY_LABEL_UNDERLINE_COLOR)); TablexiaButton diffButton = new TablexiaButton(null, false, getScreenTextureRegion(GFX_PATH + "difficultyradio_" + diffString + "_unpressed"), getScreenTextureRegion(GFX_PATH + "difficultyradio_" + diffString + "_pressed"), getScreenTextureRegion(GFX_PATH + "difficultyradio_" + diffString + "_pressed"), - null) + null) { + + @Override + public void setChecked() { + super.setChecked(); + difficultyLabelUnderLine.setVisible(true); + } + + @Override + public void setUnchecked() { + super.setUnchecked(); + difficultyLabelUnderLine.setVisible(false); + } + } .setButtonSize(DIFFICULTY_BUTTON_SIZE, DIFFICULTY_BUTTON_SIZE) .checkable(true) .setInputListener(difficultyClickListener) .adaptiveSize(true); difficulties.addActor(diffButton); - if(!isUnderScaleThreshold()) { - TablexiaLabel diffLabel = new TablexiaLabel(ApplicationTextManager.getInstance().getText("gamedifficulty_" + diffString), new TablexiaLabel.TablexiaLabelStyle(DIFFICULTY_FONT_TYPE, Color.BLACK)); - difficulties.addActor(diffLabel); - } + prepareDifficultyButtonLabel(difficultyLabelUnderLine, diffString); diffButton.setUserObject(gameDifficulty); - setDifficultyButtonByDifficulty(gameDifficulty, screenState, diffButton); - difficultyButtons.put(gameDifficulty,diffButton); + difficultyButtons.put(gameDifficulty, diffButton); } difficulties.setScale(DIFFICULTIES_SCALE); content.addActor(difficulties); @@ -219,7 +238,6 @@ public class StatisticsScreen extends AbstractTablexiaScreen<Void> { notebook.fill(); content.addActor(bookmarksGroup); - boolean gameFromDBLoaded = false; for (int i = 0; i < GameMenuDefinition.values().length; i++) { final GameMenuDefinition gameMenuDefinition = GameMenuDefinition.values()[i]; @@ -236,6 +254,8 @@ public class StatisticsScreen extends AbstractTablexiaScreen<Void> { super.setChecked(); getLabel().setAlignment(BOOKMARK_OPEN_ALIGN); setTouchable(Touchable.disabled); + setWidth(BOOKMARK_OPEN_WIDTH); + prepareButtonPosition(this); } @Override @@ -243,13 +263,17 @@ public class StatisticsScreen extends AbstractTablexiaScreen<Void> { super.setUnchecked(); getLabel().setAlignment(BOOKMARK_CLOSE_ALIGN); setTouchable(Touchable.enabled); + setWidth(BOOKMARK_CLOSE_WIDTH); + prepareButtonPosition(this); } }; + button.adaptiveSize(false); button.setTouchable(Touchable.enabled); - button.getLabel().setAlignment(Align.right); + button.getLabel().setAlignment(BOOKMARK_CLOSE_ALIGN); + button.getLabel().setWrap(false); button.fontType(BOOKMARK_FONT_TYPE); button.setUserObject(gameMenuDefinition); - button.setWidth(getScreenTextureRegion(GFX_PATH + BOOKMARK_TEXT + BOOKMARKS_TEXTURES[i]).getRegionWidth() * SELECTED_GAME_WIDTH); + button.setWidth(BOOKMARK_CLOSE_WIDTH); button.setY((GameMenuDefinition.values().length - i) * BOOKMARKS_PADDING * getViewportHeight()); button.setInputListener(new ClickListener() { @Override @@ -259,22 +283,34 @@ public class StatisticsScreen extends AbstractTablexiaScreen<Void> { }); bookmarksGroup.addActor(button); - - //if user selected some graphs on last session, select them - if(selectGame(screenState, gameMenuDefinition.getGameDefinition()) && !gameFromDBLoaded) gameFromDBLoaded = true; } - //if not loaded from DB, select first available or default game and difficulty - if(!gameFromDBLoaded)selectFirstGameAndDifficultyAvailable(); - getStage().addActor(content); screenResized(0, 0); } + private void prepareDifficultyButtonLabel(Image underLine, String name) { + if(!isUnderScaleThreshold()) { + VerticalGroup diffLabelGroup = new VerticalGroup(); + TablexiaLabel diffLabel = new TablexiaLabel(ApplicationTextManager.getInstance().getText(DIFFICULTY_LABEL_TEXT_PREFIX_KEY + name), new TablexiaLabel.TablexiaLabelStyle(DIFFICULTY_FONT_TYPE, Color.BLACK)); + underLine.getDrawable().setMinWidth(diffLabel.getWidth()); + underLine.getDrawable().setMinHeight(DIFFICULTY_LABEL_UNDERLINE_HEIGHT); + diffLabelGroup.addActor(diffLabel); + diffLabelGroup.addActor(underLine); + difficulties.addActor(diffLabelGroup); + } + } + @Override protected void screenVisible(Map<String, String> screenState) { - super.screenVisible(screenState); - datasetChanged(); + if (screenState.containsKey(SCREEN_STATE_GAME_KEY)){ + selectGame(GameDefinition.getGameDefinitionForGameNumber(Integer.parseInt(screenState.get(SCREEN_STATE_GAME_KEY)))); + for (GameDifficulty gameDifficulty: GameDifficulty.getVisibleGameDifficultyList()) { + setDifficultyButtonChecked(screenState.containsKey(gameDifficulty.name()) && SCREEN_STATE_DIFFICULTY_SET.equals(screenState.get(gameDifficulty.name())), gameDifficulty); + } + } else { + selectFirstGameAndDifficultyAvailable(); + } } @Override @@ -317,17 +353,13 @@ public class StatisticsScreen extends AbstractTablexiaScreen<Void> { boolean gameSelected = false; for(int i = 1; i < GameMenuDefinition.values().length+1; i++) { games = getGames(GameDefinition.getGameDefinitionForGameNumber(i)); - if(games.size() > 0) { - - GameDifficulty difficulty; - for(Game game : games) { - difficulty = GameDifficulty.getByGame(game); - if(difficulty.hasScore()) { - selectGame(GameDefinition.getGameDefinitionForGameNumber(i)); - setDifficultyButtonChecked(difficultyButtons.get(difficulty), true, difficulty); - gameSelected = true; - break; - } + for(Game game : games) { + GameDifficulty difficulty = GameDifficulty.getByGame(game); + if(difficulty.hasScore()) { + selectGame(GameDefinition.getGameDefinitionForGameNumber(i)); + setDifficultyButtonChecked(true, difficulty); + gameSelected = true; + break; } } if(gameSelected) break; @@ -335,43 +367,22 @@ public class StatisticsScreen extends AbstractTablexiaScreen<Void> { if(!gameSelected) { selectGame(DEFAULT_GAME); - setDifficultyButtonChecked((TablexiaButton)difficulties.getChildren().get(0),true,GameDifficulty.DEFAULT_DIFFICULTY); - } - } - - 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); - break; - - case MEDIUM: - if(screenState.containsKey(DIFFICULTY_MEDIUM_KEY)) setDifficultyButtonChecked(button, Boolean.parseBoolean(screenState.get(DIFFICULTY_MEDIUM_KEY)), GameDifficulty.MEDIUM); - break; - - case HARD: - if(screenState.containsKey(DIFFICULTY_HARD_KEY)) setDifficultyButtonChecked(button, Boolean.parseBoolean(screenState.get(DIFFICULTY_HARD_KEY)), GameDifficulty.HARD); - break; + setDifficultyButtonChecked(true, GameDifficulty.DEFAULT_DIFFICULTY); } } - private void setDifficultyButtonChecked(TablexiaButton button, boolean selected, GameDifficulty difficulty) { - if (button != null) { - button.setChecked(selected); - if(selected) selectedGameDifficulties.add(difficulty); + private void setDifficultyButtonChecked(boolean selected, GameDifficulty difficulty) { + TablexiaButton difficultyButton = difficultyButtons.get(difficulty); + if (difficultyButton != null) { + difficultyButton.setChecked(selected); + if(selected) { + selectedGameDifficulties.add(difficulty); + } + } else { + Log.err(getClass(), "No difficulty button for difficulty definition: " + difficulty); } } - /** used when loading selected game bookmark from DB */ - private boolean selectGame(Map<String, String> screenState, GameDefinition definition) { - if (screenState.containsKey(SELECTED_GAME_KEY) && - Integer.parseInt(screenState.get(SELECTED_GAME_KEY)) == definition.getGameNumber()){ - selectGame(definition); - return true; - } - return false; - } - /**used when selecting first available or default game */ private void selectGame(GameDefinition definition) { if(selectedGameDefinition == definition) return; @@ -389,7 +400,7 @@ public class StatisticsScreen extends AbstractTablexiaScreen<Void> { } private void setSelectedGraphType(Map<String,String> screenState) { - if(screenState.containsKey(SELECTED_SWITCH_KEY)) graphStyle = (Integer.parseInt(screenState.get(SELECTED_SWITCH_KEY)) == 0 ? GraphStyle.DAILY : GraphStyle.AVERAGE); + if(screenState.containsKey(SCREEN_STATE_SWITCH_KEY)) graphStyle = (Integer.parseInt(screenState.get(SCREEN_STATE_SWITCH_KEY)) == 0 ? GraphStyle.DAILY : GraphStyle.AVERAGE); switchGraph.switchToStep(graphStyle == GraphStyle.AVERAGE ? 2 : 0); } @@ -453,7 +464,7 @@ public class StatisticsScreen extends AbstractTablexiaScreen<Void> { dateText, String.format("%s %s", ApplicationTextManager.getInstance().getText(GameDefinition.getGameDefinitionForGameNumber(game.getGameNumber()).getStatisticsAverageScoreDialogText()), - getCorrectedScore(selectedGameDefinition, averageScore))); + getCorrectedScore(selectedGameDefinition, game))); } @Override @@ -588,30 +599,8 @@ public class StatisticsScreen extends AbstractTablexiaScreen<Void> { return false; } - /**In some games is time used as score (less means better). - In order to calculate graph points, it is converted to 1/time. - This function makes the opposite to show real time. - Other scores are converted to text representing minutes and seconds */ private String getCorrectedScore(GameDefinition gameDefinition, Game game) { - return getCorrectedScore(gameDefinition, gameDefinition.getGameResultResolver().getGameScoreResult(game)); - } - - private String getCorrectedScore(GameDefinition gameDefinition, float score) { - if(gameDefinition == GameDefinition.PURSUIT) return millisecondsToTimeText(score); - return String.valueOf(Math.round(score)); - } - - private String millisecondsToTimeText(float time) { - int minutes = (int) (time/1000) / 60; - int seconds = (int) ((time/1000) % 60); - - if(minutes == 0) { - return seconds + "s"; - } else if (seconds == 0){ - return minutes + "m "; - } else { - return minutes + "m " + seconds + "s"; - } + return gameDefinition.getGameResultResolver().getFormattedScoreForStatistics(game); } /**returning absolute value of clicked position on X axis on screen*/ @@ -678,8 +667,7 @@ public class StatisticsScreen extends AbstractTablexiaScreen<Void> { downButton.setPosition(getViewportWidth() * UP_DOWN_BUTTON_POSITION_X_SCALE, getViewportHeight() * DOWN_BUTTON_POSITION_Y_SCALE); bookmarksGroup.setY(getViewportHeight() * BOOKMARKS_GROUP_POSITION_Y_SCALE); for(Actor button : bookmarksGroup.getChildren()) { - button.setPosition(getViewportWidth() * BOOKMARK_POSITION_X_SCALE - button.getWidth(), - (GameMenuDefinition.values().length - bookmarksGroup.getChildren().indexOf(button, true)) * BOOKMARKS_PADDING * getViewportHeight()); + prepareButtonPosition(button); } scrollPane.setSize(graphs.getWidth(), graphs.getHeight()); @@ -687,6 +675,11 @@ public class StatisticsScreen extends AbstractTablexiaScreen<Void> { if (graphPane != null) graphPaneHolder.setSize(graphPane.getWidth(), graphPane.getHeight()); } + private void prepareButtonPosition(Actor button) { + button.setPosition(getViewportWidth() * BOOKMARK_POSITION_X_SCALE - button.getWidth(), + (GameMenuDefinition.values().length - bookmarksGroup.getChildren().indexOf(button, true)) * BOOKMARKS_PADDING * getViewportHeight()); + } + private List<Game> getGames(GameDefinition definition) { return GameDAO.getGamesForUserAndDefinition(getSelectedUser().getId(), definition); } diff --git a/core/src/cz/nic/tablexia/screen/statistics/views/GraphPane.java b/core/src/cz/nic/tablexia/screen/statistics/views/GraphPane.java index 165d63f2e9f159d27ca43482919d41898d782879..a866c590365d9b7be45981a0e5c92ee6d3b8e2d5 100644 --- a/core/src/cz/nic/tablexia/screen/statistics/views/GraphPane.java +++ b/core/src/cz/nic/tablexia/screen/statistics/views/GraphPane.java @@ -155,7 +155,7 @@ public class GraphPane extends WidgetGroup { private void createScorePoints(List<Game> games) { for (Game game : games) { - float score = selectedGameDefinition.getGameResultResolver().getGameScoreResult(game); + float score = selectedGameDefinition.getGameResultResolver().getStatisticsScore(game); createPoint(game, score, getGamesByDifficulty(GameDifficulty.getByGame(game)).size(), games.indexOf(game), -1, null); } }