local player settings together in a struct
authorMischa POSLAWSKY <netris@shiar.org>
Thu, 8 Mar 2007 08:19:13 +0000 (09:19 +0100)
committerMischa POSLAWSKY <netris@shiar.org>
Thu, 8 Mar 2007 08:19:13 +0000 (09:19 +0100)
client.c
curses.c
curses.h

index ee27cf0635ff05ccd179024cb1ea3445e4f88760..8f2b00b1e81a032e788885b855ffe96466574b05 100644 (file)
--- a/client.c
+++ b/client.c
@@ -704,7 +704,7 @@ static void game_loop(void)
                } //new piece
                while (gameStatus == 2) {
                        for (i = 1; i < MAX_SCREENS; i++)
-                               if (Players[i].alive > 0 && PlayerDisp[i])
+                               if (Players[i].alive > 0 && window[i].shown)
                                        changed |= RefreshBoard(i);
                        if (changed) {
                                if (!paused) ShowTime();
index bd0949a2745f237f0d827417f887f272372ee021..98465b60ad04e9bf3f38ed916db4ff4fdfd638d4 100644 (file)
--- a/curses.c
+++ b/curses.c
 # define HAVE_NCURSES
 #endif
 
+window_t window[MAX_SCREENS];
+
 static MyEventType KeyGenFunc(EventGenRec *gen, MyEvent *event);
 static EventGenRec keyGen = {
        NULL, 0, FT_read, STDIN_FILENO, KeyGenFunc, EM_key
 };
 
-static int boardYPos[MAX_SCREENS], boardXPos[MAX_SCREENS];
-static int boardSize[MAX_SCREENS];
-//^^^struct
 static int statusYPos, statusXPos;
 static int messageYPos, messageXPos, messageHeight, messageWidth;
 WINDOW *msgwin;
 static int haveColor;
-int PlayerDisp[MAX_SCREENS];
 
 #define MSG_HEIGHT 64  //max history
 static char *message[MSG_HEIGHT];
@@ -244,11 +242,11 @@ void DrawBox(int x1, int y1, int x2, int y2)
 
 void DrawField(int scr)
 { //draw field for player scr
-       if (!PlayerDisp[scr]) return; 
-       DrawBox(boardXPos[scr] - 1, boardYPos[scr] - Players[scr].boardVisible,
-               boardXPos[scr] + boardSize[scr] * Players[scr].boardWidth, boardYPos[scr] + 1);
+       if (!window[scr].shown) return; 
+       DrawBox(window[scr].posx - 1, window[scr].posy - Players[scr].boardVisible,
+               window[scr].posx + window[scr].size * Players[scr].boardWidth, window[scr].posy + 1);
        {
-               char s[boardSize[scr]*Players[scr].boardWidth+1];
+               char s[window[scr].size * Players[scr].boardWidth + 1];
 
                if (Players[scr].host && Players[scr].host[0])
                        snprintf(s, sizeof(s), " %s <%s> ",
@@ -257,7 +255,7 @@ void DrawField(int scr)
                s[sizeof(s)] = 0;
                if (haveColor && Players[scr].team > 0 && Players[scr].team <= 7)
                        attrset(A_REVERSE | COLOR_PAIR(Players[scr].team + 1));
-               mvaddstr(1, boardXPos[scr], s);
+               mvaddstr(1, window[scr].posx, s);
                if (haveColor) standend();
        } //display playername/host
 
@@ -280,11 +278,11 @@ void InitFields(void)
        clear();
        DrawTitle();
        getmaxyx(stdscr, y, x);
-       boardSize[me] = 2;
-       boardXPos[me] = 1;
-       boardYPos[me] = 21;
-       PlayerDisp[me] = 1;
-       statusXPos = boardSize[me] * Players[me].boardWidth + 3;
+       window[me].size = 2;
+       window[me].posx = 1;
+       window[me].posy = 21;
+       window[me].shown = 1;
+       statusXPos = window[me].size * Players[me].boardWidth + 3;
        statusYPos = 21;
        ShowScore(me, Players[me].score);
 
@@ -312,25 +310,25 @@ void InitFields(void)
                spaceavail -= Players[scr].boardWidth+2;
        prevscr = me;
        for (scr = 1; scr < MAX_SCREENS; scr++) if (scr != me) {
-               boardYPos[scr] = 21;
-               boardXPos[scr] =
-                       boardXPos[prevscr] + 2 + boardSize[prevscr] * Players[prevscr].boardWidth;
+               window[scr].posy = 21;
+               window[scr].posx =
+                       window[prevscr].posx + 2 + window[prevscr].size * Players[prevscr].boardWidth;
                if (prevscr == me) {
-                       boardXPos[scr] += 15; //scorebar
+                       window[scr].posx += 15; //scorebar
                        if (messageYPos < 24)
-                               boardXPos[scr] += messageWidth + 4; //messagebox
-                       spaceavail -= boardXPos[scr] - 3;
+                               window[scr].posx += messageWidth + 4; //messagebox
+                       spaceavail -= window[scr].posx - 3;
                } //stuff before second player
                if (spaceavail >= 0) {
-                       boardSize[scr] = 2;
+                       window[scr].size = 2;
                        spaceavail -= Players[scr].boardWidth;
                } //not enough space, half width
                else
-                       boardSize[scr] = 1;
-               if (x < boardXPos[scr] + 1 + boardSize[scr] * Players[scr].boardWidth)
-                       PlayerDisp[scr] = 0; //field doesn't fit on screen
+                       window[scr].size = 1;
+               if (x < window[scr].posx + 1 + window[scr].size * Players[scr].boardWidth)
+                       window[scr].shown = 0; //field doesn't fit on screen
                else
-                       PlayerDisp[scr] = 1;
+                       window[scr].shown = 1;
                prevscr = scr;
        }
        for (scr = 1; scr <= maxPlayer; scr++)
@@ -494,10 +492,10 @@ void PlotBlock(int scr, int y, int x, unsigned char type)
 {
        if (y >= 0 && y < Players[scr].boardVisible
         && x >= 0 && x < Players[scr].boardWidth) {
-               if (boardSize[scr] > 1)
-                       PlotBlock1(boardYPos[scr] - y, boardXPos[scr] + 2*x, type);
+               if (window[scr].size > 1)
+                       PlotBlock1(window[scr].posy - y, window[scr].posx + 2*x, type);
                else
-                       PlotBlock1S(boardYPos[scr] - y, boardXPos[scr] + x, type);
+                       PlotBlock1S(window[scr].posy - y, window[scr].posx + x, type);
        } //on screen
 }
 void PlotBlockXY(int y, int x, unsigned char type)
@@ -534,20 +532,20 @@ void ShowScore(int scr, struct _Score score)
 
 void FieldMessage(int playa, char *message)
 { //put a message over playa's field
-       if (!PlayerDisp[playa]) return;
+       if (!window[playa].shown) return;
        if (message) {
                char s[MAX_BOARD_WIDTH+1];
                memset(s, ' ', MAX_BOARD_WIDTH);
-               memcpy(&s[(boardSize[playa] * Players[playa].boardWidth / 2) - (strlen(message) / 2)],
+               memcpy(&s[(window[playa].size * Players[playa].boardWidth / 2) - (strlen(message) / 2)],
                        message, strlen(message));
-               s[boardSize[playa] * Players[playa].boardWidth] = 0;
+               s[window[playa].size * Players[playa].boardWidth] = 0;
 #ifdef HAVE_NCURSES
                attrset(A_REVERSE);
 #else
                standout();
 #endif
-               mvprintw(boardYPos[playa] - Players[playa].boardVisible / 2,
-                       boardXPos[playa], "%s", s);
+               mvprintw(window[playa].posy - Players[playa].boardVisible / 2,
+                       window[playa].posx, "%s", s);
                standend();
        } //display
        else {
@@ -563,20 +561,20 @@ void ShowPause(int playa)
        if (Players[playa].alive > 0)
                if (Players[playa].flags & SCF_paused)
                        if (Game.started > 1)
-                               FieldMessage(playa, boardSize[playa] > 1 ? "P A U S E D" : "PAUSED");
+                               FieldMessage(playa, window[playa].size > 1 ? "P A U S E D" : "PAUSED");
                        else
                                FieldMessage(playa,
-                                       boardSize[playa] > 1 ? "N O T  R E A D Y" : "NOT  READY");
+                                       window[playa].size > 1 ? "N O T  R E A D Y" : "NOT  READY");
                else
                        if (Game.started > 1)
                                FieldMessage(playa, NULL);
                        else
-                               FieldMessage(playa, boardSize[playa] > 1 ? "R E A D Y" : "READY");
+                               FieldMessage(playa, window[playa].size > 1 ? "R E A D Y" : "READY");
        else if (!Players[playa].alive)
                FieldMessage(playa,
-                       boardSize[playa] > 1 ? "G A M E  O V E R" : "GAME  OVER");
+                       window[playa].size > 1 ? "G A M E  O V E R" : "GAME  OVER");
        else
-               FieldMessage(playa, boardSize[playa] > 1 ? "E M P T Y" : "EMPTY");
+               FieldMessage(playa, window[playa].size > 1 ? "E M P T Y" : "EMPTY");
 }
 
 
index 84ff19b8f9f3d11530b7b83a84f9fee15620af67..13abc67056ca638851558f1806b16aa47a03d563 100644 (file)
--- a/curses.h
+++ b/curses.h
@@ -1,7 +1,14 @@
 #ifndef __CURSES_H
 #define __CURSES_H
 
-extern int PlayerDisp[MAX_SCREENS];
+typedef struct {
+       // local player settings
+       int shown; // visible
+       int posx; // starting column
+       int posy; // position of first (bottom) row
+       int size; // characters per block
+} window_t;
+extern window_t window[MAX_SCREENS];
 
 extern void InitScreens(void);
 extern void CleanupScreens(void);