chat status lines are now deleted on the next screen

origin
patty21 23 years ago
parent ce530cead0
commit e87822fb07

@ -16,26 +16,45 @@ int
chat_findfreeline () chat_findfreeline ()
{ {
int i; int i;
i = chat.lastline;
for (i = 0; (i < CHAT_MAX_LINES && chat.lines[i][0] != 0); i++);
if (i >= CHAT_MAX_LINES) { if (i >= CHAT_MAX_LINES) {
memcpy (chat.lines[1], chat.lines[0], 255); memcpy (chat.lines[1], chat.lines[0], 255);
i = 255; i = 255;
} }
else
chat.lastline++;
chat.changed = 1; chat.changed = 1;
return i; return i;
} }
void
chat_cleanup ()
{
int i;
for (i = 0; i < CHAT_MAX_LINES; i++) {
if (chat.linestatus[i] > 0)
chat.linestatus[i] = -1;
}
}
void void
chat_addline (char *text) chat_addline (char *text)
{ {
int l; int l;
l = chat_findfreeline (); l = chat_findfreeline ();
chat.linestatus[l] = 0;
strncpy (chat.lines[l], text, 255);
chat.lineschanged = 1;
}
void
chat_addstatusline (char *text)
{
int l;
l = chat_findfreeline ();
chat.linestatus[l] = 1;
strncpy (chat.lines[l], text, 255); strncpy (chat.lines[l], text, 255);
chat.lineschanged = 1; chat.lineschanged = 1;
} }
@ -197,6 +216,10 @@ chat_loop (SDL_Event * event)
y = chat.window.y + 4; y = chat.window.y + 4;
l = chat.startline; l = chat.startline;
while (y < (chat.window.y + chat.window.h - 32) && chat.lines[l][0] != 0) { while (y < (chat.window.y + chat.window.h - 32) && chat.lines[l][0] != 0) {
if (chat.linestatus[l] < 0) {
l++;
}
else {
for (p1 = 0; (p1 < maxchar && chat.lines[l][p2] != 0); p1++) for (p1 = 0; (p1 < maxchar && chat.lines[l][p2] != 0); p1++)
text[p1] = chat.lines[l][p2++]; text[p1] = chat.lines[l][p2++];
text[p1] = 0; text[p1] = 0;
@ -207,6 +230,7 @@ chat_loop (SDL_Event * event)
} }
y = y + font[0].size.y; y = y + font[0].size.y;
} }
}
if (chat.lines[l][0] != 0) { if (chat.lines[l][0] != 0) {
chat.startline++; chat.startline++;
chat.changed = 1; chat.changed = 1;
@ -227,6 +251,7 @@ chat_loop (SDL_Event * event)
for (p1 = 0; (p1 < maxchar && chat.input.text[p2] != 0); p1++) for (p1 = 0; (p1 < maxchar && chat.input.text[p2] != 0); p1++)
text[p1] = chat.input.text[p2++]; text[p1] = chat.input.text[p2++];
text[p1] = 0; text[p1] = 0;
font_draw (chat.window.x + 4, (chat.window.y + chat.window.h) - 4 - font[0].size.y, text,0); font_draw (chat.window.x + 4, (chat.window.y + chat.window.h) - 4 - font[0].size.y,
text, 0);
} }
}; };

@ -14,7 +14,9 @@ struct __chat {
signed char changed; signed char changed;
SDL_Surface *oldscreen; SDL_Surface *oldscreen;
short int startline; short int startline;
short int lastline;
char lines[CHAT_MAX_LINES][255]; char lines[CHAT_MAX_LINES][255];
short int linestatus[CHAT_MAX_LINES];
signed char lineschanged; signed char lineschanged;
_keybinput input; _keybinput input;
} typedef _chat; } typedef _chat;
@ -23,7 +25,9 @@ extern _chat chat;
extern void chat_show (int x1, int y1, int x2, int y2); extern void chat_show (int x1, int y1, int x2, int y2);
extern void chat_addline (char *text); extern void chat_addline (char *text);
extern void chat_addstatusline (char *text);
extern void chat_loop (SDL_Event *event); extern void chat_loop (SDL_Event *event);
extern void chat_drawbox (); extern void chat_drawbox ();
extern void chat_cleanup ();
#endif #endif

@ -54,7 +54,7 @@ mw_shutdown ()
int i; int i;
chat_show (-1, -1, -1, -1); chat_show (-1, -1, -1, -1);
chat_cleanup();
gfx_free_players (); gfx_free_players ();
for (i = 0; i < MAX_PLAYERS; i++) for (i = 0; i < MAX_PLAYERS; i++)
@ -221,9 +221,11 @@ mw_draw_chat ()
{ {
if (chat.visible == 0) { if (chat.visible == 0) {
chat_show (16, mw_chat + 16, gfx.res.x - 16, gfx.res.y - 32); chat_show (16, mw_chat + 16, gfx.res.x - 16, gfx.res.y - 32);
chat_addline ("Press [STRG] or [CTRL] - to select a player"); chat_addstatusline ("Press [STRG] or [CTRL] - to select a player");
if (GT_MP_PTPM) if (GT_MP_PTPM) {
chat_addline ("F4 - to start the game"); chat_addstatusline ("F4 - to start the game");
chat_addstatusline ("F5 - to change map settings");
}
} }
}; };

Loading…
Cancel
Save