Update of /cvsroot/netrek/client/netrekxp/src
In directory sc8-pr-cvs7.sourceforge.net:/tmp/cvs-serv12206/src

Modified Files:
	newwin.c ranklist.c 
Log Message:
Default buttonmap now uses mouse wheel for accel/decel, scroll up
to accelerate to max, scroll down to decelerate to warp 0.
Expanded size of rank window, recentered it on local window.
Added new functionality to rank window - showing DI needed for
next rank.  Follows server logic.

Index: newwin.c
===================================================================
RCS file: /cvsroot/netrek/client/netrekxp/src/newwin.c,v
retrieving revision 1.56
retrieving revision 1.57
diff -u -d -r1.56 -r1.57
--- newwin.c	26 Mar 2007 04:40:52 -0000	1.56
+++ newwin.c	2 Apr 2007 10:12:38 -0000	1.57
@@ -836,7 +836,7 @@
     planetw = W_MakeTextWindow ("planet", WINSIDE + 160, 10, 57, MAXPLANETS + 3, baseWin, 2);
     W_SetWindowExposeHandler (planetw, planetlist);
 
-    rankw = W_MakeTextWindow ("rank", 50, 300, 65, NUMRANKS + 9, baseWin, 2);
+    rankw = W_MakeTextWindow ("rank", 10, 300, 80, NUMRANKS + 9, baseWin, 2);
     W_SetWindowExposeHandler (rankw, ranklist);
 
     playerw = W_MakeTextWindow ("player", 0, WINSIDE + 50, PlistMaxWidth (), 32, baseWin, 2);

Index: ranklist.c
===================================================================
RCS file: /cvsroot/netrek/client/netrekxp/src/ranklist.c,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -u -d -r1.1.1.1 -r1.2
--- ranklist.c	21 Jan 2003 21:28:42 -0000	1.1.1.1
+++ ranklist.c	2 Apr 2007 10:12:38 -0000	1.2
@@ -21,11 +21,62 @@
 #include "data.h"
 #include "proto.h"
 
+/* Calculate DI to next rank, following server logic */
+float toNextRank(int rank)
+{
+    int hourratio;
+    float rankDI, myDI, oRating, pRating, bRating, Ratings;
+    
+    /* TODO: add support for INL mode */
+    if (!strcmp(me->p_name, "guest") || !strcmp(me->p_name, "Guest"))
+        hourratio = 5;
+    else
+        hourratio = 1;
+
+    oRating = offenseRating (me);
+    pRating = planetRating (me);
+    bRating = bombingRating (me);
+    Ratings = oRating + pRating + bRating;
+    myDI = (float) (Ratings * (me->p_stats.st_tticks / 36000.0));
+    rankDI = ranks[rank].ratings * ranks[rank].hours / hourratio;
+
+    if (Ratings > ranks[rank].ratings)
+    {
+        if (myDI > rankDI)
+            return (0.0);
+        else
+            return (rankDI - myDI);
+    }
+    else if (Ratings > (ranks[rank-1].ratings))
+    {
+        if (myDI > 2*rankDI)
+            return (0.0);
+        else
+            return (2*rankDI - myDI);
+    }
+    else if (me->p_stats.st_rank > 0 && Ratings > (ranks[rank-2].ratings))
+    {
+        if (myDI > 4*rankDI)
+            return (0.0);
+        else
+            return (4*rankDI - myDI);
+    }
+    else if (me->p_stats.st_rank >= 4 && Ratings > (ranks[rank-3].ratings))
+    {
+        if (myDI > 8*rankDI)
+            return (0.0);
+        else
+            return (8*rankDI - myDI);
+    }
+    else
+        return (-1);
+}
+
 void
 ranklist (void)
 {
     register int i;
-    char buf[80];
+    char buf[100];
 
     /* W_ClearWindow(rankw); */
     (void) strcpy (buf, "  Rank       Hours  Defense  Ratings      DI");
@@ -39,6 +90,18 @@
                  ranks[i].ratings, ranks[i].ratings * ranks[i].hours);
         if (mystats->st_rank == i)
         {
+            if (i < NUMRANKS-1)
+            {
+                char buf2[35];
+                float DI;
+                if ((DI = toNextRank(i+1)) != -1)
+                {
+                    sprintf(buf2, " (%.2f DI until next rank)", DI);
+                    strcat(buf, buf2);
+                }
+                else
+                    strcat(buf, " Need higher ratings for next rank");
+            }
             W_WriteText (rankw, 1, i + 2, W_Cyan, buf, strlen (buf),
                          W_BoldFont);
         }
@@ -54,17 +117,13 @@
     strcpy (buf, "in less than the hours allowed.");
     W_WriteText (rankw, 1, i + 4, textColor, buf, strlen (buf),
                  W_RegularFont);
-    strcpy (buf,
-            "OR, get offense+boming+planets above corresponding Ratings");
+    strcpy (buf, "OR, get offense+boming+planets above corresponding Ratings");
     W_WriteText (rankw, 1, i + 5, textColor, buf, strlen (buf),
                  W_RegularFont);
     strcpy (buf, "Promotions also occur at 2xDI with Ratings - 1");
     W_WriteText (rankw, 1, i + 6, textColor, buf, strlen (buf),
                  W_RegularFont);
-    strcpy (buf, "and at 4xDI with Ratings - 2");
+    strcpy (buf, "4xDI with Ratings - 2, and 8xDI with Ratings - 3");
     W_WriteText (rankw, 1, i + 7, textColor, buf, strlen (buf),
                  W_RegularFont);
-    strcpy (buf, " also, some servers require .8 defense for promotion.");
-    W_WriteText (rankw, 1, i + 8, textColor, buf, strlen (buf),
-                 W_RegularFont);
 }