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

476 lines
16 KiB
C

/**********************************************************************
UI_TRANSPORTER.C
User interface trigger from within game
**********************************************************************/
#include "ui_local.h"
char *delayList[20] = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10",
"11", "12", "13", "14", "15", "20", "30", "60", 0 };
char srvList[6][MAX_QPATH];
typedef struct //static
{
menuframework_s menu;
sfxHandle_t openingVoice;
menubitmap_s quitmenu;
menubitmap_s engage;
menubitmap_s engage2;
menulist_s locButton;
menulist_s srvButton;
menulist_s delButton;
char *srvListPtr[7];
char *mlist[MAX_QPATH];
int targetEntID;
} transporter_t;
transporter_t s_transporter;
#define ID_COMPUTERVOICE 6
#define ID_QUIT 10
#define ID_ENGAGE 100
#define ID_ENGAGE2 101
extern adminGeneric_t s_adminGeneric;
extern void AdminGeneric_InitLists( void );
void UI_TransporterMenu_Cache (void);
/*static void TransCreateMaplist(void) {
}*/
/*
=================
TransDataReceived
=================
*/
void TransDataReceived(const char *data) {
char *temp;
int i;
for(i = 0; i < 6; i++) {
temp = Info_ValueForKey(data, va("d%i", i));
if(!temp[0]) break;
Q_strncpyz(srvList[i], temp, sizeof(srvList[i]));
}
}
/*
=================
M_Transporter_Event
=================
*/
static void M_Transporter_Event (void* ptr, int notification)
{
int id;
//menubitmap_s *holdLocation;
//menubitmap_s *holdServer;
id = ((menucommon_s*)ptr)->id;
/*if ( notification != QM_ACTIVATED )
{
return;
}*/
switch (id)
{
case ID_QUIT:
if ( notification == QM_ACTIVATED )
UI_PopMenu();
break;
case ID_ENGAGE: // Active only if a deck has been chosen
if ( notification == QM_ACTIVATED ) {
if(s_transporter.delButton.curvalue <= 16)
trap_Cmd_ExecuteText( EXEC_APPEND, va("ui_transporterLoc %i %i %i", s_transporter.targetEntID, s_transporter.locButton.curvalue + 1, s_transporter.delButton.curvalue));
else {
switch(s_transporter.delButton.curvalue) {
case 17:
trap_Cmd_ExecuteText( EXEC_APPEND, va("ui_transporterLoc %i %i %i", s_transporter.targetEntID, s_transporter.locButton.curvalue + 1, 20));
break;
case 18:
trap_Cmd_ExecuteText( EXEC_APPEND, va("ui_transporterLoc %i %i %i", s_transporter.targetEntID, s_transporter.locButton.curvalue + 1, 30));
break;
case 19:
trap_Cmd_ExecuteText( EXEC_APPEND, va("ui_transporterLoc %i %i %i", s_transporter.targetEntID, s_transporter.locButton.curvalue + 1, 60));
break;
}
}
UI_ForceMenuOff();
}
break;
case ID_ENGAGE2: // Active only if a deck has been chosen
if ( notification == QM_ACTIVATED ) {
if(s_transporter.delButton.curvalue <= 16)
trap_Cmd_ExecuteText( EXEC_APPEND, va("ui_transporterExt %i %i %i", s_transporter.targetEntID, s_transporter.srvButton.curvalue , s_transporter.delButton.curvalue));
else {
switch(s_transporter.delButton.curvalue) {
case 17:
trap_Cmd_ExecuteText( EXEC_APPEND, va("ui_transporterExt %i %i %i", s_transporter.targetEntID, s_transporter.srvButton.curvalue, 20));
break;
case 18:
trap_Cmd_ExecuteText( EXEC_APPEND, va("ui_transporterExt %i %i %i", s_transporter.targetEntID, s_transporter.srvButton.curvalue, 30));
break;
case 19:
trap_Cmd_ExecuteText( EXEC_APPEND, va("ui_transporterExt %i %i %i", s_transporter.targetEntID, s_transporter.srvButton.curvalue, 60));
break;
}
}
UI_ForceMenuOff();
}
break;
}
}
/*
=================
TransporterMenu_Key
=================
*/
sfxHandle_t TransporterMenu_Key (int key)
{
return ( Menu_DefaultKey( &s_transporter.menu, key ) );
}
extern qhandle_t leftRound;
extern qhandle_t corner_ul_24_60;
extern qhandle_t corner_ll_12_60;
qhandle_t transporter_sym;
qhandle_t loading1;
qhandle_t loading2;
qhandle_t loading3;
qhandle_t loading4;
qhandle_t loading5;
/*
=================
M_TransporterMenu_Graphics
=================
*/
static void M_TransporterMenu_Graphics (void)
{
//menubitmap_s *holdDeck;
//int i;
int length,xTurboStart;
//int numColor, roundColor;
// Draw the basic screen frame
// Upper corners
trap_R_SetColor( colorTable[CT_DKPURPLE1]);
UI_DrawHandlePic( 20, 24, 64, 32, corner_ul_24_60); // Upper corner
trap_R_SetColor( colorTable[CT_LTPURPLE1] ); //colorTable[CT_LTBLUE1] //[CT_DKGOLD1] //colorTable[CT_VDKPURPLE2]
UI_DrawHandlePic( 70, 56, 128, 128, transporter_sym); // Transporter graphic
// Lower corners
trap_R_SetColor( colorTable[CT_DKPURPLE3]); //colorTable[CT_VDKPURPLE2]
UI_DrawHandlePic( 20, 440, 64, 16, corner_ll_12_60); //
xTurboStart = 604;
length = UI_ProportionalStringWidth( menu_normal_text[MNT_TRANSPORTER],UI_BIGFONT);
length += 4;
// Upper half
trap_R_SetColor( colorTable[CT_DKPURPLE1]); //DKGOLD1
UI_DrawHandlePic( 79, 24, xTurboStart - (79 + length), PROP_BIG_HEIGHT, uis.whiteShader); // Top left line
UI_DrawHandlePic( 20, 60, 60, 40, uis.whiteShader); //
trap_R_SetColor( colorTable[CT_DKPURPLE3]);
UI_DrawHandlePic( 20, 106, 60, 11, uis.whiteShader); //
trap_R_SetColor( colorTable[CT_DKPURPLE1]); //DKGOLD1
UI_DrawHandlePic( 20, 123, 60, 250, uis.whiteShader); // Left hand column
// Lower half
trap_R_SetColor( colorTable[CT_DKPURPLE3] ); //colorTable[CT_VDKPURPLE2]
UI_DrawHandlePic( 20, 380, 60, 70, uis.whiteShader); // Left Column
// Bottom line
trap_R_SetColor( colorTable[CT_DKPURPLE3] ); //colorTable[CT_VDKPURPLE2]
UI_DrawHandlePic( 69, 443, 287, 12, uis.whiteShader); //
trap_R_SetColor( colorTable[CT_DKPURPLE1]); //colorTable[CT_DKGOLD1]
UI_DrawHandlePic(364, 443, 260, 12, uis.whiteShader); // Bottom line
UI_DrawProportionalString( xTurboStart, 24,
menu_normal_text[MNT_TRANSPORTER], UI_BIGFONT | UI_RIGHT, colorTable[CT_WHITE]);
trap_R_SetColor( colorTable[CT_DKPURPLE1]); //DKGOLD1
UI_DrawHandlePic( 607, 24,-16, 32, leftRound);
trap_R_SetColor( colorTable[CT_LTGOLD1] );
UI_DrawHandlePic( 86, 240, 74, 46, uis.whiteShader);
UI_DrawHandlePic( 86, 290, 74, 46, uis.whiteShader);
UI_DrawHandlePic( 86, 340, 74, 46, uis.whiteShader);
UI_DrawHandlePic( 86, 390, 74, 46, uis.whiteShader);
UI_DrawHandlePic( 164, 240, 74, 46, uis.whiteShader);
UI_DrawHandlePic( 164, 290, 74, 46, uis.whiteShader);
UI_DrawHandlePic( 164, 340, 74, 46, uis.whiteShader);
UI_DrawHandlePic( 164, 390, 74, 46, uis.whiteShader);
UI_DrawHandlePic( 242, 240, 74, 46, uis.whiteShader);
UI_DrawHandlePic( 242, 290, 76, 46, uis.whiteShader);
UI_DrawHandlePic( 242, 340, 76, 46, uis.whiteShader);
UI_DrawHandlePic( 242, 390, 76, 46, uis.whiteShader);
trap_R_SetColor( colorTable[CT_LTPURPLE1] );
UI_DrawHandlePic( 84, 192, 2, 243, uis.whiteShader);
UI_DrawHandlePic( 158, 192, 2, 243, uis.whiteShader);
UI_DrawHandlePic( 162, 192, 2, 243, uis.whiteShader);
UI_DrawHandlePic( 236, 192, 2, 243, uis.whiteShader);
UI_DrawHandlePic( 240, 192, 2, 243, uis.whiteShader);
UI_DrawHandlePic( 316, 192, -2, 243, uis.whiteShader);
UI_DrawHandlePic( 84, 192, 74, 2, uis.whiteShader);
UI_DrawHandlePic( 162, 192, 74, 2, uis.whiteShader);
UI_DrawHandlePic( 240, 192, 76, 2, uis.whiteShader);
UI_DrawHandlePic( 84, 435, 76, -2, uis.whiteShader);
UI_DrawHandlePic( 162, 435, 76, -2, uis.whiteShader);
UI_DrawHandlePic( 240, 435, 78, -2, uis.whiteShader);
trap_R_SetColor( colorTable[CT_LTBLUE1] );
UI_DrawHandlePic( 366, 208, 243, 212, loading2 );
trap_R_SetColor( colorTable[CT_LTGOLD1] );
UI_DrawHandlePic( 366, 208, 243, 212, loading3 );
UI_DrawHandlePic( 366, 208, 243, 212, loading1 );
trap_R_SetColor( colorTable[CT_DKBLUE1] );
UI_DrawHandlePic( 366, 208, 243, 212, loading4 );
trap_R_SetColor( colorTable[CT_DKORANGE] );
UI_DrawHandlePic( 366, 208, 243, 212, loading5 );
UI_DrawProportionalString(487, 297, "1", UI_TINYFONT, colorTable[CT_BLACK]);
UI_DrawProportionalString(508, 297, "2", UI_TINYFONT, colorTable[CT_BLACK]);
UI_DrawProportionalString(487, 322, "3", UI_TINYFONT, colorTable[CT_BLACK]);
UI_DrawProportionalString(508, 322, "4", UI_TINYFONT, colorTable[CT_BLACK]);
UI_DrawProportionalString(395, 405, "22", UI_TINYFONT, colorTable[CT_BLACK]);
UI_DrawProportionalString(370, 327, "45", UI_TINYFONT, colorTable[CT_BLACK]);
UI_DrawProportionalString(399, 236, "7", UI_TINYFONT, colorTable[CT_BLACK]);
UI_DrawProportionalString(487, 215, "35", UI_TINYFONT, colorTable[CT_BLACK]);
UI_DrawProportionalString(502, 215, "2", UI_TINYFONT, colorTable[CT_BLACK]);
UI_DrawProportionalString(596, 318, "67", UI_TINYFONT, colorTable[CT_BLACK]);
UI_DrawProportionalString(502, 405, "27", UI_TINYFONT, colorTable[CT_BLACK]);
}
/*
===============
TransporterMenu_Draw
===============
*/
static void TransporterMenu_Draw(void)
{
// Draw graphics particular to Main Menu
M_TransporterMenu_Graphics();
Menu_Draw( &s_transporter.menu );
}
/*
===============
UI_TransporterMenu_Cache
===============
*/
void UI_TransporterMenu_Cache (void)
{
leftRound = trap_R_RegisterShaderNoMip("menu/common/halfroundl_24.tga");
corner_ul_24_60 = trap_R_RegisterShaderNoMip("menu/common/corner_ul_24_60.tga");
corner_ll_12_60 = trap_R_RegisterShaderNoMip("menu/common/corner_ll_12_60.tga");
transporter_sym = trap_R_RegisterShaderNoMip("menu/special/transporter_symbol.tga");
loading1 = trap_R_RegisterShaderNoMip("menu/new/nav_y.tga");
loading2 = trap_R_RegisterShaderNoMip("menu/new/nav_mb.tga");
loading3 = trap_R_RegisterShaderNoMip("menu/new/nav_lb.tga");
loading4 = trap_R_RegisterShaderNoMip("menu/new/nav_db.tga");
loading5 = trap_R_RegisterShaderNoMip("menu/new/nab_o.tga");
}
/*
===============
TransporterMenu_Init
===============
*/
void TransporterMenu_Init(void)
{
int y,pad,x;
//int i;
int width;
AdminGeneric_InitLists();
s_transporter.menu.nitems = 0;
s_transporter.menu.draw = TransporterMenu_Draw;
s_transporter.menu.key = TransporterMenu_Key;
s_transporter.menu.wrapAround = qtrue;
s_transporter.menu.descX = MENU_DESC_X;
s_transporter.menu.descY = MENU_DESC_Y;
s_transporter.menu.titleX = MENU_TITLE_X;
s_transporter.menu.titleY = MENU_TITLE_Y;
pad = PROP_BIG_HEIGHT + 10;
width = MENU_BUTTON_MED_WIDTH-20;
y = 72;
x = 208;
s_transporter.engage.generic.type = MTYPE_BITMAP;
s_transporter.engage.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_transporter.engage.generic.x = x;
s_transporter.engage.generic.y = y;
s_transporter.engage.generic.name = GRAPHIC_BUTTONLEFT;
s_transporter.engage.generic.id = ID_ENGAGE;
s_transporter.engage.generic.callback = M_Transporter_Event;
s_transporter.engage.width = width;
s_transporter.engage.height = PROP_BIG_HEIGHT;
s_transporter.engage.color = CT_DKPURPLE1;
s_transporter.engage.color2 = CT_LTPURPLE1;
s_transporter.engage.textX = MENU_BUTTON_TEXT_X;
s_transporter.engage.textY = 12;
s_transporter.engage.textEnum = MBT_ENGAGE;
s_transporter.engage.textcolor = CT_BLACK;
s_transporter.engage.textcolor2 = CT_WHITE;
s_transporter.engage.textStyle = UI_TINYFONT;
y += pad;
s_transporter.engage2.generic.type = MTYPE_BITMAP;
s_transporter.engage2.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_transporter.engage2.generic.x = x;
s_transporter.engage2.generic.y = y;
s_transporter.engage2.generic.name = GRAPHIC_BUTTONLEFT;
s_transporter.engage2.generic.id = ID_ENGAGE2;
s_transporter.engage2.generic.callback = M_Transporter_Event;
s_transporter.engage2.width = width;
s_transporter.engage2.height = PROP_BIG_HEIGHT;
s_transporter.engage2.color = CT_DKPURPLE1;
s_transporter.engage2.color2 = CT_LTPURPLE1;
s_transporter.engage2.textX = MENU_BUTTON_TEXT_X;
s_transporter.engage2.textY = 12;
s_transporter.engage2.textEnum = MBT_ENGAGE;
s_transporter.engage2.textcolor = CT_BLACK;
s_transporter.engage2.textcolor2 = CT_WHITE;
s_transporter.engage2.textStyle = UI_TINYFONT;
y += pad;
s_transporter.quitmenu.generic.type = MTYPE_BITMAP;
s_transporter.quitmenu.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_transporter.quitmenu.generic.x = x;
s_transporter.quitmenu.generic.y = y;
s_transporter.quitmenu.generic.name = GRAPHIC_BUTTONLEFT;
s_transporter.quitmenu.generic.id = ID_QUIT;
s_transporter.quitmenu.generic.callback = M_Transporter_Event;
s_transporter.quitmenu.width = width;
s_transporter.quitmenu.height = PROP_BIG_HEIGHT;
s_transporter.quitmenu.color = CT_DKPURPLE1;
s_transporter.quitmenu.color2 = CT_LTPURPLE1;
s_transporter.quitmenu.textX = MENU_BUTTON_TEXT_X;
s_transporter.quitmenu.textY = 12;
s_transporter.quitmenu.textEnum = MBT_RETURNMENU;
s_transporter.quitmenu.textcolor = CT_BLACK;
s_transporter.quitmenu.textcolor2 = CT_WHITE;
s_transporter.quitmenu.textStyle = UI_TINYFONT;
y -= (2*pad);
x += width + 8;
s_transporter.locButton.generic.type = MTYPE_SPINCONTROL;
s_transporter.locButton.generic.flags = QMF_HIGHLIGHT_IF_FOCUS | QMF_ALTERNATE;
s_transporter.locButton.generic.x = x;
s_transporter.locButton.generic.y = y;
s_transporter.locButton.width = width;
s_transporter.locButton.height = PROP_BIG_HEIGHT;
s_transporter.locButton.itemnames = (const char**)s_adminGeneric.locListPtr;
s_transporter.locButton.color = CT_DKPURPLE1;
s_transporter.locButton.color2 = CT_LTPURPLE1;
s_transporter.locButton.textX = MENU_BUTTON_TEXT_X;
s_transporter.locButton.textY = 12;
s_transporter.locButton.textEnum = MBT_ADMIN_BEAMLOC;
s_transporter.locButton.textcolor = CT_BLACK;
s_transporter.locButton.textcolor2 = CT_WHITE;
y += pad;
s_transporter.srvButton.generic.type = MTYPE_SPINCONTROL;
s_transporter.srvButton.generic.flags = QMF_HIGHLIGHT_IF_FOCUS | QMF_ALTERNATE;
s_transporter.srvButton.generic.x = x;
s_transporter.srvButton.generic.y = y;
s_transporter.srvButton.width = width;
s_transporter.srvButton.height = PROP_BIG_HEIGHT;
s_transporter.srvButton.itemnames = (const char**)s_transporter.srvListPtr;
s_transporter.srvButton.color = CT_DKPURPLE1;
s_transporter.srvButton.color2 = CT_LTPURPLE1;
s_transporter.srvButton.textX = MENU_BUTTON_TEXT_X;
s_transporter.srvButton.textY = 12;
s_transporter.srvButton.textEnum = MBT_TRANS_EXTERN;
s_transporter.srvButton.textcolor = CT_BLACK;
s_transporter.srvButton.textcolor2 = CT_WHITE;
y += pad;
s_transporter.delButton.generic.type = MTYPE_SPINCONTROL;
s_transporter.delButton.generic.flags = QMF_HIGHLIGHT_IF_FOCUS | QMF_ALTERNATE;
s_transporter.delButton.generic.x = x;
s_transporter.delButton.generic.y = y;
s_transporter.delButton.width = width;
s_transporter.delButton.height = PROP_BIG_HEIGHT;
s_transporter.delButton.itemnames = (const char**)delayList;
s_transporter.delButton.color = CT_DKPURPLE1;
s_transporter.delButton.color2 = CT_LTPURPLE1;
s_transporter.delButton.textX = MENU_BUTTON_TEXT_X;
s_transporter.delButton.textY = 12;
s_transporter.delButton.textEnum = MBT_TRANS_DELAY;
s_transporter.delButton.textcolor = CT_BLACK;
s_transporter.delButton.textcolor2 = CT_WHITE;
Menu_AddItem( &s_transporter.menu, &s_transporter.delButton );
Menu_AddItem( &s_transporter.menu, &s_transporter.srvButton );
Menu_AddItem( &s_transporter.menu, &s_transporter.locButton );
Menu_AddItem( &s_transporter.menu, &s_transporter.engage );
Menu_AddItem( &s_transporter.menu, &s_transporter.engage2 );
Menu_AddItem( &s_transporter.menu, &s_transporter.quitmenu );
}
/*
=================
SrvData_Init
=================
*/
void SrvData_Init(void) {
int i;
for(i = 0; i < 6; i++) {
if(!srvList[i][0]) break;
s_transporter.srvListPtr[i] = srvList[i];
}
s_transporter.srvListPtr[i+1] = 0;
}
/*
===============
UI_TransporterMenu
===============
*/
void UI_TransporterMenu (int trNum)
{
if ( !trNum )
return;
memset( &s_transporter, 0, sizeof( s_transporter ) );
s_transporter.targetEntID = trNum;
uis.menusp = 0;
ingameFlag = qtrue; // true when in game menu is in use
Mouse_Show();
UI_TransporterMenu_Cache();
SrvData_Init();
TransporterMenu_Init();
UI_PushMenu( &s_transporter.menu );
Menu_AdjustCursor( &s_transporter.menu, 1 );
}