Update of /cvsroot/netrek/client/netrekxp/src
In directory sc8-pr-cvs7.sourceforge.net:/tmp/cvs-serv6614/src
Modified Files:
planetlist.c
Log Message:
Planet list now sorts armies (low to high) within a team. Not as
simple as it sounds, as it turns out.
Index: planetlist.c
===================================================================
RCS file: /cvsroot/netrek/client/netrekxp/src/planetlist.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -d -r1.6 -r1.7
--- planetlist.c 16 Mar 2007 17:24:16 -0000 1.6
+++ planetlist.c 17 Mar 2007 01:21:49 -0000 1.7
@@ -57,15 +57,18 @@
void
updatePlanetw (void)
{
- register int i, pos;
+ register int i, k, pos;
char buf[BUFSIZ];
register struct planet *j;
int planetCount[NUMTEAM + 2]; /* Ind Fed Rom Kli Ori Unknown */
int planetOffset[NUMTEAM + 2];
int counter[NUMTEAM + 2];
+ int planetPos[NUMTEAM + 2][MAXPLANETS];
+ int planetArm[NUMTEAM + 2][MAXPLANETS];
int playercount = 0;
int largestteam = -1, nextlargestteam= -1;
int largestteamcount = -1, nextlargestteamcount = -1;
+ int temp, temparm, z;
if (sortPlanets)
{
@@ -83,6 +86,11 @@
planetCount[i] = 0;
planetOffset[i] = 0;
counter[i] = 0;
+ for (k = 0; k < MAXPLANETS; k++)
+ {
+ planetArm[i][k] = 0;
+ planetPos[i][k] = 0;
+ }
}
/* Find the 2 largest teams enemy teams. Team bits suck. */
@@ -106,24 +114,91 @@
}
}
- /* Store # of visible planets from each team */
+ /* Store # of visible planets from each team. And let's sort them
+ by army count (low to high) while we are at it. */
for (i = 0, j = &planets[i]; i < MAXPLANETS; i++, j++)
{
if (j->pl_info & me->p_team)
{
- if (j->pl_owner == 0) /* Independent */
- ++planetCount[0];
+ if (j->pl_owner == 0) /* Independent (no sorting)*/
+ {
+ planetPos[0][planetCount[0]] = planetCount[0];
+ planetCount[0]++;
+ }
else if (j->pl_owner == me->p_team) /* My team */
- ++planetCount[1];
+ {
+ planetPos[1][planetCount[1]] = planetCount[1];
+ planetArm[1][planetCount[1]] = j->pl_armies;
+ k = planetCount[1];
+ while (k > 0 && planetArm[1][k] < planetArm[1][k - 1])
+ {
+ temp = planetPos[1][k];
+ temparm = planetArm[1][k];
+ planetPos[1][k] = planetPos[1][k - 1];
+ planetArm[1][k] = planetArm[1][k - 1];
+ planetPos[1][k - 1] = temp;
+ planetArm[1][k - 1] = temparm;
+ k--;
+ }
+ planetCount[1]++;
+ }
else if (j->pl_owner == largestteam) /* Largest enemy */
- ++planetCount[2];
+ {
+ planetPos[2][planetCount[2]] = planetCount[2];
+ planetArm[2][planetCount[2]] = j->pl_armies;
+ k = planetCount[2];
+ while (k > 0 && planetArm[2][k] < planetArm[2][k - 1])
+ {
+ temp = planetPos[2][k];
+ temparm = planetArm[2][k];
+ planetPos[2][k] = planetPos[2][k - 1];
+ planetArm[2][k] = planetArm[2][k - 1];
+ planetPos[2][k - 1] = temp;
+ planetArm[2][k - 1] = temparm;
+ k--;
+ }
+ planetCount[2]++;
+ }
else if (j->pl_owner == nextlargestteam) /* Next largest enemy */
- ++planetCount[3];
+ {
+ planetPos[3][planetCount[3]] = planetCount[3];
+ planetArm[3][planetCount[3]] = j->pl_armies;
+ k = planetCount[3];
+ while (k > 0 && planetArm[3][k] < planetArm[3][k - 1])
+ {
+ temp = planetPos[3][k];
+ temparm = planetArm[3][k];
+ planetPos[3][k] = planetPos[3][k - 1];
+ planetArm[3][k] = planetArm[3][k - 1];
+ planetPos[3][k - 1] = temp;
+ planetArm[3][k - 1] = temparm;
+ k--;
+ }
+ planetCount[3]++;
+ }
else /* Smallest enemy */
- ++planetCount[4];
+ {
+ planetPos[4][planetCount[4]] = planetCount[4];
+ planetArm[4][planetCount[4]] = j->pl_armies;
+ k = planetCount[4];
+ while (k > 0 && planetArm[4][k] < planetArm[4][k - 1])
+ {
+ temp = planetPos[4][k];
+ temparm = planetArm[4][k];
+ planetPos[4][k] = planetPos[4][k - 1];
+ planetArm[4][k] = planetArm[4][k - 1];
+ planetPos[4][k - 1] = temp;
+ planetArm[4][k - 1] = temparm;
+ k--;
+ }
+ planetCount[4]++;
+ }
}
else
- ++planetCount[5];
+ {
+ planetPos[5][planetCount[5]] = planetCount[5];
+ planetCount[5]++;
+ }
}
/* Set the offsets */
planetOffset[0] = 0;
@@ -141,6 +216,7 @@
LineToConsole("Offsets are %d %d %d %d %d\n",
planetOffset[1],planetOffset[2],planetOffset[3],planetOffset[4],planetOffset[5]);
#endif
+
for (i = 0, j = &planets[i]; i < MAXPLANETS; i++, j++)
{
if (sortPlanets)
@@ -149,33 +225,53 @@
{
if (j->pl_owner == 0) /* Independent */
{
- pos = planetOffset[0] + counter[0];
+ pos = planetOffset[0] + planetPos[0][counter[0]];
counter[0]++;
}
else if (j->pl_owner == me->p_team) /* My team */
{
- pos = planetOffset[1] + counter[1];
+ for (z = 0; z < planetCount[1]; z++)
+ {
+ if (planetPos[1][z] == counter[1])
+ break;
+ }
+ pos = z + planetOffset[1];
counter[1]++;
}
else if (j->pl_owner == largestteam) /* Largest enemy */
{
- pos = planetOffset[2] + counter[2];
+ for (z = 0; z < planetCount[2]; z++)
+ {
+ if (planetPos[2][z] == counter[2])
+ break;
+ }
+ pos = z + planetOffset[2];
counter[2]++;
}
else if (j->pl_owner == nextlargestteam) /* Next largest enemy */
{
- pos = planetOffset[3] + counter[3];
+ for (z = 0; z < planetCount[3]; z++)
+ {
+ if (planetPos[3][z] == counter[3])
+ break;
+ }
+ pos = z + planetOffset[3];
counter[3]++;
}
else /* Smallest enemy */
{
- pos = planetOffset[4] + counter[4];
+ for (z = 0; z < planetCount[4]; z++)
+ {
+ if (planetPos[4][z] == counter[4])
+ break;
+ }
+ pos = z + planetOffset[4];
counter[4]++;
}
}
else
{
- pos = planetOffset[5] + counter[5];
+ pos = planetOffset[5] + planetPos[5][counter[5]];
counter[5]++;
}
}