diff --git a/core/src/cz/nic/tablexia/TablexiaSettings.java b/core/src/cz/nic/tablexia/TablexiaSettings.java index 1a0a5ed5ddb549c79f03a0179b286ce5420e414a..b48ae93c41f77e4e5787d6693275b4e1b01fd25f 100644 --- a/core/src/cz/nic/tablexia/TablexiaSettings.java +++ b/core/src/cz/nic/tablexia/TablexiaSettings.java @@ -15,8 +15,6 @@ import java.util.List; import java.util.Locale; import cz.nic.tablexia.bus.ApplicationBus; -import cz.nic.tablexia.game.GameDefinition; -import cz.nic.tablexia.game.difficulty.GameDifficulty; import cz.nic.tablexia.loader.application.ApplicationTextManager; import cz.nic.tablexia.model.UserDAO; import cz.nic.tablexia.screen.AbstractTablexiaScreen; @@ -230,19 +228,6 @@ public class TablexiaSettings { return BUILD_TYPE; } - public void setGameDifficulty(GameDefinition gameDefinition, GameDifficulty gameDifficulty) { - preferences.putString(getGameDifficultyPreferencesKey(gameDefinition), gameDifficulty.name()); - preferences.flush(); - } - - public GameDifficulty getGameDifficulty(GameDefinition gameDefinition) { - return GameDifficulty.valueOf(GameDifficulty.class, preferences.getString(getGameDifficultyPreferencesKey(gameDefinition), GameDifficulty.DEFAULT_DIFFICULTY.name())); - } - - private String getGameDifficultyPreferencesKey(GameDefinition gameDefinition) { - return "GAME_DIFFICULTY_" + gameDefinition.name() + "_" + getSelectedUser().getId(); - } - public static Color getDefaultBackgroundColor() { return DEFAULT_BACKGROUND_COLOR; } diff --git a/core/src/cz/nic/tablexia/game/AbstractTablexiaGame.java b/core/src/cz/nic/tablexia/game/AbstractTablexiaGame.java index 7eded19ddb9625781babfd1b88f79564f81f320e..f4820bb5c8e2a9a6a0600e753264dc3100d799ec 100644 --- a/core/src/cz/nic/tablexia/game/AbstractTablexiaGame.java +++ b/core/src/cz/nic/tablexia/game/AbstractTablexiaGame.java @@ -51,6 +51,7 @@ import cz.nic.tablexia.loader.application.ApplicationTextManager; import cz.nic.tablexia.menu.AbstractMenu; import cz.nic.tablexia.menu.main.MainMenu; import cz.nic.tablexia.model.UserDAO; +import cz.nic.tablexia.model.UserDifficultySettingsDAO; import cz.nic.tablexia.model.game.GameDAO; import cz.nic.tablexia.screen.AbstractTablexiaScreen; import cz.nic.tablexia.screen.gamemenu.GameMenuScreen; @@ -428,7 +429,7 @@ public abstract class AbstractTablexiaGame<T> extends AbstractTablexiaScreen<T> // create new random = TablexiaSettings.GAMES_RANDOM_SEED == null ? new TablexiaRandom() : new TablexiaRandom(TablexiaSettings.GAMES_RANDOM_SEED); GameDefinition gameDefinition = GameDefinition.getGameDefinitionForClass(AbstractTablexiaGame.this.getClass()); - GameDifficulty gameDifficulty = gameDefinition.hasTutorial() && UserDAO.isTutorialForGameDefinition(gameDefinition, getSelectedUser()) ? GameDifficulty.TUTORIAL : TablexiaSettings.getInstance().getGameDifficulty(gameDefinition); + GameDifficulty gameDifficulty = gameDefinition.hasTutorial() && UserDAO.isTutorialForGameDefinition(gameDefinition, getSelectedUser()) ? GameDifficulty.TUTORIAL : getGameDifficulty(); game = GameDAO.createGame(getSelectedUser(), gameDifficulty, gameDefinition, random); Log.info(getClass(), "[DB] Created new GAME object: " + game); } else { @@ -482,11 +483,13 @@ public abstract class AbstractTablexiaGame<T> extends AbstractTablexiaScreen<T> debugEndGameButton.setInputListener(new ClickListener() { @Override public void clicked(InputEvent event, float x, float y) { - forceGameEnd(GameResult.THREE_STAR); + if(getGamePhase() == GamePhase.STARTED) { + forceGameEnd(GameResult.THREE_STAR); + debugEndGameButton.setDisabled(); + } } }); debugEndGameButton.setEnabled(); - debugEndGameButton.useOnce(true); debugEndGameButton.setVisible(true); } @@ -651,7 +654,7 @@ public abstract class AbstractTablexiaGame<T> extends AbstractTablexiaScreen<T> } public GameDifficulty getGameDifficulty() { - return game == null ? TablexiaSettings.getInstance().getGameDifficulty(GameDefinition.getGameDefinitionForClass(AbstractTablexiaGame.this.getClass())) : GameDifficulty.getGameDifficultyForDifficultyNumber(game.getGameDifficulty()); + return game == null ? UserDifficultySettingsDAO.getUserSettingsByGame(getSelectedUser().getId(), GameDefinition.getGameDefinitionForClass(AbstractTablexiaGame.this.getClass()).getGameNumber()) : GameDifficulty.getGameDifficultyForDifficultyNumber(game.getGameDifficulty()); } protected Game getGame() { @@ -1393,14 +1396,20 @@ public abstract class AbstractTablexiaGame<T> extends AbstractTablexiaScreen<T> * Thread blocking method which waits for all GameScores to be set and ready. */ public void waitForActualGameScore() { + int waitTime = 50; //50ms + int waitCounter = 0; + while(!GameDAO.isGameScoreActual()) { try { - Log.info(getClass(), "Waiting for 50ms for GameDAO to set all GameScores..."); - Thread.sleep(50); + Thread.sleep(waitTime); + waitCounter++; } catch (InterruptedException e) { Thread.yield(); } } + + if(waitCounter > 0) + Log.info(getClass(), "Game has been waiting for " + (waitCounter * waitTime) + " ms for GameDAO to set all game scores."); } public String getGameScoreString(String key, String nullValue) { 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 ea45a8bf39a9a548cdeee2521a338986a213f35b..48c30159beb4faf821508d13d9ad53c6a2c4db25 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 @@ -920,6 +920,8 @@ public class InTheDarknessGame extends AbstractTablexiaGame<List<MapWidget>> imp default: errors = GameResultResolver.ERROR_COUNT_THREE_STARS - 1; break; } GameDAO.setGameScore(getGame(), SCORE_KEY_ERRORS_COUNT, Integer.toString(errors)); + waitForActualGameScore(); + endGame(); showGameResultDialog(); } 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 aa5d20238d42deaaa0183ee590cdfe4d0a957111..a3ce6d2cfb093776e8ff1bf1128376d96307b300 100644 --- a/core/src/cz/nic/tablexia/game/games/pursuit/PursuitGame.java +++ b/core/src/cz/nic/tablexia/game/games/pursuit/PursuitGame.java @@ -572,6 +572,7 @@ public class PursuitGame extends AbstractTablexiaGame<int[][]> { long duration = GameRulesHelper.getDurationForStars(GameDifficulty.getByGame(getGame()), result.getStarCount()); GameDAO.startGame(getGame(), TimeUtils.millis() - duration); GameDAO.setGameScore(getGame(), SCORE_KEY_MOVE_COUNT, Integer.toString(30)); + waitForActualGameScore(); endGame(); gameFinished.set(true); 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 e3417fba8f155b71f59d2ae2790f0751ceb72f0b..a2fd46ef4407e5587cd87f3f95cb40af3230bada 100644 --- a/core/src/cz/nic/tablexia/game/games/robbery/RobberyGame.java +++ b/core/src/cz/nic/tablexia/game/games/robbery/RobberyGame.java @@ -415,6 +415,8 @@ public class RobberyGame extends AbstractTablexiaGame<GameRule> { GameDAO.setGameScore(getGame(), SCORE_KEY_ESCAPED_THIEVES , Integer.toString(1)); GameDAO.setGameScore(getGame(), SCORE_KEY_INNOCENCE_PERSON, Integer.toString(1)); + waitForActualGameScore(); + this.actualCreatureNumber = CREATURES_COUNT; } } diff --git a/core/src/cz/nic/tablexia/game/games/shooting_range/ShootingRangeGame.java b/core/src/cz/nic/tablexia/game/games/shooting_range/ShootingRangeGame.java index f16ccf6637bc8f1651defa626918cadf5d6b21c0..d6ca8fba8aa4a61aab42a19f5a13977f9d410b9a 100644 --- a/core/src/cz/nic/tablexia/game/games/shooting_range/ShootingRangeGame.java +++ b/core/src/cz/nic/tablexia/game/games/shooting_range/ShootingRangeGame.java @@ -493,6 +493,8 @@ public class ShootingRangeGame extends AbstractTablexiaGame<GameState> { } GameDAO.setGameScore(getGame(), Properties.SCORE_TOTAL, Integer.toString(totalScore)); + waitForActualGameScore(); + finishGame(); } } diff --git a/core/src/cz/nic/tablexia/screen/gamemenu/pages/GameMenuPage.java b/core/src/cz/nic/tablexia/screen/gamemenu/pages/GameMenuPage.java index 0e84efd9fe24e1338cad5721e33c82e8efb97fcd..a7716c2d75123c2ea616a0254a2214cd0b458296 100644 --- a/core/src/cz/nic/tablexia/screen/gamemenu/pages/GameMenuPage.java +++ b/core/src/cz/nic/tablexia/screen/gamemenu/pages/GameMenuPage.java @@ -34,8 +34,8 @@ import cz.nic.tablexia.screen.profile.ProfileScreen; import cz.nic.tablexia.util.MusicUtil; import cz.nic.tablexia.util.ui.ClickListenerWithSound; import cz.nic.tablexia.util.ui.Switch; -import cz.nic.tablexia.util.ui.TablexiaProgressBar; import cz.nic.tablexia.util.ui.TablexiaLabel; +import cz.nic.tablexia.util.ui.TablexiaProgressBar; import cz.nic.tablexia.util.ui.button.TablexiaButton; /** @@ -105,7 +105,6 @@ public class GameMenuPage extends MenuPage { private Actor buttonDifficultyEasy, buttonDifficultyMedium, buttonDifficultyHard; private Stack diffStack; - private GameDifficulty gameDifficulty = GameDifficulty.EASY; private Switch.DragSwitchListener dragSwitchListener; //hack to keep paralax layers out of picture before scrolled for first time @@ -141,6 +140,8 @@ public class GameMenuPage extends MenuPage { private TextureRegion midLayer; private TextureRegion foregroundLayer; + boolean updateGameDifficultyInDB = true; + public GameMenuPage(GameMenuScreen screen, GameDefinition game) { super(screen); this.game = game; @@ -359,7 +360,7 @@ public class GameMenuPage extends MenuPage { @Override public void clicked(InputEvent event, float x, float y) { super.clicked(event, x, y); - dragSwitchListener.switchToStep(GameDifficulty.EASY.getDifficultyNumber() - 1); + updateDifficultySeekBar(GameDifficulty.EASY); } }); @@ -367,7 +368,7 @@ public class GameMenuPage extends MenuPage { @Override public void clicked(InputEvent event, float x, float y) { super.clicked(event, x, y); - dragSwitchListener.switchToStep(GameDifficulty.MEDIUM.getDifficultyNumber() - 1); + updateDifficultySeekBar(GameDifficulty.MEDIUM); } }); @@ -375,7 +376,7 @@ public class GameMenuPage extends MenuPage { @Override public void clicked(InputEvent event, float x, float y) { super.clicked(event, x, y); - dragSwitchListener.switchToStep(GameDifficulty.HARD.getDifficultyNumber() - 1); + updateDifficultySeekBar(GameDifficulty.HARD); } }); @@ -420,15 +421,30 @@ public class GameMenuPage extends MenuPage { dragSwitchListener.setSwitchSelectedListener(new Switch.DragSwitchListener.SwitchSelectedListener() { @Override public void stepSelected(int step) { - difficultyChanged(GameDifficulty.getVisibleGameDifficultyList().get(step)); + if (updateGameDifficultyInDB) { + UserDifficultySettingsDAO.saveSettingsForUser(TablexiaSettings.getInstance().getSelectedUser().getId(), game.getGameNumber(), GameDifficulty.getVisibleGameDifficultyList().get(step).getDifficultyNumber()); + } } }); - gameDifficulty = UserDifficultySettingsDAO.getUserSettingsByGame(TablexiaSettings.getInstance().getSelectedUser().getId(), game.getGameNumber()); - dragSwitchListener.switchToStep(gameDifficulty.getDifficultyNumber() - 1); + updateGameDifficultyFromDB(); stepSoundsEnabled = true; } + private void updateGameDifficultyFromDB() { + updateDifficultySeekBar(UserDifficultySettingsDAO.getUserSettingsByGame(TablexiaSettings.getInstance().getSelectedUser().getId(), game.getGameNumber()), false); + } + + private void updateDifficultySeekBar(GameDifficulty gameDifficulty) { + updateDifficultySeekBar(gameDifficulty, true); + } + + private void updateDifficultySeekBar(GameDifficulty gameDifficulty, boolean updateGameDifficultyInDB) { + this.updateGameDifficultyInDB = updateGameDifficultyInDB; + dragSwitchListener.switchToStep(gameDifficulty.getDifficultyNumber() - 1); + this.updateGameDifficultyInDB = true; + } + public void prepareGameProgress() { this.gameMenuPageProgress = new TablexiaProgressBar( getScreen().getScreenTextureRegion(GameMenuScreen.GameMenuPageDefinition.getResourcePath(game, GameMenuAssets.AssetType.PROGRESSBAR)), @@ -477,22 +493,6 @@ public class GameMenuPage extends MenuPage { return (rankProgress.getCurrXP() - rankProgress.getMinXP()) + Character.toString(PROGRESS_STATUS_SEPARATOR) + (rankProgress.getNextXP() - rankProgress.getMinXP()); } - /** - * Called when difficulty is changed - * - * @param difficulty - */ - public void difficultyChanged(final GameDifficulty difficulty) { - gameDifficulty = difficulty; - TablexiaSettings.getInstance().setGameDifficulty(game, difficulty); - new Runnable() { - @Override - public void run() { - UserDifficultySettingsDAO.saveSettingsForUser(TablexiaSettings.getInstance().getSelectedUser().getId(), game.getGameNumber(), difficulty.getDifficultyNumber()); - } - }.run(); - } - private void playStepSound(GameDifficulty previous, GameDifficulty current) { switch (previous) { case EASY: @@ -640,8 +640,7 @@ public class GameMenuPage extends MenuPage { public void run() { if (selectedUserEvent.isUserSelected()) { stepSoundsEnabled = false; - gameDifficulty = UserDifficultySettingsDAO.getUserSettingsByGame(TablexiaSettings.getInstance().getSelectedUser().getId(), game.getGameNumber()); - dragSwitchListener.switchToStep(gameDifficulty.getDifficultyNumber() - 1); + updateGameDifficultyFromDB(); stepSoundsEnabled = true; updateGameProgress(); diff --git a/core/src/cz/nic/tablexia/util/ui/Switch.java b/core/src/cz/nic/tablexia/util/ui/Switch.java index 45f035f764fe82a14da2e63107458461ca10526a..3d8522a7b0da7d37c83706313d6846b65d00bf46 100644 --- a/core/src/cz/nic/tablexia/util/ui/Switch.java +++ b/core/src/cz/nic/tablexia/util/ui/Switch.java @@ -202,12 +202,12 @@ public class Switch extends Group { this.switchSelectedListener = switchSelectedListener; } - public static interface SwitchMovedListener { - public void movedToStep(int step); + public interface SwitchMovedListener { + void movedToStep(int step); } - public static interface SwitchSelectedListener { - public void stepSelected(int step); + public interface SwitchSelectedListener { + void stepSelected(int step); } } } \ No newline at end of file