rpgxef/code/ui/ui_msd.c
Harry Young 3164fdfa33 A lot of stuff!
-replaced target_safezone with target_sone (backwardscompability is in place)
--It now servers for more purposes than just escapepods. Also included in the MSD-System

-Removed list-iteration for safezones.
--They gave me such a hard time and put unneeded limits in place (like one time shots)
--now we loop trough all entities instead and find those with the right criteria and go from there

-For safezones clients are now tagged in the backend (new gclients_t-field)
--only those that aren't taggesd this way will be killed
--Closed FS#30

-First version of shiphealth HUD (FS#8, needs testing)
--There were som modifications made to the full UI as well

-Both Selfdestruct and Shiphealth communication to the client go via command now, the events got removed
-new Version Notation: RPG-X V 2.3 CB 4

Signed-off-by: Harry Young <hendrik.gerritzen@googlemail.com>
2013-02-10 00:31:04 +01:00

388 lines
14 KiB
C

/**********************************************************************
UI_msd.C
User interface trigger from within game
**********************************************************************/
#include "ui_local.h"
typedef struct //static
{
menuframework_s menu;
menubitmap_s quitmenu;
int maxhull;
int currhull;
int maxshield;
int currshield;
int shieldstate;
int warpstate;
int turbostate;
int transstate;
int alertstate;
const char *model;
} msd_t;
msd_t s_msd;
//s_msd.maxhull
#define ID_QUIT 10
void UI_msdMenu_Cache (void);
/*
=================
M_msd_Event
=================
*/
static void M_msd_Event (void* ptr, int notification)
{
int id;
//menubitmap_s *holdLocation;
//menubitmap_s *holdServer;
id = ((menucommon_s*)ptr)->id;
/*if ( notification != QM_ACTIVATED )
{
return;
}*/
if ((id == ID_QUIT) && (notification == QM_ACTIVATED))
UI_PopMenu();
}
/*
=================
msdMenu_Key
=================
*/
sfxHandle_t msdMenu_Key (int key)
{
return ( Menu_DefaultKey( &s_msd.menu, key ) );
}
extern qhandle_t leftRound;
extern qhandle_t corner_ul_24_60;
extern qhandle_t corner_ll_12_60;
qhandle_t loading1;
qhandle_t loading2;
qhandle_t loading3;
qhandle_t loading4;
qhandle_t loading5;
qhandle_t redalert;
qhandle_t yellowalert;
qhandle_t bluealert;
qhandle_t model;
/*
=================
M_msdMenu_Graphics
=================
*/
static void M_msdMenu_Graphics (void)
{
/*Notes:
Color-Types in Frame:
trap_R_SetColor( colorTable[CT_DKPURPLE3]);
Blue Alert:
trap_R_SetColor( colorTable[CT_BLUE] );
Yellow Alert:
trap_R_SetColor( colorTable[CT_YELLOW] );
Red Alert:
trap_R_SetColor( colorTable[CT_RED] );
*/
//menubitmap_s *holdDeck;
//int i;
int length,xTurboStart, lengthshield, lengthhull;
//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
// Lower corners
//colorTable[CT_VDKPURPLE2]
trap_R_SetColor( colorTable[CT_DKPURPLE3]);
UI_DrawHandlePic( 20, 440, 64, 16, corner_ll_12_60); //
xTurboStart = 604;
length = UI_ProportionalStringWidth( "MASTER SYSTEMS DISPLAY",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); //
if(s_msd.alertstate == 2){
UI_DrawHandlePic( 20, 123, 60, 250, redalert); // Alert Fade Red
}else if(s_msd.alertstate == 1){
UI_DrawHandlePic( 20, 123, 60, 250, yellowalert); // Alert Fade Yellow
}else if(s_msd.alertstate == 3){
UI_DrawHandlePic( 20, 123, 60, 250, bluealert); // Alert Fade Blue
}else{
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
if(s_msd.alertstate == 2)
UI_DrawProportionalString( xTurboStart, 24,
"MASTER SYSTEMS DISPLAY", UI_BIGFONT | UI_RIGHT, colorTable[CT_RED]);
else if(s_msd.alertstate == 1)
UI_DrawProportionalString( xTurboStart, 24,
"MASTER SYSTEMS DISPLAY", UI_BIGFONT | UI_RIGHT, colorTable[CT_YELLOW]);
else if(s_msd.alertstate == 3)
UI_DrawProportionalString( xTurboStart, 24,
"MASTER SYSTEMS DISPLAY", UI_BIGFONT | UI_RIGHT, colorTable[CT_BLUE]);
else
UI_DrawProportionalString( xTurboStart, 24,
"MASTER SYSTEMS DISPLAY", UI_BIGFONT | UI_RIGHT, colorTable[CT_WHITE]);
trap_R_SetColor( colorTable[CT_DKPURPLE1]); //DKGOLD1
UI_DrawHandlePic( 607, 24, -16, 32, leftRound);
// MSD Model
UI_DrawHandlePic( 100, 60, 500, 250, model);
// health Bars
lengthshield = (int)(498 * s_msd.currshield / s_msd.maxshield);
lengthhull = (int)(498 * s_msd.currhull / s_msd.maxhull);
trap_R_SetColor( colorTable[CT_BLACK] );
UI_DrawHandlePic( 100, 320, 500, 49, uis.whiteShader); //background
trap_R_SetColor( colorTable[CT_VDKBLUE1] );
//trap_R_SetColor( colorTable[CT_VDKPURPLE2] );
UI_DrawHandlePic( 101, 321, 498, 23, uis.whiteShader); //Shield Bar BG
trap_R_SetColor( colorTable[CT_VDKRED1] );
//trap_R_SetColor( colorTable[CT_VDKORANGE] );
UI_DrawHandlePic( 101, 345, 498, 23, uis.whiteShader); //Health Bar BG
//Shield Bar
if(s_msd.shieldstate == 1){
trap_R_SetColor( colorTable[CT_DKBLUE1] );
UI_DrawHandlePic( 101, 321, lengthshield, 23, uis.whiteShader);
UI_DrawProportionalString(103, 323, va("Shields at %.1f Percent", (lengthshield / 4.98)), UI_TINYFONT, colorTable[CT_MDGREY]);
} else if(s_msd.shieldstate == 0){
UI_DrawProportionalString(103, 323, "Shields are on standby", UI_TINYFONT, colorTable[CT_MDGREY]);
} else if(s_msd.shieldstate == -2){
UI_DrawProportionalString(103, 323, "Shields are offline", UI_TINYFONT, colorTable[CT_MDGREY]);
} else if(s_msd.shieldstate == -1){
UI_DrawProportionalString(103, 323, "Shields are inoperable", UI_TINYFONT, colorTable[CT_MDGREY]);
}
trap_R_SetColor( colorTable[CT_DKRED1] );
UI_DrawHandlePic( 101, 345, lengthhull, 23, uis.whiteShader); //Health Bar
UI_DrawProportionalString(103, 347, va("Structural Integity at %.1f Percent", (lengthhull / 4.98)), UI_TINYFONT, colorTable[CT_MDGREY]);
//Sub System indicators
//Shields
trap_R_SetColor( colorTable[CT_WHITE] ); //colorTable[CT_VDKPURPLE2]
UI_DrawHandlePic( 100, 380, 90, 45, uis.whiteShader);
if(s_msd.shieldstate == 1){
trap_R_SetColor( colorTable[CT_GREEN] ); //colorTable[CT_VDKPURPLE2]
UI_DrawHandlePic( 101, 381, 88, 43, uis.whiteShader);
UI_DrawProportionalString(101, 382, "Shields are", UI_TINYFONT, colorTable[CT_MDGREY]);
UI_DrawProportionalString(101, 397, "online", UI_TINYFONT, colorTable[CT_MDGREY]);
} else if(s_msd.shieldstate == 0){
trap_R_SetColor( colorTable[CT_YELLOW] ); //colorTable[CT_VDKPURPLE2]
UI_DrawHandlePic( 101, 381, 88, 43, uis.whiteShader);
UI_DrawProportionalString(101, 382, "Shields are", UI_TINYFONT, colorTable[CT_MDGREY]);
UI_DrawProportionalString(101, 397, "on standby", UI_TINYFONT, colorTable[CT_MDGREY]);
} else if(s_msd.shieldstate == -2){
trap_R_SetColor( colorTable[CT_RED] ); //colorTable[CT_VDKPURPLE2]
UI_DrawHandlePic( 101, 381, 88, 43, uis.whiteShader);
UI_DrawProportionalString(101, 382, "Shields are", UI_TINYFONT, colorTable[CT_MDGREY]);
UI_DrawProportionalString(101, 397, "offline", UI_TINYFONT, colorTable[CT_MDGREY]);
} else if(s_msd.shieldstate == -1){
trap_R_SetColor( colorTable[CT_RED] ); //colorTable[CT_VDKPURPLE2]
UI_DrawHandlePic( 101, 381, 88, 43, uis.whiteShader);
UI_DrawProportionalString(101, 382, "Shields are", UI_TINYFONT, colorTable[CT_MDGREY]);
UI_DrawProportionalString(101, 397, "inoperable", UI_TINYFONT, colorTable[CT_MDGREY]);
}
//Warp Drive
trap_R_SetColor( colorTable[CT_WHITE] ); //colorTable[CT_VDKPURPLE2]
UI_DrawHandlePic( 195, 380, 90, 45, uis.whiteShader);
if(s_msd.warpstate == 1){
trap_R_SetColor( colorTable[CT_GREEN] ); //colorTable[CT_VDKPURPLE2]
UI_DrawHandlePic( 196, 381, 88, 43, uis.whiteShader);
UI_DrawProportionalString(197, 382, "Warp Drive is", UI_TINYFONT, colorTable[CT_MDGREY]);
UI_DrawProportionalString(197, 397, "online", UI_TINYFONT, colorTable[CT_MDGREY]);
} else if(s_msd.warpstate == 0){
trap_R_SetColor( colorTable[CT_RED] ); //colorTable[CT_VDKPURPLE2]
UI_DrawHandlePic( 196, 381, 88, 43, uis.whiteShader);
UI_DrawProportionalString(197, 382, "Warp Drive is", UI_TINYFONT, colorTable[CT_MDGREY]);
UI_DrawProportionalString(197, 397, "offline", UI_TINYFONT, colorTable[CT_MDGREY]);
} else if(s_msd.warpstate == 2){
trap_R_SetColor( colorTable[CT_RED] ); //colorTable[CT_VDKPURPLE2]
UI_DrawHandlePic( 196, 381, 88, 43, uis.whiteShader);
UI_DrawProportionalString(197, 382, "Warp Core is", UI_TINYFONT, colorTable[CT_MDGREY]);
UI_DrawProportionalString(197, 397, "ejected", UI_TINYFONT, colorTable[CT_MDGREY]);
} else if(s_msd.warpstate == -2){//-2, no info available
trap_R_SetColor( colorTable[CT_YELLOW] ); //colorTable[CT_VDKPURPLE2]
UI_DrawHandlePic( 196, 381, 88, 43, uis.whiteShader);
UI_DrawProportionalString(197, 382, "Warp-Core-ODN-", UI_TINYFONT, colorTable[CT_MDGREY]);
UI_DrawProportionalString(197, 397, "Update required", UI_TINYFONT, colorTable[CT_MDGREY]);
}
//Turbolift
trap_R_SetColor( colorTable[CT_WHITE] ); //colorTable[CT_VDKPURPLE2]
UI_DrawHandlePic( 290, 380, 90, 45, uis.whiteShader);
if(s_msd.turbostate == 1){
trap_R_SetColor( colorTable[CT_GREEN] ); //colorTable[CT_VDKPURPLE2]
UI_DrawHandlePic( 291, 381, 88, 43, uis.whiteShader);
UI_DrawProportionalString(292, 382, "Turbolifts are", UI_TINYFONT, colorTable[CT_MDGREY]);
UI_DrawProportionalString(292, 397, "online", UI_TINYFONT, colorTable[CT_MDGREY]);
} else if(s_msd.turbostate == 0){
trap_R_SetColor( colorTable[CT_RED] ); //colorTable[CT_VDKPURPLE2]
UI_DrawHandlePic( 291, 381, 88, 43, uis.whiteShader);
UI_DrawProportionalString(292, 382, "Turbolifts are", UI_TINYFONT, colorTable[CT_MDGREY]);
UI_DrawProportionalString(292, 397, "offline", UI_TINYFONT, colorTable[CT_MDGREY]);
} else if(s_msd.turbostate == -2){//-2, no info available
trap_R_SetColor( colorTable[CT_YELLOW] ); //colorTable[CT_VDKPURPLE2]
UI_DrawHandlePic( 291, 381, 88, 43, uis.whiteShader);
UI_DrawProportionalString(292, 382, "Turbolift-ODN-", UI_TINYFONT, colorTable[CT_MDGREY]);
UI_DrawProportionalString(292, 397, "Update required", UI_TINYFONT, colorTable[CT_MDGREY]);
}
//Transporter
trap_R_SetColor( colorTable[CT_WHITE] ); //colorTable[CT_VDKPURPLE2]
UI_DrawHandlePic( 385, 380, 90, 45, uis.whiteShader);
if(s_msd.transstate == 1){
trap_R_SetColor( colorTable[CT_GREEN] ); //colorTable[CT_VDKPURPLE2]
UI_DrawHandlePic( 386, 381, 88, 43, uis.whiteShader);
UI_DrawProportionalString(387, 382, "Transporters are", UI_TINYFONT, colorTable[CT_MDGREY]);
UI_DrawProportionalString(387, 397, "online", UI_TINYFONT, colorTable[CT_MDGREY]);
} else if(s_msd.transstate == 0){
trap_R_SetColor( colorTable[CT_RED] ); //colorTable[CT_VDKPURPLE2]
UI_DrawHandlePic( 386, 381, 88, 43, uis.whiteShader);
UI_DrawProportionalString(387, 382, "Transporters are", UI_TINYFONT, colorTable[CT_MDGREY]);
UI_DrawProportionalString(387, 397, "offline", UI_TINYFONT, colorTable[CT_MDGREY]);
} else if(s_msd.transstate == -2){//-2, no info available
trap_R_SetColor( colorTable[CT_YELLOW] ); //colorTable[CT_VDKPURPLE2]
UI_DrawHandlePic( 386, 381, 88, 43, uis.whiteShader);
UI_DrawProportionalString(386, 382, "Transporter-ODN-", UI_TINYFONT, colorTable[CT_MDGREY]);
UI_DrawProportionalString(387, 397, "Update required", UI_TINYFONT, colorTable[CT_MDGREY]);
}
}
/*
===============
msdMenu_Draw
===============
*/
static void msdMenu_Draw(void)
{
// Draw graphics particular to Main Menu
M_msdMenu_Graphics();
Menu_Draw( &s_msd.menu );
}
/*
===============
UI_msdMenu_Cache
===============
*/
void UI_msdMenu_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");
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");
redalert = trap_R_RegisterShaderNoMip("menu/alert/red");
yellowalert = trap_R_RegisterShaderNoMip("menu/alert/yellow");
bluealert = trap_R_RegisterShaderNoMip("menu/alert/blue");
model = trap_R_RegisterShaderNoMip(s_msd.model);
}
/*
===============
msdMenu_Init
===============
*/
void msdMenu_Init(void)
{
s_msd.menu.nitems = 0;
s_msd.menu.draw = msdMenu_Draw;
s_msd.menu.key = msdMenu_Key;
s_msd.menu.wrapAround = qtrue;
s_msd.menu.descX = MENU_DESC_X;
s_msd.menu.descY = MENU_DESC_Y;
s_msd.menu.titleX = MENU_TITLE_X;
s_msd.menu.titleY = MENU_TITLE_Y;
s_msd.quitmenu.generic.type = MTYPE_BITMAP;
s_msd.quitmenu.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_msd.quitmenu.generic.x = 490;
s_msd.quitmenu.generic.y = 380;
s_msd.quitmenu.generic.name = GRAPHIC_BUTTONLEFT;
s_msd.quitmenu.generic.id = ID_QUIT;
s_msd.quitmenu.generic.callback = M_msd_Event;
s_msd.quitmenu.width = MENU_BUTTON_MED_WIDTH-20;
s_msd.quitmenu.height = PROP_BIG_HEIGHT;
s_msd.quitmenu.color = CT_DKPURPLE1;
s_msd.quitmenu.color2 = CT_LTPURPLE1;
s_msd.quitmenu.textX = MENU_BUTTON_TEXT_X;
s_msd.quitmenu.textY = 12;
s_msd.quitmenu.textEnum = MBT_RETURNMENU;
s_msd.quitmenu.textcolor = CT_BLACK;
s_msd.quitmenu.textcolor2 = CT_WHITE;
s_msd.quitmenu.textStyle = UI_TINYFONT;
Menu_AddItem( &s_msd.menu, &s_msd.quitmenu );
}
/*
===============
UI_msdMenu
===============
*/
void UI_msdMenu(int maxhull, int currhull, int maxshield, int currshield, int shieldstate, int warpstate, int turbostate, int transstate, int alertstate, char *model)
{
memset( &s_msd, 0, sizeof( s_msd ) );
s_msd.maxhull = maxhull;
s_msd.currhull = currhull;
s_msd.maxshield = maxshield;
s_msd.currshield = currshield;
s_msd.shieldstate = shieldstate;
s_msd.warpstate = warpstate;
s_msd.turbostate = turbostate;
s_msd.transstate = transstate;
s_msd.alertstate = alertstate;
s_msd.model = model;
uis.menusp = 0;
ingameFlag = qtrue; // true when in game menu is in use
Mouse_Show();
UI_msdMenu_Cache();
msdMenu_Init();
UI_PushMenu( &s_msd.menu );
Menu_AdjustCursor( &s_msd.menu, 1 );
}