From d95283b1fe49e2d70833019b371572ad45056f37 Mon Sep 17 00:00:00 2001 From: Peter Osterlund Date: Sat, 14 Jul 2012 13:33:00 +0000 Subject: [PATCH] DroidFish: When stopping analysis mode by pressing the toggle analysis button, restore the game mode from the last time the toggle analysis button was pressed. --- .../src/org/petero/droidfish/DroidFish.java | 9 +- .../src/org/petero/droidfish/GameMode.java | 98 ++++++++----------- .../gamelogic/DroidChessController.java | 4 + 3 files changed, 55 insertions(+), 56 deletions(-) diff --git a/DroidFish/src/org/petero/droidfish/DroidFish.java b/DroidFish/src/org/petero/droidfish/DroidFish.java index 06e36cf..96ee146 100644 --- a/DroidFish/src/org/petero/droidfish/DroidFish.java +++ b/DroidFish/src/org/petero/droidfish/DroidFish.java @@ -280,8 +280,15 @@ public class DroidFish extends Activity implements GUIInterface { public int getName() { return R.string.toggle_analysis; } public int getIcon() { return R.raw.analyze; } public boolean enabled() { return true; } + private int oldGameModeType = GameMode.EDIT_GAME; public void run() { - int gameModeType = ctrl.analysisMode() ? GameMode.EDIT_GAME : GameMode.ANALYSIS; + int gameModeType; + if (ctrl.analysisMode()) { + gameModeType = oldGameModeType; + } else { + oldGameModeType = ctrl.getGameMode().getModeNr(); + gameModeType = GameMode.ANALYSIS; + } Editor editor = settings.edit(); String gameModeStr = String.format("%d", gameModeType); editor.putString("gameMode", gameModeStr); diff --git a/DroidFish/src/org/petero/droidfish/GameMode.java b/DroidFish/src/org/petero/droidfish/GameMode.java index 19bed07..56e48da 100644 --- a/DroidFish/src/org/petero/droidfish/GameMode.java +++ b/DroidFish/src/org/petero/droidfish/GameMode.java @@ -1,6 +1,6 @@ /* DroidFish - An Android chess program. - Copyright (C) 2011 Peter Ă–sterlund, peterosterlund2@gmail.com + Copyright (C) 2011-2012 Peter Ă–sterlund, peterosterlund2@gmail.com This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -19,10 +19,7 @@ package org.petero.droidfish; public class GameMode { - private final boolean playerWhite; - private final boolean playerBlack; - private final boolean analysisMode; - private final boolean clocksActive; + private final int modeNr; public static final int PLAYER_WHITE = 1; public static final int PLAYER_BLACK = 2; @@ -32,60 +29,59 @@ public class GameMode { public static final int EDIT_GAME = 6; public GameMode(int modeNr) { + this.modeNr = modeNr; + } + + public int getModeNr() { + return modeNr; + } + + /** Return true if white side is controlled by a human. */ + public final boolean playerWhite() { switch (modeNr) { - case PLAYER_WHITE: default: - playerWhite = true; - playerBlack = false; - analysisMode = false; - clocksActive = true; - break; - case PLAYER_BLACK: - playerWhite = false; - playerBlack = true; - analysisMode = false; - clocksActive = true; - break; + case PLAYER_WHITE: case TWO_PLAYERS: - playerWhite = true; - playerBlack = true; - analysisMode = false; - clocksActive = true; - break; case ANALYSIS: - playerWhite = true; - playerBlack = true; - analysisMode = true; - clocksActive = false; - break; - case TWO_COMPUTERS: - playerWhite = false; - playerBlack = false; - analysisMode = false; - clocksActive = true; - break; case EDIT_GAME: - playerWhite = true; - playerBlack = true; - analysisMode = false; - clocksActive = false; - break; + return true; + default: + return false; } } - public final boolean playerWhite() { - return playerWhite; - } + /** Return true if black side is controlled by a human. */ public final boolean playerBlack() { - return playerBlack; + switch (modeNr) { + case PLAYER_BLACK: + case TWO_PLAYERS: + case ANALYSIS: + case EDIT_GAME: + return true; + default: + return false; + } } + public final boolean analysisMode() { - return analysisMode; + return modeNr == ANALYSIS; } + + /** Return true if it is a humans turn to move. */ public final boolean humansTurn(boolean whiteMove) { - return (whiteMove ? playerWhite : playerBlack) || analysisMode; + return whiteMove ? playerWhite() : playerBlack(); } + + /** Return true if the clocks are running. */ public final boolean clocksActive() { - return clocksActive; + switch (modeNr) { + case PLAYER_WHITE: + case PLAYER_BLACK: + case TWO_PLAYERS: + case TWO_COMPUTERS: + return true; + default: + return false; + } } @Override @@ -93,19 +89,11 @@ public class GameMode { if ((o == null) || (o.getClass() != this.getClass())) return false; GameMode other = (GameMode)o; - if (playerWhite != other.playerWhite) - return false; - if (playerBlack != other.playerBlack) - return false; - if (analysisMode != other.analysisMode) - return false; - if (clocksActive != other.clocksActive) - return false; - return true; + return modeNr == other.modeNr; } @Override public int hashCode() { - return 0; + return modeNr; } } diff --git a/DroidFish/src/org/petero/droidfish/gamelogic/DroidChessController.java b/DroidFish/src/org/petero/droidfish/gamelogic/DroidChessController.java index a8ce6b4..2b060a2 100644 --- a/DroidFish/src/org/petero/droidfish/gamelogic/DroidChessController.java +++ b/DroidFish/src/org/petero/droidfish/gamelogic/DroidChessController.java @@ -131,6 +131,10 @@ public class DroidChessController { } } + public GameMode getGameMode() { + return gameMode; + } + /** Return true if game mode is analysis. */ public final boolean analysisMode() { return gameMode.analysisMode();