mirror of
git://xwords.git.sourceforge.net/gitroot/xwords/xwords
synced 2025-02-05 20:45:49 +01:00
simplify move expl tracking; don't show for dup-mode robots
Removed a boolean that seemed unnecessary. Stopped showing move-explanations for robots in duplicate mode. They were being shown too early thanks to bad logic, but I don't think there's any call for them at all. A robot's move is only interesting if it's the one that wins the turn.
This commit is contained in:
parent
818868bdb2
commit
c00bbf8ef1
3 changed files with 31 additions and 34 deletions
|
@ -955,14 +955,17 @@ model_rejectPreviousMove( ModelCtxt* model, XWEnv xwe,
|
|||
XP_Bool
|
||||
model_canUndo( const ModelCtxt* model )
|
||||
{
|
||||
/* PENDING Turning off undo for duplicate mode for now. */
|
||||
XP_Bool result = !model->vol.gi->inDuplicateMode;
|
||||
XP_Bool inDuplicateMode = model->vol.gi->inDuplicateMode;
|
||||
/* I'm turning off undo for duplicate mode for now to avoid
|
||||
crashes. Ideally a duplicate mode player could change his mind until
|
||||
the timer fires, so try to fix this. PENDING*/
|
||||
XP_Bool result = !inDuplicateMode;
|
||||
if ( result ) {
|
||||
const StackCtxt* stack = model->vol.stack;
|
||||
XP_U16 nStackEntries = stack_getNEntries( stack );
|
||||
|
||||
/* More than just tile assignment? */
|
||||
XP_U16 assignCount = model->vol.gi->inDuplicateMode ? 1 : model->nPlayers;
|
||||
XP_U16 assignCount = inDuplicateMode ? 1 : model->nPlayers;
|
||||
result = nStackEntries > assignCount;
|
||||
}
|
||||
return result;
|
||||
|
|
|
@ -113,7 +113,6 @@ typedef struct ServerVolatiles {
|
|||
GameOverListener gameOverListener;
|
||||
void* gameOverData;
|
||||
XP_U16 bitsPerTile;
|
||||
XP_Bool showPrevMove;
|
||||
XP_Bool pickTilesCalled[MAX_NUM_PLAYERS];
|
||||
} ServerVolatiles;
|
||||
|
||||
|
@ -1027,7 +1026,6 @@ setPrevMoveStream( ServerCtxt* server, XWEnv xwe, XWStreamCtxt* stream )
|
|||
{
|
||||
if ( !server->nv._prevMoveStream ) {
|
||||
server->nv._prevMoveStream = stream;
|
||||
// mkServerStream( server );
|
||||
} else {
|
||||
XP_LOGFF( "appending to existing stream" );
|
||||
stream_putBytes( server->nv._prevMoveStream, stream_getPtr( stream ),
|
||||
|
@ -1049,7 +1047,6 @@ dupe_setupShowTrade( ServerCtxt* server, XWEnv xwe, XP_U16 nTiles )
|
|||
stream_catString( stream, buf );
|
||||
|
||||
setPrevMoveStream( server, xwe, stream );
|
||||
server->vol.showPrevMove = XP_TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -1089,8 +1086,7 @@ dupe_setupShowMove( ServerCtxt* server, XWEnv xwe, XP_U16* scores )
|
|||
}
|
||||
|
||||
setPrevMoveStream( server, xwe, stream );
|
||||
server->vol.showPrevMove = XP_TRUE;
|
||||
}
|
||||
} /* dupe_setupShowMove */
|
||||
|
||||
static void
|
||||
addDupeStuffMark( XWStreamCtxt* stream, DUPE_STUFF typ )
|
||||
|
@ -1399,8 +1395,6 @@ robotTradeTiles( ServerCtxt* server, MoveInfo* newMove )
|
|||
tradeTiles[numToTrade++] = curTiles[ii];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
} /* robotTradeTiles */
|
||||
#endif
|
||||
|
||||
|
@ -1473,14 +1467,15 @@ makeRobotMove( ServerCtxt* server, XWEnv xwe )
|
|||
}
|
||||
if ( forceTrade || searchComplete ) {
|
||||
const XP_UCHAR* str;
|
||||
XWStreamCtxt* stream = NULL;
|
||||
|
||||
XP_Bool trade = forceTrade ||
|
||||
((newMove.nTiles == 0) && !canMove &&
|
||||
(server_countTilesInPool( server ) >= gi->traySize));
|
||||
|
||||
server->vol.showPrevMove = XP_TRUE;
|
||||
if ( inDuplicateMode(server) || server->nv.showRobotScores ) {
|
||||
/* I've forgotten why I earlier wanted to explain robot moves in
|
||||
duplicate games. I don't want to now. */
|
||||
XWStreamCtxt* stream = NULL;
|
||||
if ( server->nv.showRobotScores && ! inDuplicateMode(server) ) {
|
||||
stream = mkServerStream( server );
|
||||
}
|
||||
|
||||
|
@ -1520,14 +1515,15 @@ makeRobotMove( ServerCtxt* server, XWEnv xwe )
|
|||
newMove.nTiles, turn );
|
||||
|
||||
if ( !!stream ) {
|
||||
setPrevMoveStream( server, xwe, stream );
|
||||
|
||||
XWStreamCtxt* wordsStream = mkServerStream( server );
|
||||
WordNotifierInfo* ni =
|
||||
model_initWordCounter( model, wordsStream );
|
||||
(void)model_checkMoveLegal( model, xwe, turn, stream, ni );
|
||||
setPrevMoveStream( server, xwe, stream );
|
||||
server->nv.prevWordsStream = wordsStream;
|
||||
}
|
||||
result = server_commitMove( server, xwe, turn, NULL );
|
||||
result = commitMoveImpl( server, xwe, turn, NULL, XP_FALSE );
|
||||
} else {
|
||||
result = XP_FALSE;
|
||||
}
|
||||
|
@ -1599,7 +1595,6 @@ showPrevScore( ServerCtxt* server, XWEnv xwe )
|
|||
{
|
||||
/* 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;
|
||||
XP_UCHAR buf[128];
|
||||
|
@ -1634,7 +1629,7 @@ showPrevScore( ServerCtxt* server, XWEnv xwe )
|
|||
stream_destroy( prevStream, xwe );
|
||||
}
|
||||
|
||||
util_informMove( util, xwe, prevTurn, stream, server->nv.prevWordsStream );
|
||||
util_informMove( server->vol.util, xwe, prevTurn, stream, server->nv.prevWordsStream );
|
||||
stream_destroy( stream, xwe );
|
||||
|
||||
if ( !!server->nv.prevWordsStream ) {
|
||||
|
@ -2717,12 +2712,14 @@ nextTurn( ServerCtxt* server, XWEnv xwe, XP_S16 nxtTurn )
|
|||
}
|
||||
}
|
||||
|
||||
if ( server->vol.showPrevMove ) {
|
||||
server->vol.showPrevMove = XP_FALSE;
|
||||
if ( NULL != server->nv._prevMoveStream && XWSTATE_NEED_SHOWSCORE != server->nv.gameState ) {
|
||||
if ( inDuplicateMode(server) || server->nv.showRobotScores ) {
|
||||
server->nv.stateAfterShow = server->nv.gameState;
|
||||
SETSTATE( server, XWSTATE_NEED_SHOWSCORE );
|
||||
SETSTATE( server, XWSTATE_NEED_SHOWSCORE ); /* here? */
|
||||
moreToDo = XP_TRUE;
|
||||
} else {
|
||||
XP_ASSERT( 0 );
|
||||
XP_LOGFF( "ERROR: have move stream I won't display" );
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3000,7 +2997,6 @@ reflectMoveAndInform( ServerCtxt* server, XWEnv xwe, XWStreamCtxt* stream )
|
|||
&tradedTiles, &newTiles );
|
||||
pool_replaceTiles( server->pool, &tradedTiles );
|
||||
|
||||
server->vol.showPrevMove = XP_TRUE;
|
||||
mvStream = makeTradeReportIf( server, xwe, &tradedTiles );
|
||||
|
||||
} else {
|
||||
|
@ -3014,7 +3010,6 @@ reflectMoveAndInform( ServerCtxt* server, XWEnv xwe, XWStreamCtxt* stream )
|
|||
sendMoveToClientsExcept( server, xwe, whoMoved, isLegalMove, &newTiles,
|
||||
(TrayTileSet*)NULL, sourceClientIndex );
|
||||
|
||||
server->vol.showPrevMove = XP_TRUE;
|
||||
if ( isLegalMove ) {
|
||||
mvStream = makeMoveReportIf( server, xwe, &wordsStream );
|
||||
}
|
||||
|
@ -3092,10 +3087,8 @@ reflectMove( ServerCtxt* server, XWEnv xwe, XWStreamCtxt* stream )
|
|||
model_makeTileTrade( model, whoMoved, &tradedTiles, &newTiles );
|
||||
pool_replaceTiles( server->pool, &tradedTiles );
|
||||
|
||||
server->vol.showPrevMove = XP_TRUE;
|
||||
mvStream = makeTradeReportIf( server, xwe, &tradedTiles );
|
||||
} else {
|
||||
server->vol.showPrevMove = XP_TRUE;
|
||||
mvStream = makeMoveReportIf( server, xwe, &wordsStream );
|
||||
model_commitTurn( model, xwe, whoMoved, &newTiles );
|
||||
}
|
||||
|
@ -3471,7 +3464,7 @@ dupe_forceCommits( ServerCtxt* server, XWEnv xwe )
|
|||
about everything. */
|
||||
static void
|
||||
dupe_checkWhatsDone( const ServerCtxt* server, XP_Bool amServer,
|
||||
XP_Bool* allDoneP, XP_Bool* allLocalsDoneP )
|
||||
XP_Bool* allDoneP, XP_Bool* allLocalsDoneP )
|
||||
{
|
||||
XP_Bool allDone = XP_TRUE;
|
||||
XP_Bool allLocalsDone = XP_TRUE;
|
||||
|
|
|
@ -1827,18 +1827,19 @@ gtk_util_informMove( XW_UtilCtxt* uc, XWEnv XP_UNUSED(xwe), XP_S16 XP_UNUSED(tur
|
|||
{
|
||||
GtkGameGlobals* globals = (GtkGameGlobals*)uc->closure;
|
||||
char* explStr = strFromStream( expl );
|
||||
char* wordsStr;
|
||||
if ( NULL == words ) {
|
||||
wordsStr = malloc(1);
|
||||
wordsStr[0] = '\0';
|
||||
} else {
|
||||
wordsStr = strFromStream( words );
|
||||
gchar* msg = g_strdup_printf( "informMove():\nexpl: %s", explStr );
|
||||
if ( NULL != words ) {
|
||||
char* wordsStr = strFromStream( words );
|
||||
gchar* prev = msg;
|
||||
gchar* postfix = g_strdup_printf( "words: %s", wordsStr );
|
||||
free( wordsStr );
|
||||
msg = g_strconcat( msg, postfix, NULL );
|
||||
g_free( prev );
|
||||
g_free( postfix );
|
||||
}
|
||||
gchar* msg = g_strdup_printf( "informMove():\nexpl: %swords: %s", explStr, wordsStr );
|
||||
(void)gtkask( globals->window, msg, GTK_BUTTONS_OK, NULL );
|
||||
free( explStr );
|
||||
free( wordsStr );
|
||||
free( msg );
|
||||
g_free( msg );
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
Loading…
Add table
Reference in a new issue