Update of /cvsroot/netrek/client/netrekxp/src In directory sc8-pr-cvs7.sourceforge.net:/tmp/cvs-serv4081/src Modified Files: map.c Log Message: Following COW, added back in debug showRegions function. Increased granularity of rough maps. Redraw check against player in region, doesn't quite work yet, region is too small. Index: map.c =================================================================== RCS file: /cvsroot/netrek/client/netrekxp/src/map.c,v retrieving revision 1.26 retrieving revision 1.27 diff -u -d -r1.26 -r1.27 --- map.c 28 Feb 2007 09:35:20 -0000 1.26 +++ map.c 14 Mar 2007 15:37:21 -0000 1.27 @@ -23,6 +23,9 @@ #include "map.h" #include "proto.h" +/* debugging feature, show rectangular redraw regions on galactic */ +#undef DEBUG_SHOW_REGIONS + /* * Local Constants: * @@ -32,7 +35,7 @@ * Note: Detail *MUST* be a factor of GWIDTH. */ -#define DETAIL 40 +#define DETAIL 100 #define SIZE (GWIDTH/DETAIL) @@ -188,6 +191,59 @@ initialized = 1; } +#ifdef DEBUG_SHOW_REGIONS /* Debugging code */ +void +showRegions(void) +/* + * Make a rough map of the location of all the planets to help decide + * whether a ship is possibly overlapping a planet. + */ +{ + int k; + int startX, startY; + int endX, endY; + struct planet *pl; +#ifdef BEEPLITE + const int pRadius = 3 * BMP_MPLANET_WIDTH * GWIDTH / WINSIDE / 5; +#else + const int pRadius = BMP_MPLANET_WIDTH * GWIDTH / WINSIDE / 2; +#endif + const int tHeight = W_Textheight * GWIDTH / WINSIDE; + const int tWidth = W_Textwidth * GWIDTH / WINSIDE; + + for (k = 0, pl = planets; k < MAXPLANETS; k++, pl++) + { + startX = (pl->pl_x - pRadius - tWidth) / SIZE; + endX = (pl->pl_x + pRadius + tWidth + (tWidth / 2)) / SIZE; + + startY = (pl->pl_y - pRadius - (tHeight / 2)) / SIZE; + endY = (pl->pl_y + pRadius + tHeight + (tHeight / 2)) / SIZE; + + if (startX < 0) + startX = 0; + + if (endX >= DETAIL) + endX = DETAIL - 1; + + if (startY < 0) + startY = 0; + + if (endY >= DETAIL) + endY = DETAIL - 1; + + startX = startX * SIZE * WINSIDE / GWIDTH; + startY = startY * SIZE * WINSIDE / GWIDTH; + endX = (endX * SIZE + SIZE - 1) * WINSIDE / GWIDTH; + endY = (endY * SIZE + SIZE - 1) * WINSIDE / GWIDTH; + + W_MakeLine(mapw, startX, startY, startX, endY, W_White); + W_MakeLine(mapw, startX, startY, endX, startY, W_White); + W_MakeLine(mapw, endX, endY, startX, endY, W_White); + W_MakeLine(mapw, endX, endY, endX, startY, W_White); + } +} +#endif /* Debugging code */ + /******************************************************************************/ /*** checkRedraw() /******************************************************************************/ @@ -198,9 +254,14 @@ * Compare the given location of a ship with the rough planet map created * by initPlanets() to decide if part of the planet may have been erased * by the ship. + * + * Also force a redraw of every other player in the same grid square, + * otherwise they will blink out of existence as a result of the + * planet redraw. */ { int i; + struct player *j; x /= SIZE; y /= SIZE; @@ -209,33 +270,39 @@ { i = roughMap[x][y]; - if (i != -1) + if (i == -1) return; + planets[i].pl_flags |= PLREDRAW; + + for (i = 0, j = &players[i]; i < MAXPLAYER; i++, j++) { - planets[i].pl_flags |= PLREDRAW; - - i = roughMap2[x][y]; - - if (i != -1) - { - planets[i].pl_flags |= PLREDRAW; - } + if (j->p_status != PALIVE) continue; + if (j->p_flags & PFOBSERV) continue; + if ((j->p_x / SIZE) == x && (j->p_y / SIZE) == y ) + redrawPlayer[i] = 1; } + + i = roughMap2[x][y]; + if (i == -1) return; + planets[i].pl_flags |= PLREDRAW; } else { i = roughMap3[x][y]; - - if (i != -1) + + if (i == -1) return; + planets[i].pl_flags |= PLREDRAW; + + for (i = 0, j = &players[i]; i < MAXPLAYER; i++, j++) { - planets[i].pl_flags |= PLREDRAW; - - i = roughMap4[x][y]; - - if (i != -1) - { - planets[i].pl_flags |= PLREDRAW; - } + if (j->p_status != PALIVE) continue; + if (j->p_flags & PFOBSERV) continue; + if ((j->p_x / SIZE) == x && (j->p_y / SIZE) == y ) + redrawPlayer[i] = 1; } + + i = roughMap4[x][y]; + if (i == -1) return; + planets[i].pl_flags |= PLREDRAW; } } @@ -803,7 +870,7 @@ lastRedraw[i] = 0; } - if (lastRedraw[i] == 10) + if (lastRedraw[i] == server_ups) { /* Redraw stationary ships every update so that these ships are not hidden by planet updates. */ @@ -822,6 +889,10 @@ DrawPlanets (); +#ifdef DEBUG_SHOW_REGIONS /* Debugging code */ + showRegions(); +#endif + /* draw viewBox */ if (viewBox) {