mirror of
https://github.com/peterosterlund2/droidfish.git
synced 2024-11-23 19:34:08 +01:00
DroidFish: Added option to not keep variations in the move list.
This commit is contained in:
parent
4541e83cf0
commit
03342fb46b
|
@ -279,6 +279,8 @@ you are not actively using the program.\
|
|||
<string name="prefs_scrollSensitivity_summary">Scrolling speed for game navigation</string>
|
||||
<string name="prefs_invertScrollDirection_title">Invert Scroll Direction</string>
|
||||
<string name="prefs_invertScrollDirection_summary">Enable this if you think scrolling moves in the wrong direction</string>
|
||||
<string name="prefs_discardVariations_title">Discard variations</string>
|
||||
<string name="prefs_discardVariations_summary">Discard non-mainline moves from move list</string>
|
||||
<string name="prefs_leftHanded_title">Left-handed mode</string>
|
||||
<string name="prefs_leftHanded_summary">Controls on left side in landscape mode</string>
|
||||
<string name="prefs_squareSelectType_title">Square selection</string>
|
||||
|
|
|
@ -496,7 +496,13 @@
|
|||
android:summary="@string/prefs_invertScrollDirection_summary"
|
||||
android:defaultValue="false">
|
||||
</CheckBoxPreference>
|
||||
</PreferenceCategory>
|
||||
<CheckBoxPreference
|
||||
android:key="discardVariations"
|
||||
android:title="@string/prefs_discardVariations_title"
|
||||
android:summary="@string/prefs_discardVariations_summary"
|
||||
android:defaultValue="false">
|
||||
</CheckBoxPreference>
|
||||
</PreferenceCategory>
|
||||
<PreferenceCategory
|
||||
android:title="@string/prefs_other">
|
||||
<PreferenceScreen
|
||||
|
|
|
@ -170,6 +170,7 @@ public class DroidFish extends Activity implements GUIInterface {
|
|||
private boolean boardFlipped;
|
||||
private boolean autoSwapSides;
|
||||
private boolean playerNameFlip;
|
||||
private boolean discardVariations;
|
||||
|
||||
private TextView status;
|
||||
private ScrollView moveListScroll;
|
||||
|
@ -829,6 +830,7 @@ public class DroidFish extends Activity implements GUIInterface {
|
|||
|
||||
scrollSensitivity = Float.parseFloat(settings.getString("scrollSensitivity", "2"));
|
||||
invertScrollDirection = settings.getBoolean("invertScrollDirection", false);
|
||||
discardVariations = settings.getBoolean("discardVariations", false);
|
||||
boolean fullScreenMode = settings.getBoolean("fullScreenMode", false);
|
||||
Util.setFullScreenMode(this, fullScreenMode);
|
||||
useWakeLock = settings.getBoolean("wakeLock", false);
|
||||
|
@ -1419,6 +1421,11 @@ public class DroidFish extends Activity implements GUIInterface {
|
|||
return playerName;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean discardVariations() {
|
||||
return discardVariations;
|
||||
}
|
||||
|
||||
/** Report a move made that is a candidate for GUI animation. */
|
||||
public void setAnimMove(Position sourcePos, Move move, boolean forward) {
|
||||
if (animateMoves && (move != null))
|
||||
|
|
|
@ -100,4 +100,7 @@ public interface GUIInterface {
|
|||
|
||||
/** Get the default player name. */
|
||||
public String playerName();
|
||||
|
||||
/** Return true if only main-line moves are to be kept. */
|
||||
public boolean discardVariations();
|
||||
}
|
||||
|
|
|
@ -834,8 +834,14 @@ public class DroidChessController {
|
|||
boolean gamePaused = !gameMode.clocksActive() || (humansTurn() && guiPaused);
|
||||
game.setGamePaused(gamePaused);
|
||||
updateRemainingTime();
|
||||
boolean addFirst = gameMode.clocksActive();
|
||||
game.setAddFirst(addFirst);
|
||||
Game.AddMoveBehavior amb;
|
||||
if (gui.discardVariations())
|
||||
amb = Game.AddMoveBehavior.REPLACE;
|
||||
else if (gameMode.clocksActive())
|
||||
amb = Game.AddMoveBehavior.ADD_FIRST;
|
||||
else
|
||||
amb = Game.AddMoveBehavior.ADD_LAST;
|
||||
game.setAddFirst(amb);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -34,7 +34,7 @@ public class Game {
|
|||
TimeControl timeController;
|
||||
private boolean gamePaused;
|
||||
/** If true, add new moves as mainline moves. */
|
||||
private boolean addFirst;
|
||||
private AddMoveBehavior addMoveBehavior;
|
||||
|
||||
PgnToken.PgnTokenReceiver gameTextListener;
|
||||
|
||||
|
@ -61,9 +61,19 @@ public class Game {
|
|||
}
|
||||
}
|
||||
|
||||
/** Controls behavior when a new move is added to the game.*/
|
||||
public static enum AddMoveBehavior {
|
||||
/** Add the new move first in the list of variations. */
|
||||
ADD_FIRST,
|
||||
/** Add the new move last in the list of variations. */
|
||||
ADD_LAST,
|
||||
/** Remove all variations not matching the new move. */
|
||||
REPLACE
|
||||
};
|
||||
|
||||
/** Set whether new moves are entered as mainline moves or variations. */
|
||||
public final void setAddFirst(boolean addFirst) {
|
||||
this.addFirst = addFirst;
|
||||
public final void setAddFirst(AddMoveBehavior amb) {
|
||||
addMoveBehavior = amb;
|
||||
}
|
||||
|
||||
/** Sets start position and discards the whole game tree. */
|
||||
|
@ -137,7 +147,7 @@ public class Game {
|
|||
}
|
||||
|
||||
private final void addToGameTree(Move m, String playerAction) {
|
||||
if (m.equals(new Move(0, 0, 0))) { // Don't create more than one null move at a node
|
||||
if (m.equals(new Move(0, 0, 0))) { // Don't create more than one game-ending move at a node
|
||||
List<Move> varMoves = tree.variations();
|
||||
for (int i = varMoves.size() - 1; i >= 0; i--) {
|
||||
if (varMoves.get(i).equals(m)) {
|
||||
|
@ -146,20 +156,38 @@ public class Game {
|
|||
}
|
||||
}
|
||||
|
||||
List<Move> varMoves = tree.variations();
|
||||
boolean movePresent = false;
|
||||
int varNo;
|
||||
for (varNo = 0; varNo < varMoves.size(); varNo++) {
|
||||
if (varMoves.get(varNo).equals(m)) {
|
||||
movePresent = true;
|
||||
break;
|
||||
{
|
||||
ArrayList<Move> varMoves = tree.variations();
|
||||
int nVars = varMoves.size();
|
||||
if (addMoveBehavior == AddMoveBehavior.REPLACE) {
|
||||
boolean modified = false;
|
||||
for (int i = nVars-1; i >= 0; i--) {
|
||||
if (!m.equals(varMoves.get(i))) {
|
||||
tree.deleteVariation(i);
|
||||
modified = true;
|
||||
}
|
||||
}
|
||||
if (modified) {
|
||||
varMoves = tree.variations();
|
||||
nVars = varMoves.size();
|
||||
}
|
||||
}
|
||||
for (varNo = 0; varNo < nVars; varNo++) {
|
||||
if (varMoves.get(varNo).equals(m)) {
|
||||
movePresent = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!movePresent) {
|
||||
String moveStr = TextIO.moveToUCIString(m);
|
||||
varNo = tree.addMove(moveStr, playerAction, 0, "", "");
|
||||
}
|
||||
int newPos = addFirst ? 0 : varNo;
|
||||
int newPos = 0;
|
||||
if (addMoveBehavior == AddMoveBehavior.ADD_LAST)
|
||||
newPos = varNo;
|
||||
tree.reorderVariation(varNo, newPos);
|
||||
tree.goForward(newPos);
|
||||
int remaining = timeController.moveMade(System.currentTimeMillis(), !gamePaused);
|
||||
|
|
|
@ -96,9 +96,8 @@ public class GameTree {
|
|||
}
|
||||
|
||||
private final void updateListener() {
|
||||
if (gameStateListener != null) {
|
||||
if (gameStateListener != null)
|
||||
gameStateListener.clear();
|
||||
}
|
||||
}
|
||||
|
||||
/** PngTokenReceiver implementation that generates plain text PGN data. */
|
||||
|
|
Loading…
Reference in New Issue
Block a user