28 #define FADE_FACTOR 2 // how much the bounding brackets get faded
29 #define LOWEST_RED 50 // lowest r value for bounding bracket
30 #define LOWEST_GREEN 50 // lowest g value for bounding bracket
31 #define LOWEST_BLUE 50 // lowest b value for bounding bracket
65 int bracket_width = width/4;
66 int bracket_height = height/4;
100 int bracket_width = width/4;
101 int bracket_height = height/4;
104 gr_line(x1,y1,x1+bracket_width,y1);
105 gr_line(x2,y1,x2-bracket_width,y1);
107 gr_line(x1,y1+1,x1+bracket_width,y1+1);
108 gr_line(x2,y1+1,x2-bracket_width,y1+1);
112 gr_line(x1,y2,x1+bracket_width,y2);
113 gr_line(x2,y2,x2-bracket_width,y2);
115 gr_line(x1,y2-1,x1+bracket_width,y2-1);
116 gr_line(x2,y2-1,x2-bracket_width,y2-1);
121 gr_line(x1,y1+2,x1,y1+bracket_height);
122 gr_line(x1,y2-2,x1,y2-bracket_height);
123 gr_line(x1+1,y1+2,x1+1,y1+bracket_height);
124 gr_line(x1+1,y2-2,x1+1,y2-bracket_height);
126 gr_line(x1,y1+1,x1,y1+bracket_height);
127 gr_line(x1,y2-1,x1,y2-bracket_height);
132 gr_line(x2,y1+2,x2,y1+bracket_height);
133 gr_line(x2,y2-2,x2,y2-bracket_height);
134 gr_line(x2-1,y1+2,x2-1,y1+bracket_height);
135 gr_line(x2-1,y2-2,x2-1,y2-bracket_height);
137 gr_line(x2,y1+1,x2,y1+bracket_height);
138 gr_line(x2,y2-1,x2,y2-bracket_height);
152 float bracket_width = width/4.0f;
153 float bracket_height = height/4.0f;
158 if ( dash_width < 1 ) {
166 if ( dash_height < 1 ) {
171 int dash_x1, dash_x2, dash_y1, dash_y2;
180 gr_line(dash_x1, y1, dash_x1+(dash_width-1), y1);
181 gr_line(dash_x2, y1, dash_x2-(dash_width-1), y1);
184 gr_line(dash_x1, y2, dash_x1+(dash_width-1), y2);
185 gr_line(dash_x2, y2, dash_x2-(dash_width-1), y2);
187 dash_x1 += dash_width*2;
188 dash_x2 -= dash_width*2;
191 gr_line(x1, dash_y1, x1, dash_y1+(dash_height-1));
192 gr_line(x1, dash_y2, x1, dash_y2-(dash_height-1));
195 gr_line(x2, dash_y1, x2, dash_y1+(dash_height-1));
196 gr_line(x2, dash_y2, x2, dash_y2-(dash_height-1));
198 dash_y1 += dash_height*2;
199 dash_y2 -= dash_height*2;
212 int center_x, center_y;
213 int x_delta, y_delta;
215 float side_len, bracket_len;
220 half_width =
fl2i( width/2.0
f + 0.5
f );
221 half_height =
fl2i( height/2.0
f +0.5
f );
224 bracket_len = side_len / 8;
226 x_delta =
fl2i(bracket_len * width / side_len + 0.5
f);
227 y_delta =
fl2i(bracket_len * height / side_len + 0.5
f);
230 center_x = x1 + half_width;
231 center_y = y1 + half_height;
234 gr_gradient(center_x - x_delta, y1 + y_delta,center_x, y1);
235 gr_gradient(x1 + x_delta, center_y - y_delta, x1, center_y);
238 gr_gradient(center_x + x_delta, y1 + y_delta,center_x, y1);
239 gr_gradient(x2 - x_delta, center_y - y_delta, x2, center_y);
242 gr_gradient(x1 + x_delta, center_y + y_delta, x1, center_y);
243 gr_gradient(center_x - x_delta, y2 - y_delta, center_x, y2);
246 gr_gradient(x2 - x_delta, center_y + y_delta, x2, center_y);
247 gr_gradient(center_x + x_delta, y2 - y_delta, center_x, y2);
253 int center_x, center_y;
254 int x_delta, y_delta;
256 float side_len, bracket_len;
261 half_width =
fl2i( width/2.0
f + 0.5
f);
262 half_height =
fl2i( height/2.0
f + 0.5
f);
265 bracket_len = side_len / 8;
267 x_delta =
fl2i(bracket_len * width / side_len + 0.5
f);
268 y_delta =
fl2i(bracket_len * height / side_len + 0.5
f);
270 center_x = x1 + half_width;
271 center_y = y1 + half_height;
274 gr_line(center_x - x_delta, y1 + y_delta,center_x, y1);
275 gr_line(x1 + x_delta, center_y - y_delta, x1, center_y);
278 gr_line(center_x + x_delta, y1 + y_delta,center_x, y1);
279 gr_line(x2 - x_delta, center_y - y_delta, x2, center_y);
282 gr_line(x1 + x_delta, center_y + y_delta, x1, center_y);
283 gr_line(center_x - x_delta, y2 - y_delta, center_x, y2);
286 gr_line(x2 - x_delta, center_y + y_delta, x2, center_y);
287 gr_line(center_x + x_delta, y2 - y_delta, center_x, y2);
290 gr_line(center_x-x_delta, center_y-y_delta, center_x+x_delta, center_y+y_delta);
291 gr_line(center_x-x_delta, center_y+y_delta, center_x+x_delta, center_y-y_delta);
297 void draw_bounding_brackets_subobject()
310 Assert(target_objnum != -1);
311 targetp = &
Objects[target_objnum];
324 int hud_subtarget_w, hud_subtarget_h, bound_rc;
330 hud_subtarget_w = x2-x1+1;
335 hud_subtarget_h = y2-y1+1;
388 float displayed_distance;
401 sprintf(text_dist,
"%d",
fl2i(displayed_distance+0.5
f));
406 if ( HUD_drew_selection_bracket_on_target ) {
410 gr_string(x - w+2, y+y_delta, text_dist);
422 void draw_bounding_brackets(
int x1,
int y1,
int x2,
int y2,
int w_correction,
int h_correction,
float distance,
int target_objnum)
426 if ( ( x1 < 0 && x2 < 0 ) || ( y1 < 0 && y2 < 0 ) )
460 if ( distance > 0 ) {
468 if (Ships_attacking_bitmap == -1){
472 if (Ships_attacking_bitmap == -1) {
487 if (num_attacking > k) {
490 num_blips = num_attacking-k;
495 if (Ships_attacking_bitmap >= 0) {
499 for (i=0; i<num_blips; i++) {
510 if(Cmdline_targetinfo && (target_objnum != -1))
512 object* t_objp = &
Objects[target_objnum];
513 const char* tinfo_name = NULL;
514 const char* tinfo_class = NULL;
524 tinfo_name = temp_name;
525 tinfo_class = temp_class;
534 sprintf(&temp_name[strlen(temp_name)],
" (%s)", temp_callsign);
544 tinfo_name =
XSTR(
"Debris", 348);
549 tinfo_name = temp_name;
557 tinfo_name =
NOX(
"Asteroid");
560 tinfo_name =
XSTR(
"Debris", 348);
565 if(jnp->GetSCPObject() == t_objp)
569 strcpy_s(temp_name, jnp->GetName());
571 tinfo_name = temp_name;
595 Assertion(subsys != NULL,
"Invalid subsystem pointer passed to draw_subsys_brackets!");
604 Assert(target_objnum != -1);
605 targetp = &
Objects[target_objnum];
618 int hud_subtarget_w, hud_subtarget_h, bound_rc;
624 hud_subtarget_w = x2-x1+1;
629 hud_subtarget_h = y2-y1+1;
649 if ( hud_subtarget_w < min_width ) {
650 x1 = subobj_x - (min_width>>1);
651 x2 = subobj_x + (min_width>>1);
653 if ( hud_subtarget_h < min_height ) {
654 y1 = subobj_y - (min_height>>1);
655 y2 = subobj_y + (min_height>>1);
685 if (draw_coords !=
nullptr)
758 bool draw_box =
true;
765 switch ( targetp->
type ) {
769 if ( bound_rc != 0 ) {
777 if ( bound_rc != 0 ) {
807 if(jnp->GetSCPObject() == targetp)
811 modelnum = jnp->GetModelNumber();
838 float distance = 0.0f;
839 int target_objnum = -1;
849 renderBoundingBrackets(x1-5, y1-5, x2+5, y2+5, w_correction, h_correction, distance, target_objnum, flags);
875 box_scale =
int(
float(dist)/1000.0
f * 15);
884 gr_string(x-(box_scale+10), y-(box_scale+20),
string);
898 if ( ( x1 < 0 && x2 < 0 ) || ( y1 < 0 && y2 < 0 ) )
935 if ( distance > 0 ) {
940 if ( (target_objnum != -1) ) {
953 if (num_attacking > k) {
954 int i,
w,
h, num_blips;
956 num_blips = num_attacking-k;
969 for (i=0; i<num_blips; i++) {
981 object* t_objp = &
Objects[target_objnum];
982 const char* tinfo_name = NULL;
983 const char* tinfo_class = NULL;
988 switch(t_objp->
type) {
992 tinfo_name = temp_name;
993 tinfo_class = temp_class;
1001 sprintf(&temp_name[strlen(temp_name)],
" (%s)", temp_callsign);
1008 tinfo_name =
XSTR(
"Debris", 348);
1013 tinfo_name = temp_name;
1020 tinfo_name =
NOX(
"Asteroid");
1023 tinfo_name =
XSTR(
"Debris", 348);
1028 if(jnp->GetSCPObject() == t_objp)
1032 strcpy_s(temp_name, jnp->GetName());
1034 tinfo_name = temp_name;
1063 Assert(target_objnum != -1);
1064 targetp = &
Objects[target_objnum];
1079 int hud_subtarget_w, hud_subtarget_h, bound_rc;
1082 if ( bound_rc != 0 )
1085 hud_subtarget_w = x2-x1+1;
1090 hud_subtarget_h = y2-y1+1;
struct screen3d::@234::@236 xyw
void renderObjectBrackets(object *targetp, color *clr, int w_correction, int h_correction, int flags)
#define HUD_OFFSCREEN_INDICATOR
model_subsystem * system_info
weapon Weapons[MAX_WEAPONS]
char Ships_attack_fname[GR_NUM_RESOLUTIONS][MAX_FILENAME_LEN]
void hud_target_show_dist_on_bracket(int x, int y, float distance, int font_num)
#define TARGET_DISPLAY_DIST
GLfloat GLfloat GLfloat GLfloat h
weapon_info Weapon_info[MAX_WEAPON_TYPES]
void renderNavBrackets(vec3d *nav_pos, vertex *nav_point, color *clr, char *string)
int Min_target_box_height
void hud_num_make_mono(char *num_str, int font_num)
Convert a number string to use mono-spaced 1 character.
asteroid Asteroids[MAX_ASTEROIDS]
int Ships_attacking_bitmap
void _cdecl void void _cdecl void _cdecl Warning(char *filename, int line, SCP_FORMAT_STRING const char *format,...) SCP_FORMAT_STRING_ARGS(3
void hud_stuff_ship_name(char *ship_name_text, ship *shipp)
#define ASTEROID_TYPE_SMALL
#define GR_NUM_RESOLUTIONS
__inline void gr_string(int x, int y, const char *string, int resize_mode=GR_RESIZE_FULL)
int subobj_find_2d_bound(float radius, matrix *orient, vec3d *pos, int *x1, int *y1, int *x2, int *y2)
int bm_get_info(int handle, int *w, int *h, ubyte *flags, int *nframes, int *fps)
Gets info on the bitmap indexed by handle.
__inline void gr_gradient(int x1, int y1, int x2, int y2, int resize_mode=GR_RESIZE_FULL)
int hud_gauge_active(int gauge_index)
Determine if the specified HUD gauge should be displayed.
void initBitmaps(char *fname)
int model_find_2d_bound_min(int model_num, matrix *orient, vec3d *pos, int *x1, int *y1, int *x2, int *y2)
int ship_subsystem_in_sight(object *objp, ship_subsys *subsys, vec3d *eye_pos, vec3d *subsys_pos, int do_facing_check, float *dot_out, vec3d *vec_out)
#define Assertion(expr, msg,...)
ship_subsys * targeted_subsys
#define HUD_ATTACKING_TARGET_COUNT
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)
SCP_vector< target_display_info > target_display_list
void gr_set_color_fast(color *dst)
SCP_list< CJumpNode > Jump_nodes
int Min_subtarget_box_width
int Min_target_box_height[GR_NUM_RESOLUTIONS]
typedef int(SCP_EXT_CALLCONV *SCPDLL_PFVERSION)(SCPDLL_Version *)
#define GR_AABITMAP(a, b, c)
void draw_brackets_square_quick(int x1, int y1, int x2, int y2, int thick)
void initMinSubTargetBoxSizes(int w, int h)
sprintf(buf,"(%f,%f,%f)", v3->xyz.x, v3->xyz.y, v3->xyz.z)
#define IFF_COLOR_MESSAGE
ubyte g3_rotate_vertex(vertex *dest, const vec3d *src)
#define TARGET_DISPLAY_SUBSYS
void draw_brackets_dashed_square_quick(int x1, int y1, int x2, int y2)
#define TARGET_DISPLAY_DOTS
#define TARGET_DISPLAY_CLASS
int HUD_drew_selection_bracket_on_target
int g3_project_vertex(vertex *point)
debris Debris[MAX_DEBRIS_PIECES]
int targeted_subsys_parent
int Min_subtarget_box_height[GR_NUM_RESOLUTIONS]
int iff_x_attacks_y(int team_x, int team_y)
GLint GLint GLint GLint GLint x
object Objects[MAX_OBJECTS]
const char * XSTR(const char *str, int index)
bool end_string_at_first_hash_symbol(char *src)
#define ASTEROID_TYPE_MEDIUM
void draw_brackets_diamond_quick(int x1, int y1, int x2, int y2)
GLuint const GLchar * name
__inline void gr_line(int x1, int y1, int x2, int y2, int resize_mode=GR_RESIZE_FULL)
color * iff_get_color(int color_index, int is_bright)
int num_ships_attacking(int target_objnum)
int bm_load(const char *real_filename)
Loads a bitmap so we can draw with it later.
bool gr_resize_screen_pos(int *x, int *y, int *w, int *h, int resize_mode)
#define HUD_OBJECT_BRACKETS
typedef float(SCP_EXT_CALLCONV *SCPTRACKIR_PFFLOATVOID)()
GLint GLsizei GLsizei height
float vm_vec_dist_quick(const vec3d *v0, const vec3d *v1)
GLubyte GLubyte GLubyte GLubyte w
#define ASTEROID_TYPE_LARGE
#define TARGET_DISPLAY_NAME
void gr_get_string_size(int *w, int *h, const char *text, int len=9999)
SCP_vector< ship_info > Ship_info
void gr_reset_screen_scale()
int submodel_find_2d_bound_min(int model_num, int submodel, matrix *orient, vec3d *pos, int *x1, int *y1, int *x2, int *y2)
float Hud_unit_multiplier
vec3d * get_subsystem_world_pos(object *parent_obj, ship_subsys *subsys, vec3d *world_pos)
bool gr_unsize_screen_pos(int *x, int *y, int *w, int *h, int resize_mode)
int Min_subtarget_box_height
void hud_stuff_ship_class(char *ship_class_text, ship *shipp)
void renderBoundingBrackets(int x1, int y1, int x2, int y2, int w_correction, int h_correction, float distance, int target_objnum, int flags)
void draw_brackets_diamond(int x1, int y1, int x2, int y2)
void initMinTargetBoxSizes(int w, int h)
float hud_find_target_distance(object *targetee, object *targeter)
void hud_stuff_ship_callsign(char *ship_callsign_text, ship *shipp)
int draw_subsys_brackets(ship_subsys *subsys, int min_width, int min_height, bool draw, bool set_color, int *draw_coords)
int Min_target_box_width[GR_NUM_RESOLUTIONS]
void draw_brackets_square(int x1, int y1, int x2, int y2, int resize_mode)
SCP_vector< asteroid_info > Asteroid_info
bool ship_subsys_takes_damage(ship_subsys *ss)
void hud_set_iff_color(object *objp, int is_bright)
Will set the color to the IFF color based on the team.
int Min_subtarget_box_width[GR_NUM_RESOLUTIONS]
void render(float frametime)
#define g3_start_frame(zbuffer_flag)
void renderBoundingBracketsSubobject()