mirror of
https://github.com/nzp-team/fteqw.git
synced 2024-11-29 23:22:01 +00:00
178 lines
5.3 KiB
C
178 lines
5.3 KiB
C
|
/*
|
||
|
Copyright (C) 2011 azazello and ezQuake team
|
||
|
|
||
|
This program is free software; you can redistribute it and/or
|
||
|
modify it under the terms of the GNU General Public License
|
||
|
as published by the Free Software Foundation; either version 2
|
||
|
of the License, or (at your option) any later version.
|
||
|
|
||
|
This program is distributed in the hope that it will be useful,
|
||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||
|
|
||
|
See the GNU General Public License for more details.
|
||
|
|
||
|
You should have received a copy of the GNU General Public License
|
||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||
|
*/
|
||
|
//
|
||
|
// HUD commands
|
||
|
//
|
||
|
|
||
|
#ifndef __hud_h__
|
||
|
#define __hud_h__
|
||
|
|
||
|
// flags
|
||
|
#define HUD_NO_DRAW (1 << 0) // don't draw this automatically
|
||
|
#define HUD_NO_SHOW (1 << 1) // doesn't support show/hide
|
||
|
#define HUD_NO_POS_X (1 << 2) // doesn't support x positioning
|
||
|
#define HUD_NO_POS_Y (1 << 3) // doesn't support y positioning
|
||
|
#define HUD_NO_FRAME (1 << 4) // don't add frame
|
||
|
#define HUD_ON_DIALOG (1 << 5) // draw on dialog too
|
||
|
#define HUD_ON_INTERMISSION (1 << 6) // draw on intermission too
|
||
|
#define HUD_ON_FINALE (1 << 7) // draw on finale too
|
||
|
#define HUD_ON_SCORES (1 << 8) // draw on +showscores too
|
||
|
#define HUD_NO_GROW (1 << 9) // no frame grow
|
||
|
#define HUD_PLUSMINUS (1 << 10) // auto add +/- commands
|
||
|
#define HUD_OPACITY (1 << 11)
|
||
|
|
||
|
#define HUD_INVENTORY (HUD_NO_GROW) // aply for sbar elements
|
||
|
|
||
|
#define HUD_MAX_PARAMS 24
|
||
|
|
||
|
#define HUD_REGEXP_OFFSET_COUNT 20
|
||
|
|
||
|
// Placement
|
||
|
#define HUD_PLACE_SCREEN 1
|
||
|
#define HUD_PLACE_TOP 2
|
||
|
#define HUD_PLACE_VIEW 3
|
||
|
#define HUD_PLACE_SBAR 4
|
||
|
#define HUD_PLACE_IBAR 5
|
||
|
#define HUD_PLACE_HBAR 6
|
||
|
#define HUD_PLACE_SFREE 7
|
||
|
#define HUD_PLACE_IFREE 8
|
||
|
#define HUD_PLACE_HFREE 9
|
||
|
|
||
|
// Alignment
|
||
|
#define HUD_ALIGN_LEFT 1
|
||
|
#define HUD_ALIGN_TOP 1
|
||
|
#define HUD_ALIGN_CENTER 2
|
||
|
#define HUD_ALIGN_RIGHT 3
|
||
|
#define HUD_ALIGN_BOTTOM 3
|
||
|
#define HUD_ALIGN_BEFORE 4
|
||
|
#define HUD_ALIGN_AFTER 5
|
||
|
#define HUD_ALIGN_CONSOLE 6
|
||
|
|
||
|
typedef struct hud_s
|
||
|
{
|
||
|
char *name; // Element name.
|
||
|
char *description; // Little help.
|
||
|
|
||
|
void (*draw_func) (struct hud_s *); // Drawing function.
|
||
|
|
||
|
cvar_t *order; // Higher it is, later this element will be drawn
|
||
|
// and more probable that will be on top.
|
||
|
|
||
|
cvar_t *show; // Show cvar.
|
||
|
cvar_t *frame; // Frame cvar.
|
||
|
cvar_t *frame_color; // Frame color cvar.
|
||
|
byte frame_color_cache[4]; // Cache for parsed frame color.
|
||
|
|
||
|
cvar_t *opacity; // The overall opacity of the entire HUD element.
|
||
|
|
||
|
// placement
|
||
|
cvar_t *place; // Place string, parsed to:
|
||
|
struct hud_s *place_hud; // if snapped to hud element
|
||
|
qbool place_outside; // if hud: inside ot outside
|
||
|
int place_num; // place number (our or parent if hud)
|
||
|
// note: item is placed at another HUD element
|
||
|
// if place_hud != NULL
|
||
|
|
||
|
cvar_t *align_x; // Alignment cvars (left, right, ...)
|
||
|
cvar_t *align_y;
|
||
|
int align_x_num; // Parsed alignment.
|
||
|
int align_y_num;
|
||
|
|
||
|
cvar_t *pos_x; // Position cvars.
|
||
|
cvar_t *pos_y;
|
||
|
|
||
|
cvar_t **params; // Registered parameters for the HUD element.
|
||
|
int num_params;
|
||
|
|
||
|
cactive_t min_state; // At least this state is required
|
||
|
// to draw this element.
|
||
|
|
||
|
unsigned flags;
|
||
|
|
||
|
// Last draw parameters (mostly used by children)
|
||
|
int lx, ly, lw, lh; // Last position.
|
||
|
int al, ar, at, ab; // Last frame params.
|
||
|
|
||
|
int last_try_sequence; // Sequence, at which object tried to draw itself.
|
||
|
int last_draw_sequence; // Sequence, at which it was last drawn successfully.
|
||
|
|
||
|
struct hud_s *next; // Next HUD in the list.
|
||
|
} hud_t;
|
||
|
|
||
|
typedef void (*hud_func_type) (struct hud_s *);
|
||
|
|
||
|
#define MAX_HUD_ELEMENTS 256
|
||
|
|
||
|
//
|
||
|
// Initialize
|
||
|
//
|
||
|
void HUD_Init(void);
|
||
|
|
||
|
//
|
||
|
// Add element to list
|
||
|
// parameter format: "name1", "default1", ..., "nameX", "defaultX", NULL
|
||
|
//
|
||
|
hud_t * HUD_Register(char *name, char *var_alias, char *description,
|
||
|
int flags, cactive_t min_state, int draw_order,
|
||
|
hud_func_type draw_func,
|
||
|
char *show, char *place, char *align_x, char *align_y,
|
||
|
char *pos_x, char *pos_y, char *frame, char *frame_color,
|
||
|
char *item_opacity, char *params, ...);
|
||
|
|
||
|
|
||
|
//
|
||
|
// Draw all active elements.
|
||
|
//
|
||
|
void HUD_Draw(void);
|
||
|
|
||
|
//
|
||
|
// Retrieve hud cvar.
|
||
|
//
|
||
|
cvar_t *HUD_FindVar(hud_t *hud, char *subvar);
|
||
|
|
||
|
//
|
||
|
// Find element in list.
|
||
|
//
|
||
|
hud_t * HUD_Find(char *name);
|
||
|
|
||
|
//
|
||
|
// Calculate screen position of element.
|
||
|
// return value:
|
||
|
// true - draw it
|
||
|
// false - don't draw, it is off screen (mayby partially)
|
||
|
//
|
||
|
qbool HUD_PrepareDraw(
|
||
|
hud_t *hud, int width, int height, // In.
|
||
|
int *ret_x, int *ret_y); // Out.
|
||
|
|
||
|
qbool HUD_PrepareDrawByName(
|
||
|
char *element, int width, int height, // In.
|
||
|
int *ret_x, int *ret_y); // Out.
|
||
|
|
||
|
|
||
|
// Sort all HUD Elements.
|
||
|
void HUD_Sort(void);
|
||
|
|
||
|
// Recalculate the position of all hud elements.
|
||
|
void HUD_Recalculate(void);
|
||
|
|
||
|
// when show pre-selected weapon/ammo? 1) player uses this system 2) not dead 3) when playing
|
||
|
#define ShowPreselectedWeap() (cl_weaponpreselect->value && cl.stats[STAT_HEALTH] > 0 && !cls.demoplayback && !cl.spectator)
|
||
|
|
||
|
#endif // __hud_h__
|