mirror of
https://github.com/UberGames/rpgxEF.git
synced 2024-11-10 15:21:34 +00:00
a39565b783
... 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)
384 lines
10 KiB
C
384 lines
10 KiB
C
/**********************************************************************
|
|
UI_HOLODECK.C
|
|
|
|
User interface trigger from within game
|
|
**********************************************************************/
|
|
#include "ui_local.h"
|
|
|
|
typedef struct {
|
|
char name[5][MAX_QPATH];
|
|
char desc[5][1024];
|
|
char image[5][MAX_QPATH];
|
|
int active;
|
|
int numProgs;
|
|
int currentProg;
|
|
int currentPart;
|
|
} holoData_t;
|
|
|
|
holoData_t holoData;
|
|
|
|
typedef struct //static
|
|
{
|
|
menuframework_s menu;
|
|
sfxHandle_t openingVoice;
|
|
menubitmap_s quitmenu;
|
|
menubitmap_s engage;
|
|
menulist_s progButton;
|
|
|
|
char *prgListPtr[6];
|
|
|
|
int targetEntID;
|
|
} holodeck_t;
|
|
|
|
holodeck_t s_holodeck;
|
|
|
|
void HoloDataReceived(const char *data) {
|
|
char *temp;
|
|
if(holoData.currentPart < 0) return;
|
|
if(!holoData.numProgs) {
|
|
holoData.numProgs = atoi(data);
|
|
holoData.currentProg = 0;
|
|
holoData.currentPart = 0;
|
|
return;
|
|
}
|
|
switch(holoData.currentPart) {
|
|
case 0: // name
|
|
temp = Info_ValueForKey(data, va("n%i", holoData.currentProg));
|
|
Q_strncpyz(holoData.name[holoData.currentProg], temp, sizeof(holoData.name[holoData.currentProg]));
|
|
break;
|
|
case 1: // desc1
|
|
temp = Info_ValueForKey(data, va("d1%i", holoData.currentProg));
|
|
Q_strcat(holoData.desc[holoData.currentProg], sizeof(holoData.desc[holoData.currentProg]), temp);
|
|
break;
|
|
case 2:
|
|
temp = Info_ValueForKey(data, va("d2%i", holoData.currentProg));
|
|
Q_strcat(holoData.desc[holoData.currentProg], sizeof(holoData.desc[holoData.currentProg]), temp);
|
|
break;
|
|
case 3:
|
|
temp = Info_ValueForKey(data, va("i%i", holoData.currentProg));
|
|
Q_strncpyz(holoData.image[holoData.currentProg], temp, sizeof(holoData.image[holoData.currentProg]));
|
|
break;
|
|
}
|
|
holoData.currentProg++;
|
|
if(holoData.currentProg == holoData.numProgs) {
|
|
holoData.currentProg = 0;
|
|
holoData.currentPart++;
|
|
}
|
|
}
|
|
|
|
/*
|
|
===============
|
|
PrgmList_Init
|
|
===============
|
|
*/
|
|
void PrgmList_Init(void) {
|
|
int i;
|
|
|
|
for(i = 0; i < holoData.numProgs; i++) {
|
|
s_holodeck.prgListPtr[i] = holoData.name[i];
|
|
}
|
|
s_holodeck.prgListPtr[holoData.numProgs] = 0;
|
|
}
|
|
|
|
void HolodeckMenu_LoadText (void);
|
|
|
|
#define ID_COMPUTERVOICE 6
|
|
|
|
#define ID_QUIT 10
|
|
#define ID_ENGAGE 100
|
|
#define ID_PRGM_BUTTON 101
|
|
|
|
void UI_HolodeckMenu_Cache (void);
|
|
void UI_HolodeckMenu(int trNum);
|
|
|
|
/*
|
|
=================
|
|
M_Holodeck_Event
|
|
=================
|
|
*/
|
|
static void M_Holodeck_Event (void* ptr, int notification)
|
|
{
|
|
int id;
|
|
int i;
|
|
|
|
id = ((menucommon_s*)ptr)->id;
|
|
|
|
switch (id)
|
|
{
|
|
case ID_QUIT:
|
|
if ( notification == QM_ACTIVATED )
|
|
UI_PopMenu();
|
|
break;
|
|
case ID_ENGAGE:
|
|
if ( notification == QM_ACTIVATED ) {
|
|
// do somthing
|
|
UI_ForceMenuOff();
|
|
}
|
|
break;
|
|
case ID_PRGM_BUTTON:
|
|
i = s_holodeck.targetEntID;
|
|
UI_PopMenu();
|
|
UI_HolodeckMenu(i);
|
|
break;
|
|
}
|
|
}
|
|
|
|
/*
|
|
=================
|
|
HolodeckMenu_Key
|
|
=================
|
|
*/
|
|
sfxHandle_t HolodeckMenu_Key (int key)
|
|
{
|
|
return ( Menu_DefaultKey( &s_holodeck.menu, key ) );
|
|
}
|
|
|
|
extern qhandle_t leftRound;
|
|
extern qhandle_t corner_ul_24_60;
|
|
extern qhandle_t corner_ll_12_60;
|
|
qhandle_t prgImage1;
|
|
qhandle_t prgImage2;
|
|
qhandle_t prgImage3;
|
|
qhandle_t prgImage4;
|
|
qhandle_t prgImage5;
|
|
|
|
/*
|
|
=================
|
|
M_HolodeckMenu_Graphics
|
|
=================
|
|
*/
|
|
static void M_HolodeckMenu_Graphics (void)
|
|
{
|
|
int i,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_HOLODECK],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_HOLODECK], UI_BIGFONT | UI_RIGHT, colorTable[CT_WHITE]);
|
|
|
|
trap_R_SetColor( colorTable[CT_DKPURPLE1]); //DKGOLD1
|
|
UI_DrawHandlePic( 607, 24,-16, 32, leftRound);
|
|
|
|
//UI_DrawHandlePic( 204, 106, 110, 24, buttonRight);
|
|
|
|
trap_R_SetColor( colorTable[CT_WHITE] );
|
|
switch(s_holodeck.progButton.curvalue) {
|
|
case 0:
|
|
UI_DrawHandlePic(346, 89, 257, 192, prgImage1);
|
|
break;
|
|
case 1:
|
|
UI_DrawHandlePic(346, 89, 257, 192, prgImage2);
|
|
break;
|
|
case 2:
|
|
UI_DrawHandlePic(346, 89, 257, 192, prgImage3);
|
|
break;
|
|
case 3:
|
|
UI_DrawHandlePic(346, 89, 257, 192, prgImage4);
|
|
break;
|
|
case 4:
|
|
UI_DrawHandlePic(346, 89, 257, 192, prgImage5);
|
|
break;
|
|
}
|
|
|
|
trap_R_SetColor( colorTable[CT_DKPURPLE1]);
|
|
|
|
UI_DrawHandlePic(322, 72, 24, 15, corner_ul_24_60);
|
|
UI_DrawHandlePic(346, 72, 259, 11, uis.whiteShader);
|
|
UI_DrawHandlePic(607, 72, -8, 14, leftRound);
|
|
UI_DrawHandlePic(322, 89, 22.5, 192, uis.whiteShader);
|
|
UI_DrawHandlePic(322, 283, 24, -15, corner_ul_24_60);
|
|
UI_DrawHandlePic(346, 287, 243, 11, uis.whiteShader);
|
|
UI_DrawHandlePic(591, 287, -24, 15, corner_ul_24_60);
|
|
UI_DrawHandlePic(592.5, 301, 22.5, 137, uis.whiteShader);
|
|
|
|
UI_DrawProportionalString(346, 289, va("%s", holoData.desc[0]), UI_TINYFONT, colorTable[CT_WHITE]);
|
|
|
|
}
|
|
|
|
/*
|
|
===============
|
|
HolodeckMenu_Draw
|
|
===============
|
|
*/
|
|
static void HolodeckMenu_Draw(void)
|
|
{
|
|
// Draw graphics particular to Main Menu
|
|
M_HolodeckMenu_Graphics();
|
|
|
|
Menu_Draw( &s_holodeck.menu );
|
|
}
|
|
|
|
/*
|
|
===============
|
|
UI_HolodeckMenu_Cache
|
|
===============
|
|
*/
|
|
void UI_HolodeckMenu_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");
|
|
if(holoData.image[0][0])
|
|
prgImage1 = trap_R_RegisterShaderNoMip(holoData.image[0]);
|
|
if(holoData.image[1][0])
|
|
prgImage2 = trap_R_RegisterShaderNoMip(holoData.image[1]);
|
|
if(holoData.image[2][0])
|
|
prgImage3 = trap_R_RegisterShaderNoMip(holoData.image[2]);
|
|
if(holoData.image[3][0])
|
|
prgImage4 = trap_R_RegisterShaderNoMip(holoData.image[3]);
|
|
if(holoData.image[4][0])
|
|
prgImage5 = trap_R_RegisterShaderNoMip(holoData.image[4]);
|
|
}
|
|
|
|
/*
|
|
===============
|
|
HolodeckMenu_Init
|
|
===============
|
|
*/
|
|
void HolodeckMenu_Init()
|
|
{
|
|
int y,pad,x;
|
|
int i,width;
|
|
|
|
PrgmList_Init();
|
|
|
|
s_holodeck.menu.nitems = 0;
|
|
s_holodeck.menu.draw = HolodeckMenu_Draw;
|
|
s_holodeck.menu.key = HolodeckMenu_Key;
|
|
s_holodeck.menu.wrapAround = qtrue;
|
|
s_holodeck.menu.descX = MENU_DESC_X;
|
|
s_holodeck.menu.descY = MENU_DESC_Y;
|
|
s_holodeck.menu.titleX = MENU_TITLE_X;
|
|
s_holodeck.menu.titleY = MENU_TITLE_Y;
|
|
|
|
pad = PROP_BIG_HEIGHT + 10;
|
|
width = MENU_BUTTON_MED_WIDTH-20;
|
|
y = 72;
|
|
x = 86;
|
|
|
|
s_holodeck.engage.generic.type = MTYPE_BITMAP;
|
|
s_holodeck.engage.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
|
|
s_holodeck.engage.generic.x = x;
|
|
s_holodeck.engage.generic.y = y;
|
|
s_holodeck.engage.generic.name = GRAPHIC_BUTTONLEFT;
|
|
s_holodeck.engage.generic.id = ID_ENGAGE;
|
|
s_holodeck.engage.generic.callback = M_Holodeck_Event;
|
|
s_holodeck.engage.width = width;
|
|
s_holodeck.engage.height = PROP_BIG_HEIGHT;
|
|
s_holodeck.engage.color = CT_DKPURPLE1;
|
|
s_holodeck.engage.color2 = CT_LTPURPLE1;
|
|
s_holodeck.engage.textX = MENU_BUTTON_TEXT_X;
|
|
s_holodeck.engage.textY = 12;
|
|
s_holodeck.engage.textEnum = MBT_HOLODECK_START;
|
|
s_holodeck.engage.textcolor = CT_BLACK;
|
|
s_holodeck.engage.textcolor2 = CT_WHITE;
|
|
s_holodeck.engage.textStyle = UI_TINYFONT;
|
|
|
|
x += width + 8;
|
|
|
|
s_holodeck.quitmenu.generic.type = MTYPE_BITMAP;
|
|
s_holodeck.quitmenu.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
|
|
s_holodeck.quitmenu.generic.x = x;
|
|
s_holodeck.quitmenu.generic.y = y;
|
|
s_holodeck.quitmenu.generic.name = GRAPHIC_BUTTONRIGHT;
|
|
s_holodeck.quitmenu.generic.id = ID_QUIT;
|
|
s_holodeck.quitmenu.generic.callback= M_Holodeck_Event;
|
|
s_holodeck.quitmenu.width = width;
|
|
s_holodeck.quitmenu.height = PROP_BIG_HEIGHT;
|
|
s_holodeck.quitmenu.color = CT_DKPURPLE1;
|
|
s_holodeck.quitmenu.color2 = CT_LTPURPLE1;
|
|
s_holodeck.quitmenu.textX = MENU_BUTTON_TEXT_X;
|
|
s_holodeck.quitmenu.textY = 12;
|
|
s_holodeck.quitmenu.textEnum = MBT_RETURNMENU;
|
|
s_holodeck.quitmenu.textcolor = CT_BLACK;
|
|
s_holodeck.quitmenu.textcolor2 = CT_WHITE;
|
|
s_holodeck.quitmenu.textStyle = UI_TINYFONT;
|
|
|
|
x -= width + 8;
|
|
y += pad;
|
|
|
|
s_holodeck.progButton.generic.type = MTYPE_SPINCONTROL;
|
|
s_holodeck.progButton.generic.flags = QMF_HIGHLIGHT_IF_FOCUS | QMF_ALTERNATE2;
|
|
s_holodeck.progButton.generic.x = x;
|
|
s_holodeck.progButton.generic.y = y;
|
|
s_holodeck.progButton.generic.id = ID_PRGM_BUTTON;
|
|
s_holodeck.progButton.width = width;
|
|
s_holodeck.progButton.height = PROP_BIG_HEIGHT;
|
|
s_holodeck.progButton.itemnames = (const char**)s_holodeck.prgListPtr;
|
|
s_holodeck.progButton.color = CT_DKPURPLE1;
|
|
s_holodeck.progButton.color2 = CT_LTPURPLE1;
|
|
s_holodeck.progButton.textX = MENU_BUTTON_TEXT_X;
|
|
s_holodeck.progButton.textY = 12;
|
|
s_holodeck.progButton.textEnum = MBT_HOLODECK_LIST;
|
|
s_holodeck.progButton.textcolor = CT_BLACK;
|
|
s_holodeck.progButton.textcolor2 = CT_WHITE;
|
|
|
|
Menu_AddItem( &s_holodeck.menu, &s_holodeck.progButton );
|
|
Menu_AddItem( &s_holodeck.menu, &s_holodeck.engage );
|
|
Menu_AddItem( &s_holodeck.menu, &s_holodeck.quitmenu );
|
|
}
|
|
|
|
/*
|
|
===============
|
|
UI_HolodeckMenu
|
|
===============
|
|
*/
|
|
void UI_HolodeckMenu (int trNum)
|
|
{
|
|
if ( !trNum )
|
|
return;
|
|
|
|
memset( &s_holodeck, 0, sizeof( s_holodeck ) );
|
|
|
|
s_holodeck.targetEntID = trNum;
|
|
|
|
uis.menusp = 0;
|
|
|
|
ingameFlag = qtrue; // true when in game menu is in use
|
|
|
|
Mouse_Show();
|
|
|
|
UI_HolodeckMenu_Cache();
|
|
|
|
HolodeckMenu_Init();
|
|
|
|
UI_PushMenu( &s_holodeck.menu );
|
|
|
|
Menu_AdjustCursor( &s_holodeck.menu, 1 );
|
|
}
|
|
|