95 #define SCROLLBACK_MODE_MSGS_LOG 0
96 #define SCROLLBACK_MODE_EVENT_LOG 1
97 #define SCROLLBACK_MODE_OBJECTIVES 2
101 #define SCROLL_UP_BUTTON 0
102 #define SCROLL_DOWN_BUTTON 1
103 #define SHOW_MSGS_BUTTON 2
104 #define SHOW_EVENTS_BUTTON 3
105 #define SHOW_OBJS_BUTTON 4
106 #define ACCEPT_BUTTON 5
108 #define HUD_MSG_LENGTH_MAX 2048
130 scrollback_buttons(
char *
name,
int x1,
int y1,
int x2,
int y2,
int h) : filename(name), x(x1), y(y1), xt(x2), yt(y2), hotspot(h) {}
139 #define MAX_MSG_SCROLLBACK_LINES 1000
155 static int Num_obj_lines;
156 static int Scroll_offset;
157 static int Scroll_max;
160 static int Background_bitmap;
212 HUD_fixed_text[i].end_time =
timestamp(0);
235 Msg_scrollback_lines[
i].
text = NULL;
236 list_append(&Msg_scrollback_free_list, &Msg_scrollback_lines[i]);
245 HUD_msg_buffer.clear();
314 for ( i = 0; i < HUD_msg_buffer.size(); i++ ) {
315 msg =
new char [HUD_msg_buffer[
i].text.size()+1];
316 strcpy(msg, HUD_msg_buffer[i].text.c_str());
318 ptr = strstr(msg,
NOX(
": ")) + 2;
330 if (ptr == split_str) {
351 new_message.
text = text;
382 new_active_msg.
target_y = new_active_msg.
y;
393 if (
m->y >
m->target_y ) {
399 if (
m->y <
m->target_y ) {
456 if (
m->msg.source ) {
478 nprintf((
"Network",
"HUD_fixed_printf bailing because not in multiplayer game play state\n"));
482 va_start(args, format);
483 vsnprintf(tmp,
sizeof(tmp)-1, format, args);
485 tmp[
sizeof(tmp)-1] =
'\0';
487 msg_length = strlen(tmp);
490 nprintf((
"Warning",
"HUD_fixed_printf ==> attempt to print a 0 length string in msg window\n"));
494 nprintf((
"Warning",
"HUD_fixed_printf ==> Following string truncated to %d chars: %s\n",
MAX_HUD_LINE_LEN - 1, tmp));
498 strcpy_s(HUD_fixed_text[0].text, tmp);
500 if (duration == 0.0
f){
534 nprintf((
"Network",
"HUD_printf bailing because not in multiplayer game play state\n"));
538 va_start(args, format);
539 vsnprintf(tmp,
sizeof(tmp)-1, format, args);
541 tmp[
sizeof(tmp)-1] =
'\0';
550 tmp[
sizeof(tmp)-1] =
'\0';
553 snprintf(tmp,
sizeof(tmp)-1,
NOX(
"%s: "),
Ships[sh].ship_name);
556 va_start(args, format);
557 vsnprintf(tmp + len,
sizeof(tmp)-1-len, format, args);
578 nprintf((
"Network",
"HUD_sourced_printf bailing because not in multiplayer game play state\n"));
582 va_start(args, format);
583 vsnprintf(tmp,
sizeof(tmp)-1, format, args);
585 tmp[
sizeof(tmp)-1] =
'\0';
592 if ( !strlen(msg) ) {
593 nprintf((
"Warning",
"HUD ==> attempt to print a 0 length string in msg window\n"));
606 HUD_msg_buffer.push_back(new_msg);
620 int count = 0, y_add = 0;
627 ptr =
GET_FIRST(&Msg_scrollback_used_list);
628 while (ptr !=
END_OF_LIST(&Msg_scrollback_used_list)) {
631 count += font_height + ptr->
y;
645 nprintf((
"Warning",
"HUD ==> attempt to print a 0 length string in msg window\n"));
660 if (!text || !strlen(text))
663 if (
EMPTY(&Msg_scrollback_free_list) ) {
664 new_line =
GET_FIRST(&Msg_scrollback_used_list);
669 new_line =
GET_FIRST(&Msg_scrollback_free_list);
679 strcpy(new_line->
text, text);
686 int msg_len,
w, max_width,
x,
offset = 0;
688 max_width = Hud_mission_log_list2_coords[
gr_screen.
res][2];
689 msg_len = strlen(text);
696 ptr = strstr(buf,
NOX(
": "));
729 if ( Msg_scrollback_used_list.
next == NULL || Msg_scrollback_used_list.
prev == NULL )
732 A =
GET_FIRST(&Msg_scrollback_used_list);
733 while( A !=
END_OF_LIST(&Msg_scrollback_used_list) ) {
734 if ( A->
text != NULL ) {
752 int excess = Scroll_max - Hud_mission_log_list_coords[
gr_screen.
res][3];
758 ptr =
GET_FIRST(&Msg_scrollback_used_list);
759 while (ptr !=
END_OF_LIST(&Msg_scrollback_used_list)) {
763 excess -= font_height;
782 max = (Scroll_max - Hud_mission_log_list_coords[
gr_screen.
res][3]) / font_height;
832 ptr =
GET_FIRST(&Msg_scrollback_used_list);
833 while (ptr !=
END_OF_LIST(&Msg_scrollback_used_list)) {
835 if (count == Scroll_offset) {
840 y += font_height + ptr->
y;
847 Scroll_offset = count =
y = 0;
848 ptr =
GET_FIRST(&Msg_scrollback_used_list);
849 while (ptr !=
END_OF_LIST(&Msg_scrollback_used_list)) {
851 if (
y <= pos + delta)
852 Scroll_offset =
count;
854 y += font_height + ptr->
y;
862 pos = Scroll_offset * font_height;
864 Scroll_offset = pos / font_height;
875 if (Scroll_offset < 0)
884 if (Scroll_offset < max) {
886 if (Scroll_offset > max)
983 if (Background_bitmap >= 0)
1074 if (Background_bitmap >= 0) {
1108 node_ptr =
GET_FIRST(&Msg_scrollback_used_list);
1110 while ( node_ptr !=
END_OF_LIST(&Msg_scrollback_used_list) ) {
1123 switch (node_ptr->
source)
1148 x = Hud_mission_log_list2_coords[
gr_screen.
res][0] + node_ptr->
x;
1160 i = Hud_mission_log_list_coords[
gr_screen.
res][1] + y + font_height / 2 - 1;
1170 y += font_height + node_ptr->
y;
1172 if (y + font_height > Hud_mission_log_list_coords[
gr_screen.
res][3])
1205 Header_offsets[0] =
x;
1206 Header_offsets[1] =
y;
1211 Anim_offsets[0] =
x;
1212 Anim_offsets[1] =
y;
1236 float scale_x =
i2fl(Anim_size[0]) /
i2fl(anim_data->
width);
1259 if(msg_id != -1 && head_anim != NULL) {
1271 float scale_x =
i2fl(Anim_size[0]) /
i2fl(head_anim->
width);
1347 hp = &HUD_fixed_text[0];
GLenum GLsizei GLenum format
void render(float frametime)
virtual void initialize()
void set_highlight_action(void(*_user_function)(void))
int timestamp(int delta_ms)
#define MAX_MSG_SCROLLBACK_LINES
SCP_queue< HUD_message_data > pending_messages
void hud_clear_msg_buffer()
void add_XSTR(char *string, int _xstr_id, int _x, int _y, UI_GADGET *_assoc, int _color_type, int _font_id=-1)
#define NETPLAYER_STATE_IN_MISSION
int ML_objectives_init(int x, int y, int w, int h)
GLfloat GLfloat GLfloat GLfloat h
void hud_add_line_to_scrollback(char *text, int source, int t, int x, int y, int underline_width)
color * iff_get_color_by_team(int team, int seen_from_team, int is_bright)
line_node Msg_scrollback_used_list
line_node Msg_scrollback_free_list
__inline void gr_circle(int xc, int yc, int d, int resize_mode=GR_RESIZE_FULL)
void setGaugeColor(int bright_index=-4)
unsigned char done_playing
void message_log_init_scrollback(int pw)
void _cdecl void void _cdecl void _cdecl Warning(char *filename, int line, SCP_FORMAT_STRING const char *format,...) SCP_FORMAT_STRING_ARGS(3
void initMaxLines(int lines)
#define GR_NUM_RESOLUTIONS
__inline void gr_string(int x, int y, const char *string, int resize_mode=GR_RESIZE_FULL)
#define list_append(head, elem)
general failure sound for any event
void HUD_printf(const char *format,...)
void ML_render_objectives_key()
void message_log_shutdown_scrollback()
#define SCROLLBACK_MODE_OBJECTIVES
color clr[NUM_HUD_GAUGES]
#define END_OF_LIST(head)
#define GR_MAYBE_CLEAR_RES(bmap)
int hud_query_scrollback_size()
void gr_print_timestamp(int x, int y, fix timestamp, int resize_mode)
void gr_set_screen_scale(int w, int h, int zoom_w, int zoom_h, int max_w, int max_h, int center_w, int center_h, bool force_stretch)
void gr_set_color_fast(color *dst)
std::basic_string< char, std::char_traits< char >, std::allocator< char > > SCP_string
void hud_scrollback_close()
void hud_page_scroll_list(int dir)
void hud_scroll_list(int dir)
void gr_set_bitmap(int bitmap_num, int alphablend_mode, int bitblt_mode, float alpha)
void HUD_sourced_printf(int source, const char *format,...)
GLenum GLuint GLenum GLsizei const GLchar * buf
void hud_set_default_color()
Set the current color to the default HUD color (with default alpha)
int bm_release(int handle, int clear_render_targets)
Frees both a bitmap's data and it's associated slot.
script_state Script_system("FS2_Open Scripting")
void setClip(int x, int y, int w, int h)
int bm_load_animation(const char *real_filename, int *nframes, int *fps, int *keyframe, int can_drop_frames, int dir_type)
Loads a bitmap sequance so we can draw with it.
void HUD_init_fixed_text()
void gr_set_color(int r, int g, int b)
void common_set_interface_palette(char *filename)
void draw_forced(int frame_num)
char text[MAX_HUD_LINE_LEN]
void set_mask_bmap(char *fname)
int set_bmaps(char *ani_filename, int nframes=3, int start_frame=1)
HUD_ft HUD_fixed_text[MAX_HUD_FT]
#define SCROLL_DOWN_BUTTON
void initAnimOffsets(int x, int y)
void common_free_interface_palette()
void HUD_ship_sent_printf(int sh, const char *format,...)
SCP_vector< HUD_message_data > HUD_msg_buffer
void weapon_pause_sounds()
#define HUD_SOURCE_IMPORTANT
#define HUD_SOURCE_COMPUTER
#define HUD_MESSAGE_LINES
void processMessageBuffer()
void ML_objectives_close()
#define SHOW_EVENTS_BUTTON
#define HUD_OBJECT_TALKING_HEAD
void initHiddenByCommsMenu(bool hide)
#define HUD_SOURCE_TEAM_OFFSET
void generic_anim_render(generic_anim *ga, float frametime, int x, int y, bool menu)
#define HUD_OBJECT_FIXED_MESSAGES
void addPending(const char *text, int source, int x=0)
#define HUD_SOURCE_HIDDEN
#define HUD_OBJECT_MESSAGES
int split_str(const char *src, int max_pixel_w, int *n_chars, const char **p_str, int max_lines, char ignore_char)
#define CHA_HUDMSGRECEIVED
void initBitmaps(const char *fname)
void renderString(int x, int y, const char *str)
#define HUD_SOURCE_TRAINING
GLint GLint GLint GLint GLint x
int hud_disabled()
Checks if HUD disabled.
void hud_free_scrollback_list()
const char * XSTR(const char *str, int index)
void render(float frametime)
#define HUD_SOURCE_FAILED
anim_instance * anim_play(anim_play_struct *aps)
Will add an anim instance to the anim_render_list. This will cause the anim to be played at the x...
void hud_scrollback_exit()
void set_hotkey(int keycode)
#define NETGAME_STATE_IN_MISSION
GLuint const GLchar * name
__inline void gr_line(int x1, int y1, int x2, int y2, int resize_mode=GR_RESIZE_FULL)
int RunCondition(int condition, char format='\0', void *data=NULL, class object *objp=NULL, int more_data=0)
pmessage Playing_messages[MAX_PLAYING_MESSAGES]
void weapon_unpause_sounds()
void initAnimSizes(int w, int h)
void hud_add_msg_to_scrollback(const char *text, int source, int t)
void hud_scrollback_init()
int bm_load(const char *real_filename)
Loads a bitmap so we can draw with it later.
GLboolean GLboolean GLboolean b
void mission_log_scrollback(int line, int list_x, int list_y, int list_w, int list_h)
void HUD_fixed_printf_reset()
int HUD_team_get_source(int team)
void hud_scrollback_button_pressed(int n)
scroll pressed (and scroll)
void anim_play_init(anim_play_struct *aps, anim *a_info, int x, int y, int base_w, int base_h)
Setup an anim_play_struct for passing into anim_play().
void HUD_add_to_scrollback(const char *text, int source)
void link_hotspot(int num)
#define SCROLLBACK_MODE_MSGS_LOG
void create(UI_WINDOW *wnd, char *_text, int _x, int _y, int _w, int _h, int do_repeat=0, int ignore_focus=0)
GLubyte GLubyte GLubyte GLubyte w
#define UI_XSTR_COLOR_PINK
void bm_page_in_aabitmap(int bitmapnum, int nframes)
Marks a texture as being used for this level, and is anti-aliased.
void create(int _x, int _y, int _w, int _h, int _flags, int _f_id=-1)
#define HUD_SOURCE_TERRAN_CMD
void audiostream_unpause_all(bool via_sexp_or_script=false)
void hud_scrollback_do_frame(float frametime)
void gr_get_string_size(int *w, int *h, const char *text, int len=9999)
char * split_str_once(char *src, int max_pixel_w)
int hud_get_scroll_max_pos()
void RemHookVars(unsigned int num,...)
void initMaxWidth(int width)
HUD_CONFIG_TYPE HUD_config
void common_play_highlight_sound()
void hud_init_msg_window()
#define HUD_SOURCE_SATISFIED
#define timestamp_elapsed(stamp)
void SetHookVar(char *name, char format, void *data=NULL)
#define list_remove(head, elem)
void ML_objectives_do_frame(int scroll_offset)
void renderPrintf(int x, int y, const char *format,...)
GLsizei GLsizei GLchar * source
void gr_bitmap(int _x, int _y, int resize_mode)
#define UI_XSTR_COLOR_GREEN
void HUD_fixed_printf(float duration, color col, const char *format,...)
bool Hidden_by_comms_menu
void initTotalLife(int ms)
void initHeaderOffsets(int x, int y)
#define HUD_MSG_LENGTH_MAX
void hud_sourced_print(int source, const char *msg)
line_node Msg_scrollback_lines[MAX_MSG_SCROLLBACK_LINES]
void gamesnd_play_iface(int n)
void audiostream_pause_all(bool via_sexp_or_script=false)
int hud_disabled_except_messages()
Like hud_disabled(), except messages are still drawn.
int process(int key_in=-1, int process_mouse=1)
void _cdecl gr_printf_menu(int x, int y, const char *format,...)
void gameseq_post_event(int event)
int HUD_source_get_team(int source)
void initLineHeight(int h)
#define PLAYER_FLAGS_MSG_MODE
void render(float frametime)
void initScrollTime(int ms)
void hud_goto_pos(int delta)
anim_instance * createAnim(int anim_start_frame, anim *anim_data)
SCP_vector< Hud_display_info > active_messages
#define SCROLLBACK_MODE_EVENT_LOG
void renderBitmap(int x, int y)