dup: fix to call informMove(); make strings localizable

Was relying incorrectly on showRobotScores, which is FALSE on linux by default.
This commit is contained in:
Eric House 2020-02-05 19:00:01 -08:00
parent 7076501710
commit 6b41628fbf
6 changed files with 103 additions and 77 deletions

View file

@ -92,32 +92,35 @@ public class DUtilCtxt {
}
}
static final int STRD_ROBOT_TRADED = 1;
static final int STR_ROBOT_MOVED = 2;
static final int STRS_VALUES_HEADER = 3;
static final int STRD_REMAINING_TILES_ADD = 4;
static final int STRD_UNUSED_TILES_SUB = 5;
static final int STRS_REMOTE_MOVED = 6;
static final int STRD_TIME_PENALTY_SUB = 7;
static final int STR_PASS = 8;
static final int STRS_MOVE_ACROSS = 9;
static final int STRS_MOVE_DOWN = 10;
static final int STRS_TRAY_AT_START = 11;
static final int STRSS_TRADED_FOR = 12;
static final int STR_PHONY_REJECTED = 13;
static final int STRD_CUMULATIVE_SCORE = 14;
static final int STRS_NEW_TILES = 15;
static final int STR_COMMIT_CONFIRM = 16;
static final int STR_SUBMIT_CONFIRM = 17;
static final int STR_BONUS_ALL = 18;
static final int STRD_TURN_SCORE = 19;
static final int STRD_REMAINS_HEADER = 20;
static final int STRD_REMAINS_EXPL = 21;
static final int STRSD_RESIGNED = 22;
static final int STRSD_WINNER = 23;
static final int STRDSD_PLACER = 24;
static final int STR_DUP_CLIENT_SENT = 25;
static final int STRDD_DUP_HOST_RECEIVED = 26;
private static final int STRD_ROBOT_TRADED = 1;
private static final int STR_ROBOT_MOVED = 2;
private static final int STRS_VALUES_HEADER = 3;
private static final int STRD_REMAINING_TILES_ADD = 4;
private static final int STRD_UNUSED_TILES_SUB = 5;
private static final int STRS_REMOTE_MOVED = 6;
private static final int STRD_TIME_PENALTY_SUB = 7;
private static final int STR_PASS = 8;
private static final int STRS_MOVE_ACROSS = 9;
private static final int STRS_MOVE_DOWN = 10;
private static final int STRS_TRAY_AT_START = 11;
private static final int STRSS_TRADED_FOR = 12;
private static final int STR_PHONY_REJECTED = 13;
private static final int STRD_CUMULATIVE_SCORE = 14;
private static final int STRS_NEW_TILES = 15;
private static final int STR_COMMIT_CONFIRM = 16;
private static final int STR_SUBMIT_CONFIRM = 17;
private static final int STR_BONUS_ALL = 18;
private static final int STRD_TURN_SCORE = 19;
private static final int STRD_REMAINS_HEADER = 20;
private static final int STRD_REMAINS_EXPL = 21;
private static final int STRSD_RESIGNED = 22;
private static final int STRSD_WINNER = 23;
private static final int STRDSD_PLACER = 24;
private static final int STR_DUP_CLIENT_SENT = 25;
private static final int STRDD_DUP_HOST_RECEIVED = 26;
private static final int STR_DUP_MOVED = 27;
private static final int STRD_DUP_TRADED = 28;
private static final int STRSD_DUP_ONESCORE = 29;
public String getUserString( int stringCode )
{
@ -194,7 +197,15 @@ public class DUtilCtxt {
case STRDD_DUP_HOST_RECEIVED:
id = R.string.dup_host_received_fmt;
break;
case STR_DUP_MOVED:
id = R.string.dup_moved;
break;
case STRD_DUP_TRADED:
id = R.string.dup_traded_fmt;
break;
case STRSD_DUP_ONESCORE:
id = R.string.dup_onescore_fmt;
break;
default:
Log.w( TAG, "no such stringCode: %d", stringCode );

View file

@ -2421,7 +2421,6 @@
<!-- Checkbox in game config dialog -->
<string name="duplicate_check">Duplicate mode</string>
<!-- New strings for "Duplicate" mode -->
<!-- Tags duplicate-mode games in Games List, above thumbnail of board -->
<string name="dup_tag">Dup</string>
<!-- Mark game title; will produce something like "Kati vs. Eric (dup.)" -->
@ -2489,6 +2488,10 @@
<!-- Title for notification that another player un-paused a duplicate-mode game -->
<string name="game_unpaused_title">Game un-paused</string>
<string name="dup_moved">Duplicate turn complete. Scores:\n</string>
<string name="dup_traded_fmt">No moves made; traded %1$d tiles</string>
<string name="dup_onescore_fmt">%1$s: %2$d points\n</string>
<!-- Title of pause confirm/message edit dialog -->
<string name="pause_title">Game pause</string>
<!-- Title of unpause confirm/message edit dialog -->

View file

@ -1,4 +1,4 @@
/* Keep these in sync with the constants in UtilCtxt.java */
/* Keep these in sync with the constants in DUtilCtxt.java */
#ifndef _LOCALIZEDSTRINCLUDES_H_
@ -30,6 +30,9 @@
# define STRDSD_PLACER 24
# define STR_DUP_CLIENT_SENT 25
# define STRDD_DUP_HOST_RECEIVED 26
# define STR_DUP_MOVED 27
# define STRD_DUP_TRADED 28
# define STRSD_DUP_ONESCORE 29
# define N_AND_USER_STRINGS 26
# define N_AND_USER_STRINGS 29
#endif

View file

@ -899,59 +899,58 @@ bitsPerTile( ServerCtxt* server )
static void
dupe_setupShowTrade( ServerCtxt* server, XP_U16 nTiles )
{
if ( server->nv.showRobotScores ) {
XP_ASSERT( !server->nv.prevMoveStream );
XP_ASSERT( inDuplicateMode(server) );
XP_ASSERT( !server->nv.prevMoveStream );
XWStreamCtxt* stream = mkServerStream( server );
XP_UCHAR buf[128];
const XP_UCHAR* fmt = dutil_getUserString( server->vol.dutil, STRD_DUP_TRADED );
XP_SNPRINTF( buf, VSIZE(buf), fmt, nTiles );
XP_UCHAR buf[64];
XP_SNPRINTF( buf, VSIZE(buf), "No moves made; traded %d tiles", nTiles );
stream_catString( stream, buf );
XWStreamCtxt* stream = mkServerStream( server );
stream_catString( stream, buf );
server->nv.prevMoveStream = stream;
server->vol.showPrevMove = XP_TRUE;
}
server->nv.prevMoveStream = stream;
server->vol.showPrevMove = XP_TRUE;
}
static void
dupe_setupShowMove( ServerCtxt* server, XP_U16* scores )
{
if ( server->nv.showRobotScores ) {
XP_ASSERT( !server->nv.prevMoveStream );
XP_ASSERT( inDuplicateMode(server) );
XP_ASSERT( !server->nv.prevMoveStream ); /* firing */
const CurGameInfo* gi = server->vol.gi;
const XP_U16 nPlayers = gi->nPlayers;
const CurGameInfo* gi = server->vol.gi;
const XP_U16 nPlayers = gi->nPlayers;
XWStreamCtxt* stream = mkServerStream( server );
XWStreamCtxt* stream = mkServerStream( server );
XP_U16 lastMax = 0x7FFF;
for ( XP_U16 nDone = 0; nDone < nPlayers; ) {
XP_U16 lastMax = 0x7FFF;
for ( XP_U16 nDone = 0; nDone < nPlayers; ) {
/* Find the largest score we haven't already done */
XP_U16 thisMax = 0;
for ( XP_U16 ii = 0; ii < nPlayers; ++ii ) {
XP_U16 score = scores[ii];
if ( score < lastMax && score > thisMax ) {
thisMax = score;
}
/* Find the largest score we haven't already done */
XP_U16 thisMax = 0;
for ( XP_U16 ii = 0; ii < nPlayers; ++ii ) {
XP_U16 score = scores[ii];
if ( score < lastMax && score > thisMax ) {
thisMax = score;
}
/* Process everybody with that score */
for ( XP_U16 ii = 0; ii < nPlayers; ++ii ) {
if ( scores[ii] == thisMax ) {
++nDone;
XP_UCHAR buf[64];
XP_SNPRINTF( buf, VSIZE(buf), "%s: %d points\n",
gi->players[ii].name, scores[ii] );
stream_catString( stream, buf );
}
}
lastMax = thisMax;
}
server->nv.prevMoveStream = stream;
server->vol.showPrevMove = XP_TRUE;
/* Process everybody with that score */
const XP_UCHAR* fmt = dutil_getUserString( server->vol.dutil, STRSD_DUP_ONESCORE );
for ( XP_U16 ii = 0; ii < nPlayers; ++ii ) {
if ( scores[ii] == thisMax ) {
++nDone;
XP_UCHAR buf[128];
XP_SNPRINTF( buf, VSIZE(buf), fmt, gi->players[ii].name, scores[ii] );
stream_catString( stream, buf );
}
}
lastMax = thisMax;
}
server->nv.prevMoveStream = stream;
server->vol.showPrevMove = XP_TRUE;
}
static void
@ -1339,7 +1338,7 @@ makeRobotMove( ServerCtxt* server )
(server_countTilesInPool( server ) >= MAX_TRAY_TILES));
server->vol.showPrevMove = XP_TRUE;
if ( server->nv.showRobotScores ) {
if ( inDuplicateMode(server) || server->nv.showRobotScores ) {
stream = mkServerStream( server );
}
@ -1450,11 +1449,11 @@ postponeRobotMove( ServerCtxt* server )
static void
showPrevScore( ServerCtxt* server )
{
if ( server->nv.showRobotScores ) { /* this can be changed between turns */
/* showRobotScores can be changed between turns */
if ( inDuplicateMode( server ) || server->nv.showRobotScores ) {
XW_UtilCtxt* util = server->vol.util;
XW_DUtilCtxt* dutil = server->vol.dutil;
XWStreamCtxt* stream;
const XP_UCHAR* str;
XP_UCHAR buf[128];
CurGameInfo* gi = server->vol.gi;
XP_U16 nPlayers = gi->nPlayers;
@ -1464,13 +1463,15 @@ showPrevScore( ServerCtxt* server )
prevTurn = (server->nv.currentTurn + nPlayers - 1) % nPlayers;
lp = &gi->players[prevTurn];
XP_U16 stringCode;
if ( inDuplicateMode( server ) ) {
str = "Duplicate turn complete. Scores:\n";
stringCode = STR_DUP_MOVED;
} else if ( LP_IS_LOCAL(lp) ) {
str = dutil_getUserString( dutil, STR_ROBOT_MOVED );
stringCode = STR_ROBOT_MOVED;
} else {
str = dutil_getUserString( dutil, STRS_REMOTE_MOVED );
stringCode = STRS_REMOTE_MOVED;
}
const XP_UCHAR* str = dutil_getUserString( dutil, stringCode );
XP_SNPRINTF( buf, sizeof(buf), str, lp->name );
str = buf;
@ -2549,7 +2550,7 @@ nextTurn( ServerCtxt* server, XP_S16 nxtTurn )
if ( server->vol.showPrevMove ) {
server->vol.showPrevMove = XP_FALSE;
if ( server->nv.showRobotScores ) {
if ( inDuplicateMode(server) || server->nv.showRobotScores ) {
server->nv.stateAfterShow = server->nv.gameState;
SETSTATE( server, XWSTATE_NEED_SHOWSCORE );
moreToDo = XP_TRUE;
@ -2769,7 +2770,7 @@ static XWStreamCtxt*
makeTradeReportIf( ServerCtxt* server, const TrayTileSet* tradedTiles )
{
XWStreamCtxt* stream = NULL;
if ( server->nv.showRobotScores ) {
if ( inDuplicateMode(server) || server->nv.showRobotScores ) {
XP_UCHAR tradeBuf[64];
const XP_UCHAR* tradeStr =
dutil_getUserQuantityString( server->vol.dutil, STRD_ROBOT_TRADED,
@ -2786,7 +2787,7 @@ static XWStreamCtxt*
makeMoveReportIf( ServerCtxt* server, XWStreamCtxt** wordsStream )
{
XWStreamCtxt* stream = NULL;
if ( server->nv.showRobotScores ) {
if ( inDuplicateMode(server) || server->nv.showRobotScores ) {
ModelCtxt* model = server->vol.model;
stream = mkServerStream( server );
*wordsStream = mkServerStream( server );

View file

@ -60,6 +60,9 @@ enum {
STR_DUP_CLIENT_SENT,
STRDD_DUP_HOST_RECEIVED,
STR_DUP_MOVED,
STRD_DUP_TRADED,
STRSD_DUP_ONESCORE,
STR_LAST
};

View file

@ -176,7 +176,6 @@ linux_dutil_getUserString( XW_DUtilCtxt* XP_UNUSED(uc), XP_U16 code )
return (XP_UCHAR*)"The robot \"%s\" moved:\n";
case STRS_REMOTE_MOVED:
return (XP_UCHAR*)"Remote player \"%s\" moved:\n";
#ifndef XWFEATURE_STANDALONE_ONLY
case STR_LOCALPLAYERS:
return (XP_UCHAR*)"Local players";
@ -200,11 +199,17 @@ linux_dutil_getUserString( XW_DUtilCtxt* XP_UNUSED(uc), XP_U16 code )
return "[Winner] %s: %d";
case STRDSD_PLACER:
return "[#%d] %s: %d";
case STR_DUP_MOVED:
return (XP_UCHAR*)"Duplicate turn complete. Scores:\n";
case STR_DUP_CLIENT_SENT:
return "This device has sent its moves to the host. When all players "
"have sent their moves it will be your turn again.";
case STRDD_DUP_HOST_RECEIVED:
return "%d of %d players have reported their moves.";
case STRD_DUP_TRADED:
return "No moves made; traded %d tiles";
case STRSD_DUP_ONESCORE:
return "%s: %d points\n";
default:
XP_LOGF( "%s(code=%d)", __func__, code );