rpgxef/code/ui/ui_motd.c
Walter Julius Hennecke a39565b783 Integrated RPG-X2 rpgxEF edition into the rpgxEF repo
... not quite content with where the project files lie but it is ok for
now.
... compiling works fine so far (only tested mingw32 right now)
2012-08-04 12:54:37 +02:00

275 lines
7.6 KiB
C

/**********************************************************************
UI_MOTD.C
The MotD thing
RPG-X - Marcin - 15/12/2008
**********************************************************************/
#include "../qcommon/stv_version.h"
#include "ui_local.h"
#define ID_CONTINUE 10
#define ID_DISCONNECT 11
#define ID_ARROWUP 100
#define ID_ARROWDOWN 101
#define MIN_MOTD_LINES 20
#define MAX_MOTD_LINES 256
extern void InGame_LeaveAction( qboolean result );
char motdtext[MAX_MOTD_LINES][256];
int motdtextnum;
typedef struct {
menuframework_s menu;
menubitmap_s quitmenu;
menubitmap_s disconnect;
menubitmap_s arrowdwn;
menubitmap_s arrowup;
int scrollnum;
qhandle_t halfroundl_22;
} motdstuff_t;
static motdstuff_t s_motdstuff;
/*
=================
M_Motd_Event
=================
*/
static void M_MotdMenu_Event( void *ptr, int notification )
{
if( notification != QM_ACTIVATED ) {
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;
}
}
}
/*
=================
MotdMenu_Key
=================
*/
sfxHandle_t MotdMenu_Key( int key )
{
return ( Menu_DefaultKey( &s_motdstuff.menu, key ) );
}
/*
=================
M_MotdMenu_Graphics
=================
*/
static void M_MotdMenu_Graphics( void )
{
int i;
int x = 15;
int 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);
}
/*
===============
MotdMenu_Draw
===============
*/
static void MotdMenu_Draw( void )
{
M_MotdMenu_Graphics();
Menu_Draw( &s_motdstuff.menu );
}
/*
===============
UI_MotdMenu_Cache
===============
*/
void UI_MotdMenu_Cache( void )
{
s_motdstuff.halfroundl_22 = trap_R_RegisterShaderNoMip( "menu/common/halfroundl_22.tga" );
}
/*
===============
MotdMenu_Init
===============
*/
void MotdMenu_Init( void )
{
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 );
}
/*
===============
MotdReset
===============
*/
void MotdReset( void )
{
int i;
motdtextnum = 0;
for ( i = 0; i < MAX_MOTD_LINES; ++i ) {
*motdtext[i] = '\0';
}
}
/*
===============
MotdReceiveLine
===============
*/
void MotdReceiveLine( const char *txt )
{
Q_strncpyz(motdtext[motdtextnum], txt, sizeof (motdtext[motdtextnum]));
motdtextnum++;
}
/*
===============
UI_MotdMenu
===============
*/
void UI_MotdMenu( void )
{
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 );
}