rpgxef/code/ui/ui_motd.c
2014-11-08 11:47:20 +01:00

299 lines
7.5 KiB
C

/**********************************************************************
UI_MOTD.C
The MotD thing
RPG-X - Marcin - 15/12/2008
**********************************************************************/
#include "../qcommon/stv_version.h"
#include "ui_local.h"
#include "ui_logger.h"
enum ui_motdIDs_e {
ID_CONTINUE = 10,
ID_DISCONNECT,
ID_ARROWUP = 100,
ID_ARROWDOWN
};
enum ui_motdLimits_e {
MIN_MOTD_LINES = 20,
MAX_MOTD_LINES = 256
};
extern void InGame_LeaveAction(qboolean result);
char motdtext[MAX_MOTD_LINES][256];
int32_t motdtextnum;
typedef struct {
menuframework_s menu;
menubitmap_s quitmenu;
menubitmap_s disconnect;
menubitmap_s arrowdwn;
menubitmap_s arrowup;
int32_t scrollnum;
qhandle_t halfroundl_22;
} motdstuff_t;
static motdstuff_t s_motdstuff;
/*
=================
M_Motd_Event
=================
*/
static void M_MotdMenu_Event(void *ptr, int32_t notification)
{
UI_LogFuncBegin();
if (notification != QM_ACTIVATED) {
UI_LogFuncEnd();
return;
}
switch (((menucommon_s*)ptr)->id) {
case ID_DISCONNECT:
UI_ConfirmMenu(menu_normal_text[MNT_LEAVE_MATCH], 0, InGame_LeaveAction);
break;
case ID_CONTINUE:
UI_PopMenu();
break;
case ID_ARROWUP:
if (s_motdstuff.scrollnum > 0) {
s_motdstuff.scrollnum -= 3;
}
break;
case ID_ARROWDOWN:
if (s_motdstuff.scrollnum + MIN_MOTD_LINES < motdtextnum) {
s_motdstuff.scrollnum += 3;
}
}
UI_LogFuncEnd();
}
/*
=================
MotdMenu_Key
=================
*/
sfxHandle_t MotdMenu_Key(int32_t key)
{
UI_LogFuncBegin();
UI_LogFuncEnd();
return (Menu_DefaultKey(&s_motdstuff.menu, key));
}
/*
=================
M_MotdMenu_Graphics
=================
*/
static void M_MotdMenu_Graphics(void)
{
UI_LogFuncBegin();
int32_t i;
int32_t x = 15;
int32_t y = 15;
for (i = s_motdstuff.scrollnum; i < motdtextnum && i < (MIN_MOTD_LINES + s_motdstuff.scrollnum); ++i) {
UI_DrawProportionalString(x, y, motdtext[i], UI_SMALLFONT | UI_LEFT, colorTable[CT_WHITE]);
y += 21;
}
//UI_FrameBottom_Graphics(); // Bottom two thirds
// Print version
UI_DrawProportionalString(371, 445, Q3_VERSION, UI_TINYFONT, colorTable[CT_BLACK]);
trap_R_SetColor(colorTable[s_motdstuff.quitmenu.color]);
UI_DrawHandlePic(s_motdstuff.quitmenu.generic.x - 14,
s_motdstuff.quitmenu.generic.y,
MENU_BUTTON_MED_HEIGHT, s_motdstuff.quitmenu.height, uis.graphicButtonLeftEnd);
UI_DrawHandlePic(s_motdstuff.disconnect.generic.x - 14,
s_motdstuff.disconnect.generic.y,
MENU_BUTTON_MED_HEIGHT, s_motdstuff.disconnect.height, uis.graphicButtonLeftEnd);
trap_R_SetColor(colorTable[CT_LTBLUE1]); //LTBROWN1]);
UI_DrawHandlePic(28, 440, 287, 17, uis.whiteShader); // Bottom front Line
UI_DrawHandlePic(0, 440, 25, 25, s_motdstuff.halfroundl_22);
UI_DrawHandlePic(319, 440, 25, 25, uis.halfroundr_22);
trap_R_SetColor(NULL);
UI_LogFuncEnd();
}
/*
===============
MotdMenu_Draw
===============
*/
static void MotdMenu_Draw(void)
{
UI_LogFuncBegin();
M_MotdMenu_Graphics();
UI_LogFuncEnd();
Menu_Draw(&s_motdstuff.menu);
}
/*
===============
UI_MotdMenu_Cache
===============
*/
void UI_MotdMenu_Cache(void)
{
UI_LogFuncBegin();
s_motdstuff.halfroundl_22 = trap_R_RegisterShaderNoMip("menu/common/halfroundl_22.tga");
UI_LogFuncEnd();
}
/*
===============
MotdMenu_Init
===============
*/
void MotdMenu_Init(void)
{
UI_LogFuncBegin();
s_motdstuff.menu.nitems = 0;
s_motdstuff.menu.draw = MotdMenu_Draw;
s_motdstuff.menu.key = MotdMenu_Key;
s_motdstuff.menu.wrapAround = qtrue;
s_motdstuff.menu.descX = MENU_DESC_X;
s_motdstuff.menu.descY = MENU_DESC_Y;
s_motdstuff.menu.titleX = MENU_TITLE_X;
s_motdstuff.menu.titleY = MENU_TITLE_Y;
s_motdstuff.quitmenu.generic.type = MTYPE_BITMAP;
s_motdstuff.quitmenu.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_motdstuff.quitmenu.generic.x = 500;
s_motdstuff.quitmenu.generic.y = 440;
s_motdstuff.quitmenu.generic.name = GRAPHIC_BUTTONRIGHT;
s_motdstuff.quitmenu.generic.id = ID_CONTINUE;
s_motdstuff.quitmenu.generic.callback = M_MotdMenu_Event;
s_motdstuff.quitmenu.width = MENU_BUTTON_MED_WIDTH;
s_motdstuff.quitmenu.height = MENU_BUTTON_MED_HEIGHT;
s_motdstuff.quitmenu.color = CT_DKORANGE;
s_motdstuff.quitmenu.color2 = CT_LTORANGE;
s_motdstuff.quitmenu.textX = MENU_BUTTON_TEXT_X;
s_motdstuff.quitmenu.textY = MENU_BUTTON_TEXT_Y;
s_motdstuff.quitmenu.textEnum = MBT_CONTINUE;
s_motdstuff.quitmenu.textcolor = CT_BLACK;
s_motdstuff.quitmenu.textcolor2 = CT_WHITE;
s_motdstuff.disconnect.generic.type = MTYPE_BITMAP;
s_motdstuff.disconnect.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_motdstuff.disconnect.generic.x = 350;
s_motdstuff.disconnect.generic.y = 440;
s_motdstuff.disconnect.generic.name = GRAPHIC_BUTTONRIGHT;
s_motdstuff.disconnect.generic.id = ID_DISCONNECT;
s_motdstuff.disconnect.generic.callback = M_MotdMenu_Event;
s_motdstuff.disconnect.width = MENU_BUTTON_MED_WIDTH;
s_motdstuff.disconnect.height = MENU_BUTTON_MED_HEIGHT;
s_motdstuff.disconnect.color = CT_DKORANGE;
s_motdstuff.disconnect.color2 = CT_LTORANGE;
s_motdstuff.disconnect.textX = MENU_BUTTON_TEXT_X;
s_motdstuff.disconnect.textY = MENU_BUTTON_TEXT_Y;
s_motdstuff.disconnect.textEnum = MBT_INGAMELEAVE;
s_motdstuff.disconnect.textcolor = CT_BLACK;
s_motdstuff.disconnect.textcolor2 = CT_WHITE;
s_motdstuff.arrowup.generic.type = MTYPE_BITMAP;
s_motdstuff.arrowup.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_motdstuff.arrowup.generic.x = 610;
s_motdstuff.arrowup.generic.y = 10;
s_motdstuff.arrowup.generic.name = "menu/common/arrow_up_16.tga";
s_motdstuff.arrowup.generic.id = ID_ARROWUP;
s_motdstuff.arrowup.generic.callback = M_MotdMenu_Event;
s_motdstuff.arrowup.width = 16;
s_motdstuff.arrowup.height = 16;
s_motdstuff.arrowup.color = CT_DKBLUE1;
s_motdstuff.arrowup.color2 = CT_LTBLUE1;
s_motdstuff.arrowup.textX = 0;
s_motdstuff.arrowup.textY = 0;
s_motdstuff.arrowup.textEnum = MBT_NONE;
s_motdstuff.arrowup.textcolor = CT_BLACK;
s_motdstuff.arrowup.textcolor2 = CT_WHITE;
s_motdstuff.arrowdwn.generic.type = MTYPE_BITMAP;
s_motdstuff.arrowdwn.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_motdstuff.arrowdwn.generic.x = 610;
s_motdstuff.arrowdwn.generic.y = 420;
s_motdstuff.arrowdwn.generic.name = "menu/common/arrow_dn_16.tga";
s_motdstuff.arrowdwn.generic.id = ID_ARROWDOWN;
s_motdstuff.arrowdwn.generic.callback = M_MotdMenu_Event;
s_motdstuff.arrowdwn.width = 16;
s_motdstuff.arrowdwn.height = 16;
s_motdstuff.arrowdwn.color = CT_DKBLUE1;
s_motdstuff.arrowdwn.color2 = CT_LTBLUE1;
s_motdstuff.arrowdwn.textX = 0;
s_motdstuff.arrowdwn.textY = 0;
s_motdstuff.arrowdwn.textEnum = MBT_NONE;
s_motdstuff.arrowdwn.textcolor = CT_BLACK;
s_motdstuff.arrowdwn.textcolor2 = CT_WHITE;
Menu_AddItem(&s_motdstuff.menu, &s_motdstuff.quitmenu);
Menu_AddItem(&s_motdstuff.menu, &s_motdstuff.disconnect);
Menu_AddItem(&s_motdstuff.menu, &s_motdstuff.arrowup);
Menu_AddItem(&s_motdstuff.menu, &s_motdstuff.arrowdwn);
UI_LogFuncEnd();
}
/*
===============
MotdReset
===============
*/
void MotdReset(void)
{
UI_LogFuncBegin();
int32_t i;
motdtextnum = 0;
for (i = 0; i < MAX_MOTD_LINES; ++i) {
*motdtext[i] = '\0';
}
UI_LogFuncEnd();
}
/*
===============
MotdReceiveLine
===============
*/
void MotdReceiveLine(const char *txt)
{
UI_LogFuncBegin();
Q_strncpyz(motdtext[motdtextnum], txt, sizeof (motdtext[motdtextnum]));
motdtextnum++;
UI_LogFuncEnd();
}
/*
===============
UI_MotdMenu
===============
*/
void UI_MotdMenu(void)
{
UI_LogFuncBegin();
memset(&s_motdstuff, 0, sizeof(s_motdstuff));
uis.menusp = 0;
ingameFlag = qtrue;
Mouse_Show();
UI_MotdMenu_Cache();
MotdMenu_Init();
UI_PushMenu(&s_motdstuff.menu);
Menu_AdjustCursor(&s_motdstuff.menu, 1);
UI_LogFuncEnd();
}