rpgxef/code/ui/ui_removebots.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

335 lines
10 KiB
C

// Copyright (C) 1999-2000 Id Software, Inc.
//
/*
=======================================================================
REMOVE BOTS MENU
=======================================================================
*/
#include "ui_local.h"
#define ID_BACK 14
#define ID_UP 11
#define ID_DOWN 12
#define ID_DELETE 13
#define ID_BOTNAME0 20
#define ID_BOTNAME1 21
#define ID_BOTNAME2 22
#define ID_BOTNAME3 23
#define ID_BOTNAME4 24
#define ID_BOTNAME5 25
#define ID_BOTNAME6 26
#define BOTS_VIEWABLE 11
typedef struct {
menuframework_s menu;
menubitmap_s up;
menubitmap_s down;
menutext_s bots[BOTS_VIEWABLE];
menubitmap_s delete;
menubitmap_s back;
int numBots;
int baseBotNum;
int selectedBotNum;
char botnames[BOTS_VIEWABLE][32];
int botClientNums[MAX_BOTS];
} removeBotsMenuInfo_t;
static removeBotsMenuInfo_t removeBotsMenuInfo;
/*
=================
UI_RemoveBotsMenu_SetBotNames
=================
*/
static void UI_RemoveBotsMenu_SetBotNames( void ) {
int n;
char info[MAX_INFO_STRING];
for ( n = 0; (n < BOTS_VIEWABLE) && (removeBotsMenuInfo.baseBotNum + n < removeBotsMenuInfo.numBots); n++ ) {
trap_GetConfigString( CS_PLAYERS + removeBotsMenuInfo.botClientNums[removeBotsMenuInfo.baseBotNum + n], info, MAX_INFO_STRING );
Q_strncpyz( removeBotsMenuInfo.botnames[n], Info_ValueForKey( info, "n" ), sizeof(removeBotsMenuInfo.botnames[n]) );
Q_CleanStr( removeBotsMenuInfo.botnames[n] );
}
}
/*
=================
UI_RemoveBotsMenu_DeleteEvent
=================
*/
static void UI_RemoveBotsMenu_DeleteEvent( void* ptr, int event ) {
if (event != QM_ACTIVATED) {
return;
}
trap_Cmd_ExecuteText( EXEC_APPEND, va("kick %i\n", removeBotsMenuInfo.botClientNums[removeBotsMenuInfo.baseBotNum + removeBotsMenuInfo.selectedBotNum]) );
// Blank out name on screen so they know it's been kicked
memset(removeBotsMenuInfo.botnames[removeBotsMenuInfo.baseBotNum + removeBotsMenuInfo.selectedBotNum],0,sizeof(removeBotsMenuInfo.botnames[removeBotsMenuInfo.baseBotNum + removeBotsMenuInfo.selectedBotNum]));
}
/*
=================
UI_RemoveBotsMenu_BotEvent
=================
*/
static void UI_RemoveBotsMenu_BotEvent( void* ptr, int event ) {
if (event != QM_ACTIVATED) {
return;
}
removeBotsMenuInfo.bots[removeBotsMenuInfo.selectedBotNum].color = colorTable[CT_DKGOLD1];
removeBotsMenuInfo.selectedBotNum = ((menucommon_s*)ptr)->id - ID_BOTNAME0;
removeBotsMenuInfo.bots[removeBotsMenuInfo.selectedBotNum].color = colorTable[CT_YELLOW];
}
/*
=================
UI_RemoveAddBotsMenu_BackEvent
=================
*/
static void UI_RemoveBotsMenu_BackEvent( void* ptr, int event ) {
if (event != QM_ACTIVATED) {
return;
}
UI_PopMenu();
}
/*
=================
UI_RemoveBotsMenu_UpEvent
=================
*/
static void UI_RemoveBotsMenu_UpEvent( void* ptr, int event ) {
if (event != QM_ACTIVATED) {
return;
}
if( removeBotsMenuInfo.baseBotNum > 0 ) {
removeBotsMenuInfo.baseBotNum--;
UI_RemoveBotsMenu_SetBotNames();
}
}
/*
=================
UI_RemoveBotsMenu_DownEvent
=================
*/
static void UI_RemoveBotsMenu_DownEvent( void* ptr, int event ) {
if (event != QM_ACTIVATED) {
return;
}
if( removeBotsMenuInfo.baseBotNum + BOTS_VIEWABLE < removeBotsMenuInfo.numBots ) {
removeBotsMenuInfo.baseBotNum++;
UI_RemoveBotsMenu_SetBotNames();
}
}
/*
=================
UI_RemoveBotsMenu_GetBots
=================
*/
static void UI_RemoveBotsMenu_GetBots( void ) {
int numPlayers;
int isBot;
int n;
char info[MAX_INFO_STRING];
trap_GetConfigString( CS_SERVERINFO, info, sizeof(info) );
numPlayers = atoi( Info_ValueForKey( info, "sv_maxclients" ) );
removeBotsMenuInfo.numBots = 0;
for( n = 0; n < numPlayers; n++ ) {
trap_GetConfigString( CS_PLAYERS + n, info, MAX_INFO_STRING );
isBot = atoi( Info_ValueForKey( info, "skill" ) );
if( !isBot ) {
continue;
}
removeBotsMenuInfo.botClientNums[removeBotsMenuInfo.numBots] = n;
removeBotsMenuInfo.numBots++;
}
}
/*
=================
UI_RemoveMenu_Draw
=================
*/
static void UI_RemoveMenu_Draw( void )
{
UI_MenuFrame(&removeBotsMenuInfo.menu);
trap_R_SetColor( colorTable[CT_DKPURPLE2]);
UI_DrawHandlePic(30,201, 47, 90, uis.whiteShader); //Left side of frame
UI_DrawHandlePic(30,293, 47, 97, uis.whiteShader);
// Bot name frame
trap_R_SetColor( colorTable[CT_DKBLUE1]);
UI_DrawHandlePic( 81, 172, 225, 18, uis.whiteShader); // Top
UI_DrawHandlePic(288, 189, 18, 246, uis.whiteShader); // Side
UI_DrawProportionalString( 90, 173, menu_normal_text[MNT_HOLOGRAPHIC_CHARS],UI_SMALLFONT,colorTable[CT_BLACK]); // Top
// standard menu drawing
Menu_Draw( &removeBotsMenuInfo.menu );
}
/*
=================
UI_RemoveBots_Cache
=================
*/
void UI_RemoveBots_Cache( void )
{
trap_R_RegisterShaderNoMip( "menu/common/arrow_up_16.tga" );
trap_R_RegisterShaderNoMip( "menu/common/arrow_dn_16.tga" );
}
/*
=================
UI_RemoveBotsMenu_Init
=================
*/
static void UI_RemoveBotsMenu_Init( void ) {
int n;
int count;
int y;
memset( &removeBotsMenuInfo, 0 ,sizeof(removeBotsMenuInfo) );
removeBotsMenuInfo.menu.draw = UI_RemoveMenu_Draw;
removeBotsMenuInfo.menu.fullscreen = qtrue;
removeBotsMenuInfo.menu.wrapAround = qtrue;
removeBotsMenuInfo.menu.descX = MENU_DESC_X;
removeBotsMenuInfo.menu.descY = MENU_DESC_Y;
removeBotsMenuInfo.menu.titleX = MENU_TITLE_X;
removeBotsMenuInfo.menu.titleY = MENU_TITLE_Y;
removeBotsMenuInfo.menu.titleI = MNT_REMOVE_HCS_TITLE;
removeBotsMenuInfo.menu.footNoteEnum = MNT_REMOVE_HCS;
UI_RemoveBots_Cache();
UI_RemoveBotsMenu_GetBots();
UI_RemoveBotsMenu_SetBotNames();
count = removeBotsMenuInfo.numBots < BOTS_VIEWABLE ? removeBotsMenuInfo.numBots : BOTS_VIEWABLE;
removeBotsMenuInfo.up.generic.type = MTYPE_BITMAP;
removeBotsMenuInfo.up.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
removeBotsMenuInfo.up.generic.x = 289;
removeBotsMenuInfo.up.generic.y = 196;
removeBotsMenuInfo.up.generic.id = ID_UP;
removeBotsMenuInfo.up.generic.callback = UI_RemoveBotsMenu_UpEvent;
removeBotsMenuInfo.up.width = 16;
removeBotsMenuInfo.up.height = 16;
removeBotsMenuInfo.up.color = CT_DKGOLD1;
removeBotsMenuInfo.up.color2 = CT_LTGOLD1;
removeBotsMenuInfo.up.generic.name = "menu/common/arrow_up_16.tga";
removeBotsMenuInfo.down.generic.type = MTYPE_BITMAP;
removeBotsMenuInfo.down.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
removeBotsMenuInfo.down.generic.x = 289;
removeBotsMenuInfo.down.generic.y = 407;
removeBotsMenuInfo.down.generic.id = ID_DOWN;
removeBotsMenuInfo.down.generic.callback = UI_RemoveBotsMenu_DownEvent;
removeBotsMenuInfo.down.width = 16;
removeBotsMenuInfo.down.height = 16;
removeBotsMenuInfo.down.color = CT_DKGOLD1;
removeBotsMenuInfo.down.color2 = CT_LTGOLD1;
removeBotsMenuInfo.down.generic.name = "menu/common/arrow_dn_16.tga";
for( n = 0, y = 194; n < count; n++, y += 20 )
{
removeBotsMenuInfo.bots[n].generic.type = MTYPE_PTEXT;
removeBotsMenuInfo.bots[n].generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
removeBotsMenuInfo.bots[n].generic.id = ID_BOTNAME0 + n;
removeBotsMenuInfo.bots[n].generic.x = 108;
removeBotsMenuInfo.bots[n].generic.y = y;
removeBotsMenuInfo.bots[n].generic.callback = UI_RemoveBotsMenu_BotEvent;
removeBotsMenuInfo.bots[n].string = removeBotsMenuInfo.botnames[n];
removeBotsMenuInfo.bots[n].color = colorTable[CT_DKGOLD1];
removeBotsMenuInfo.bots[n].color2 = colorTable[CT_LTGOLD1];
removeBotsMenuInfo.bots[n].style = UI_LEFT|UI_SMALLFONT;
}
removeBotsMenuInfo.delete.generic.type = MTYPE_BITMAP;
removeBotsMenuInfo.delete.generic.name = GRAPHIC_SQUARE;
removeBotsMenuInfo.delete.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
removeBotsMenuInfo.delete.generic.id = ID_DELETE;
removeBotsMenuInfo.delete.generic.callback = UI_RemoveBotsMenu_DeleteEvent;
removeBotsMenuInfo.delete.generic.x = 356;
removeBotsMenuInfo.delete.generic.y = 342;
removeBotsMenuInfo.delete.width = MENU_BUTTON_MED_WIDTH;
removeBotsMenuInfo.delete.height = MENU_BUTTON_MED_HEIGHT * 2;
removeBotsMenuInfo.delete.color = CT_DKPURPLE1;
removeBotsMenuInfo.delete.color2 = CT_LTPURPLE1;
removeBotsMenuInfo.delete.textX = MENU_BUTTON_TEXT_X;
removeBotsMenuInfo.delete.textY = MENU_BUTTON_TEXT_Y;
removeBotsMenuInfo.delete.textEnum = MBT_REMOVE_HOLO;
removeBotsMenuInfo.delete.textcolor = CT_BLACK;
removeBotsMenuInfo.delete.textcolor2 = CT_WHITE;
removeBotsMenuInfo.back.generic.type = MTYPE_BITMAP;
removeBotsMenuInfo.back.generic.name = BUTTON_GRAPHIC_LONGRIGHT;
removeBotsMenuInfo.back.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
removeBotsMenuInfo.back.generic.id = ID_BACK;
removeBotsMenuInfo.back.generic.callback = UI_RemoveBotsMenu_BackEvent;
removeBotsMenuInfo.back.generic.x = 482;
removeBotsMenuInfo.back.generic.y = 136;
removeBotsMenuInfo.back.width = MENU_BUTTON_MED_WIDTH;
removeBotsMenuInfo.back.height = MENU_BUTTON_MED_HEIGHT;
removeBotsMenuInfo.back.color = CT_DKPURPLE1;
removeBotsMenuInfo.back.color2 = CT_LTPURPLE1;
removeBotsMenuInfo.back.textX = MENU_BUTTON_TEXT_X;
removeBotsMenuInfo.back.textY = MENU_BUTTON_TEXT_Y;
removeBotsMenuInfo.back.textEnum = MBT_INGAMEMENU;
removeBotsMenuInfo.back.textcolor = CT_BLACK;
removeBotsMenuInfo.back.textcolor2 = CT_WHITE;
Menu_AddItem( &removeBotsMenuInfo.menu, &removeBotsMenuInfo.up );
Menu_AddItem( &removeBotsMenuInfo.menu, &removeBotsMenuInfo.down );
for( n = 0; n < count; n++ )
{
Menu_AddItem( &removeBotsMenuInfo.menu, &removeBotsMenuInfo.bots[n] );
}
Menu_AddItem( &removeBotsMenuInfo.menu, &removeBotsMenuInfo.delete );
Menu_AddItem( &removeBotsMenuInfo.menu, &removeBotsMenuInfo.back );
removeBotsMenuInfo.baseBotNum = 0;
removeBotsMenuInfo.selectedBotNum = 0;
removeBotsMenuInfo.bots[0].color = color_white;
}
/*
=================
UI_RemoveBotsMenu
=================
*/
void UI_RemoveBotsMenu( void )
{
UI_RemoveBotsMenu_Init();
UI_PushMenu( &removeBotsMenuInfo.menu );
}