mirror of
git://xwords.git.sourceforge.net/gitroot/xwords/xwords
synced 2025-02-11 08:48:06 +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
|
XP_Bool
|
||||||
model_canUndo( const ModelCtxt* model )
|
model_canUndo( const ModelCtxt* model )
|
||||||
{
|
{
|
||||||
/* PENDING Turning off undo for duplicate mode for now. */
|
XP_Bool inDuplicateMode = model->vol.gi->inDuplicateMode;
|
||||||
XP_Bool result = !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 ) {
|
if ( result ) {
|
||||||
const StackCtxt* stack = model->vol.stack;
|
const StackCtxt* stack = model->vol.stack;
|
||||||
XP_U16 nStackEntries = stack_getNEntries( stack );
|
XP_U16 nStackEntries = stack_getNEntries( stack );
|
||||||
|
|
||||||
/* More than just tile assignment? */
|
/* 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;
|
result = nStackEntries > assignCount;
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
|
|
|
@ -113,7 +113,6 @@ typedef struct ServerVolatiles {
|
||||||
GameOverListener gameOverListener;
|
GameOverListener gameOverListener;
|
||||||
void* gameOverData;
|
void* gameOverData;
|
||||||
XP_U16 bitsPerTile;
|
XP_U16 bitsPerTile;
|
||||||
XP_Bool showPrevMove;
|
|
||||||
XP_Bool pickTilesCalled[MAX_NUM_PLAYERS];
|
XP_Bool pickTilesCalled[MAX_NUM_PLAYERS];
|
||||||
} ServerVolatiles;
|
} ServerVolatiles;
|
||||||
|
|
||||||
|
@ -1027,7 +1026,6 @@ setPrevMoveStream( ServerCtxt* server, XWEnv xwe, XWStreamCtxt* stream )
|
||||||
{
|
{
|
||||||
if ( !server->nv._prevMoveStream ) {
|
if ( !server->nv._prevMoveStream ) {
|
||||||
server->nv._prevMoveStream = stream;
|
server->nv._prevMoveStream = stream;
|
||||||
// mkServerStream( server );
|
|
||||||
} else {
|
} else {
|
||||||
XP_LOGFF( "appending to existing stream" );
|
XP_LOGFF( "appending to existing stream" );
|
||||||
stream_putBytes( server->nv._prevMoveStream, stream_getPtr( 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 );
|
stream_catString( stream, buf );
|
||||||
|
|
||||||
setPrevMoveStream( server, xwe, stream );
|
setPrevMoveStream( server, xwe, stream );
|
||||||
server->vol.showPrevMove = XP_TRUE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -1089,8 +1086,7 @@ dupe_setupShowMove( ServerCtxt* server, XWEnv xwe, XP_U16* scores )
|
||||||
}
|
}
|
||||||
|
|
||||||
setPrevMoveStream( server, xwe, stream );
|
setPrevMoveStream( server, xwe, stream );
|
||||||
server->vol.showPrevMove = XP_TRUE;
|
} /* dupe_setupShowMove */
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
addDupeStuffMark( XWStreamCtxt* stream, DUPE_STUFF typ )
|
addDupeStuffMark( XWStreamCtxt* stream, DUPE_STUFF typ )
|
||||||
|
@ -1399,8 +1395,6 @@ robotTradeTiles( ServerCtxt* server, MoveInfo* newMove )
|
||||||
tradeTiles[numToTrade++] = curTiles[ii];
|
tradeTiles[numToTrade++] = curTiles[ii];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
} /* robotTradeTiles */
|
} /* robotTradeTiles */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -1473,14 +1467,15 @@ makeRobotMove( ServerCtxt* server, XWEnv xwe )
|
||||||
}
|
}
|
||||||
if ( forceTrade || searchComplete ) {
|
if ( forceTrade || searchComplete ) {
|
||||||
const XP_UCHAR* str;
|
const XP_UCHAR* str;
|
||||||
XWStreamCtxt* stream = NULL;
|
|
||||||
|
|
||||||
XP_Bool trade = forceTrade ||
|
XP_Bool trade = forceTrade ||
|
||||||
((newMove.nTiles == 0) && !canMove &&
|
((newMove.nTiles == 0) && !canMove &&
|
||||||
(server_countTilesInPool( server ) >= gi->traySize));
|
(server_countTilesInPool( server ) >= gi->traySize));
|
||||||
|
|
||||||
server->vol.showPrevMove = XP_TRUE;
|
/* I've forgotten why I earlier wanted to explain robot moves in
|
||||||
if ( inDuplicateMode(server) || server->nv.showRobotScores ) {
|
duplicate games. I don't want to now. */
|
||||||
|
XWStreamCtxt* stream = NULL;
|
||||||
|
if ( server->nv.showRobotScores && ! inDuplicateMode(server) ) {
|
||||||
stream = mkServerStream( server );
|
stream = mkServerStream( server );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1520,14 +1515,15 @@ makeRobotMove( ServerCtxt* server, XWEnv xwe )
|
||||||
newMove.nTiles, turn );
|
newMove.nTiles, turn );
|
||||||
|
|
||||||
if ( !!stream ) {
|
if ( !!stream ) {
|
||||||
|
setPrevMoveStream( server, xwe, stream );
|
||||||
|
|
||||||
XWStreamCtxt* wordsStream = mkServerStream( server );
|
XWStreamCtxt* wordsStream = mkServerStream( server );
|
||||||
WordNotifierInfo* ni =
|
WordNotifierInfo* ni =
|
||||||
model_initWordCounter( model, wordsStream );
|
model_initWordCounter( model, wordsStream );
|
||||||
(void)model_checkMoveLegal( model, xwe, turn, stream, ni );
|
(void)model_checkMoveLegal( model, xwe, turn, stream, ni );
|
||||||
setPrevMoveStream( server, xwe, stream );
|
|
||||||
server->nv.prevWordsStream = wordsStream;
|
server->nv.prevWordsStream = wordsStream;
|
||||||
}
|
}
|
||||||
result = server_commitMove( server, xwe, turn, NULL );
|
result = commitMoveImpl( server, xwe, turn, NULL, XP_FALSE );
|
||||||
} else {
|
} else {
|
||||||
result = XP_FALSE;
|
result = XP_FALSE;
|
||||||
}
|
}
|
||||||
|
@ -1599,7 +1595,6 @@ showPrevScore( ServerCtxt* server, XWEnv xwe )
|
||||||
{
|
{
|
||||||
/* showRobotScores can be changed between turns */
|
/* showRobotScores can be changed between turns */
|
||||||
if ( inDuplicateMode( server ) || server->nv.showRobotScores ) {
|
if ( inDuplicateMode( server ) || server->nv.showRobotScores ) {
|
||||||
XW_UtilCtxt* util = server->vol.util;
|
|
||||||
XW_DUtilCtxt* dutil = server->vol.dutil;
|
XW_DUtilCtxt* dutil = server->vol.dutil;
|
||||||
XWStreamCtxt* stream;
|
XWStreamCtxt* stream;
|
||||||
XP_UCHAR buf[128];
|
XP_UCHAR buf[128];
|
||||||
|
@ -1634,7 +1629,7 @@ showPrevScore( ServerCtxt* server, XWEnv xwe )
|
||||||
stream_destroy( prevStream, 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 );
|
stream_destroy( stream, xwe );
|
||||||
|
|
||||||
if ( !!server->nv.prevWordsStream ) {
|
if ( !!server->nv.prevWordsStream ) {
|
||||||
|
@ -2717,12 +2712,14 @@ nextTurn( ServerCtxt* server, XWEnv xwe, XP_S16 nxtTurn )
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( server->vol.showPrevMove ) {
|
if ( NULL != server->nv._prevMoveStream && XWSTATE_NEED_SHOWSCORE != server->nv.gameState ) {
|
||||||
server->vol.showPrevMove = XP_FALSE;
|
|
||||||
if ( inDuplicateMode(server) || server->nv.showRobotScores ) {
|
if ( inDuplicateMode(server) || server->nv.showRobotScores ) {
|
||||||
server->nv.stateAfterShow = server->nv.gameState;
|
server->nv.stateAfterShow = server->nv.gameState;
|
||||||
SETSTATE( server, XWSTATE_NEED_SHOWSCORE );
|
SETSTATE( server, XWSTATE_NEED_SHOWSCORE ); /* here? */
|
||||||
moreToDo = XP_TRUE;
|
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 );
|
&tradedTiles, &newTiles );
|
||||||
pool_replaceTiles( server->pool, &tradedTiles );
|
pool_replaceTiles( server->pool, &tradedTiles );
|
||||||
|
|
||||||
server->vol.showPrevMove = XP_TRUE;
|
|
||||||
mvStream = makeTradeReportIf( server, xwe, &tradedTiles );
|
mvStream = makeTradeReportIf( server, xwe, &tradedTiles );
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
@ -3014,7 +3010,6 @@ reflectMoveAndInform( ServerCtxt* server, XWEnv xwe, XWStreamCtxt* stream )
|
||||||
sendMoveToClientsExcept( server, xwe, whoMoved, isLegalMove, &newTiles,
|
sendMoveToClientsExcept( server, xwe, whoMoved, isLegalMove, &newTiles,
|
||||||
(TrayTileSet*)NULL, sourceClientIndex );
|
(TrayTileSet*)NULL, sourceClientIndex );
|
||||||
|
|
||||||
server->vol.showPrevMove = XP_TRUE;
|
|
||||||
if ( isLegalMove ) {
|
if ( isLegalMove ) {
|
||||||
mvStream = makeMoveReportIf( server, xwe, &wordsStream );
|
mvStream = makeMoveReportIf( server, xwe, &wordsStream );
|
||||||
}
|
}
|
||||||
|
@ -3092,10 +3087,8 @@ reflectMove( ServerCtxt* server, XWEnv xwe, XWStreamCtxt* stream )
|
||||||
model_makeTileTrade( model, whoMoved, &tradedTiles, &newTiles );
|
model_makeTileTrade( model, whoMoved, &tradedTiles, &newTiles );
|
||||||
pool_replaceTiles( server->pool, &tradedTiles );
|
pool_replaceTiles( server->pool, &tradedTiles );
|
||||||
|
|
||||||
server->vol.showPrevMove = XP_TRUE;
|
|
||||||
mvStream = makeTradeReportIf( server, xwe, &tradedTiles );
|
mvStream = makeTradeReportIf( server, xwe, &tradedTiles );
|
||||||
} else {
|
} else {
|
||||||
server->vol.showPrevMove = XP_TRUE;
|
|
||||||
mvStream = makeMoveReportIf( server, xwe, &wordsStream );
|
mvStream = makeMoveReportIf( server, xwe, &wordsStream );
|
||||||
model_commitTurn( model, xwe, whoMoved, &newTiles );
|
model_commitTurn( model, xwe, whoMoved, &newTiles );
|
||||||
}
|
}
|
||||||
|
|
|
@ -1827,18 +1827,19 @@ gtk_util_informMove( XW_UtilCtxt* uc, XWEnv XP_UNUSED(xwe), XP_S16 XP_UNUSED(tur
|
||||||
{
|
{
|
||||||
GtkGameGlobals* globals = (GtkGameGlobals*)uc->closure;
|
GtkGameGlobals* globals = (GtkGameGlobals*)uc->closure;
|
||||||
char* explStr = strFromStream( expl );
|
char* explStr = strFromStream( expl );
|
||||||
char* wordsStr;
|
gchar* msg = g_strdup_printf( "informMove():\nexpl: %s", explStr );
|
||||||
if ( NULL == words ) {
|
if ( NULL != words ) {
|
||||||
wordsStr = malloc(1);
|
char* wordsStr = strFromStream( words );
|
||||||
wordsStr[0] = '\0';
|
gchar* prev = msg;
|
||||||
} else {
|
gchar* postfix = g_strdup_printf( "words: %s", wordsStr );
|
||||||
wordsStr = strFromStream( words );
|
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 );
|
(void)gtkask( globals->window, msg, GTK_BUTTONS_OK, NULL );
|
||||||
free( explStr );
|
free( explStr );
|
||||||
free( wordsStr );
|
g_free( msg );
|
||||||
free( msg );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
Loading…
Add table
Reference in a new issue