1
0
Fork 0

Incorporated Michele America's hud changes.

This commit is contained in:
curt 1998-02-23 20:18:28 +00:00
parent e798c59696
commit bc841826f0

View file

@ -268,7 +268,7 @@ static void drawscale( HUD_scale * pscale )
// Work through from bottom to top of scale. Calculating where to put // Work through from bottom to top of scale. Calculating where to put
// minor and major ticks. // minor and major ticks.
for( i = vmin; i <= vmax; i++ ) for( i = (int)(vmin); i <= (int)(vmax); i++ )
{ {
if( pscale->sub_type == LIMIT ) { // Don't show ticks if( pscale->sub_type == LIMIT ) { // Don't show ticks
condition = (i >= pscale->minimum_value); // below Minimum value. condition = (i >= pscale->minimum_value); // below Minimum value.
@ -281,7 +281,7 @@ static void drawscale( HUD_scale * pscale )
if( condition ) // Show a tick if necessary if( condition ) // Show a tick if necessary
{ {
// Calculate the location of this tick // Calculate the location of this tick
marker_y = pscale->scrn_pos.bottom + (i - vmin) * pscale->factor; marker_y = (int)(pscale->scrn_pos.bottom + (i - vmin) * pscale->factor);
// Block calculation artifact from drawing ticks below min coordinate. // Block calculation artifact from drawing ticks below min coordinate.
// Calculation here accounts for text height. // Calculation here accounts for text height.
@ -312,6 +312,9 @@ static void drawscale( HUD_scale * pscale )
if( disp_val < 0) { if( disp_val < 0) {
disp_val += pscale->modulo; disp_val += pscale->modulo;
} }
if( disp_val == pscale->modulo ) {
disp_val = 0;
}
} }
else { else {
disp_val = i; disp_val = i;
@ -384,7 +387,7 @@ static void drawscale( HUD_scale * pscale )
} }
} }
for( i = vmin; i <= vmax; i++ ) // increment is faster than addition for( i = (int)(vmin); i <= (int)(vmax); i++ ) // increment is faster than addition
{ {
if( pscale->sub_type == LIMIT ) { if( pscale->sub_type == LIMIT ) {
condition = (i >= pscale->minimum_value); condition = (i >= pscale->minimum_value);
@ -395,7 +398,7 @@ static void drawscale( HUD_scale * pscale )
} }
} }
if( condition ) { if( condition ) {
marker_x = pscale->scrn_pos.left + (i - vmin) * pscale->factor; marker_x = (int)(pscale->scrn_pos.left + (i - vmin) * pscale->factor);
if( (i%pscale->div_min) == 0 ) { if( (i%pscale->div_min) == 0 ) {
if( pscale->orientation == TOP ) if( pscale->orientation == TOP )
{ {
@ -418,6 +421,9 @@ static void drawscale( HUD_scale * pscale )
if( disp_val < 0) { if( disp_val < 0) {
disp_val += pscale->modulo; disp_val += pscale->modulo;
} }
if( disp_val == pscale->modulo ) {
disp_val = 0;
}
} }
else { else {
disp_val = i; disp_val = i;
@ -483,12 +489,12 @@ static void drawladder( HUD_ladder *ladder )
factor = (scr_max-scr_min)/ladder->width_units; factor = (scr_max-scr_min)/ladder->width_units;
for( i=vmin; i<=vmax; i+=1 ) for( i=(int)(vmin); i<=(int)(vmax); i+=1 )
{ {
condition = 1; condition = 1;
if( condition ) if( condition )
{ {
marker_y = scr_min+(i-vmin)*factor; marker_y = (int)(scr_min+(i-vmin)*factor);
if( i%ladder->div_units==0 ) if( i%ladder->div_units==0 )
{ {
sprintf( TextLadder, "%d", i ); sprintf( TextLadder, "%d", i );
@ -503,18 +509,18 @@ static void drawladder( HUD_ladder *ladder )
y_ini = marker_y; y_ini = marker_y;
x_end = ladder->scrn_pos.x + ladder->scr_width/2; x_end = ladder->scrn_pos.x + ladder->scr_width/2;
y_end = marker_y; y_end = marker_y;
new_x_ini = ladder->scrn_pos.x + \ new_x_ini = (int)(ladder->scrn_pos.x + \
(x_ini - ladder->scrn_pos.x) * cos(roll_value) - \ (x_ini - ladder->scrn_pos.x) * cos(roll_value) - \
(y_ini - ladder->scrn_pos.y) * sin(roll_value); (y_ini - ladder->scrn_pos.y) * sin(roll_value));
new_y_ini = ladder->scrn_pos.y + \ new_y_ini = (int)(ladder->scrn_pos.y + \
(x_ini - ladder->scrn_pos.x) * sin(roll_value) + \ (x_ini - ladder->scrn_pos.x) * sin(roll_value) + \
(y_ini - ladder->scrn_pos.y) * cos(roll_value); (y_ini - ladder->scrn_pos.y) * cos(roll_value));
new_x_end = ladder->scrn_pos.x + \ new_x_end = (int)(ladder->scrn_pos.x + \
(x_end - ladder->scrn_pos.x) * cos(roll_value) - \ (x_end - ladder->scrn_pos.x) * cos(roll_value) - \
(y_end - ladder->scrn_pos.y) * sin(roll_value); (y_end - ladder->scrn_pos.y) * sin(roll_value));
new_y_end = ladder->scrn_pos.y + \ new_y_end = (int)(ladder->scrn_pos.y + \
(x_end - ladder->scrn_pos.x) * sin(roll_value) + \ (x_end - ladder->scrn_pos.x) * sin(roll_value) + \
(y_end - ladder->scrn_pos.y) * cos(roll_value); (y_end - ladder->scrn_pos.y) * cos(roll_value));
if( i >= 0 ) if( i >= 0 )
{ {
@ -545,18 +551,18 @@ static void drawladder( HUD_ladder *ladder )
y_ini = marker_y; y_ini = marker_y;
x_end = ladder->scrn_pos.x - ladder->scr_width/2 + ladder->scr_hole/2; x_end = ladder->scrn_pos.x - ladder->scr_width/2 + ladder->scr_hole/2;
y_end = marker_y; y_end = marker_y;
new_x_ini = ladder->scrn_pos.x+ \ new_x_ini = (int)(ladder->scrn_pos.x+ \
(x_ini - ladder->scrn_pos.x) * cos(roll_value) -\ (x_ini - ladder->scrn_pos.x) * cos(roll_value) -\
(y_ini - ladder->scrn_pos.y) * sin(roll_value); (y_ini - ladder->scrn_pos.y) * sin(roll_value));
new_y_ini = ladder->scrn_pos.y+ \ new_y_ini = (int)(ladder->scrn_pos.y+ \
(x_ini - ladder->scrn_pos.x) * sin(roll_value) +\ (x_ini - ladder->scrn_pos.x) * sin(roll_value) +\
(y_ini - ladder->scrn_pos.y) * cos(roll_value); (y_ini - ladder->scrn_pos.y) * cos(roll_value));
new_x_end = ladder->scrn_pos.x+ \ new_x_end = (int)(ladder->scrn_pos.x+ \
(x_end - ladder->scrn_pos.x) * cos(roll_value) -\ (x_end - ladder->scrn_pos.x) * cos(roll_value) -\
(y_end - ladder->scrn_pos.y) * sin(roll_value); (y_end - ladder->scrn_pos.y) * sin(roll_value));
new_y_end = ladder->scrn_pos.y+ \ new_y_end = (int)(ladder->scrn_pos.y+ \
(x_end - ladder->scrn_pos.x) * sin(roll_value) +\ (x_end - ladder->scrn_pos.x) * sin(roll_value) +\
(y_end - ladder->scrn_pos.y) * cos(roll_value); (y_end - ladder->scrn_pos.y) * cos(roll_value));
if( i >= 0 ) if( i >= 0 )
{ {
@ -582,18 +588,18 @@ static void drawladder( HUD_ladder *ladder )
x_end = ladder->scrn_pos.x + ladder->scr_width/2 + 10; x_end = ladder->scrn_pos.x + ladder->scr_width/2 + 10;
} }
y_end = marker_y; y_end = marker_y;
new_x_ini = ladder->scrn_pos.x + \ new_x_ini = (int)(ladder->scrn_pos.x + \
(x_ini-ladder->scrn_pos.x)*cos(roll_value) -\ (x_ini-ladder->scrn_pos.x)*cos(roll_value) -\
(y_ini-ladder->scrn_pos.y)*sin(roll_value); (y_ini-ladder->scrn_pos.y)*sin(roll_value));
new_y_ini = ladder->scrn_pos.y + \ new_y_ini = (int)(ladder->scrn_pos.y + \
(x_ini-ladder->scrn_pos.x)*sin(roll_value) +\ (x_ini-ladder->scrn_pos.x)*sin(roll_value) +\
(y_ini-ladder->scrn_pos.y)*cos(roll_value); (y_ini-ladder->scrn_pos.y)*cos(roll_value));
new_x_end = ladder->scrn_pos.x + \ new_x_end = (int)(ladder->scrn_pos.x + \
(x_end-ladder->scrn_pos.x)*cos(roll_value) -\ (x_end-ladder->scrn_pos.x)*cos(roll_value) -\
(y_end-ladder->scrn_pos.y)*sin(roll_value); (y_end-ladder->scrn_pos.y)*sin(roll_value));
new_y_end = ladder->scrn_pos.y + \ new_y_end = (int)(ladder->scrn_pos.y + \
(x_end-ladder->scrn_pos.x)*sin(roll_value) +\ (x_end-ladder->scrn_pos.x)*sin(roll_value) +\
(y_end-ladder->scrn_pos.y)*cos(roll_value); (y_end-ladder->scrn_pos.y)*cos(roll_value));
if( i >= 0 ) if( i >= 0 )
{ {
@ -648,21 +654,33 @@ static void drawhorizon( HUD_horizon *horizon )
int d_top_x, d_top_y; int d_top_x, d_top_y;
int d_left_x, d_left_y; int d_left_x, d_left_y;
int inc_b_x, inc_b_y;
int inc_r_x, inc_r_y;
int inc_t_x, inc_t_y;
int inc_l_x, inc_l_y;
// struct fgFLIGHT *f = &current_aircraft.flight; // struct fgFLIGHT *f = &current_aircraft.flight;
double sin_bank, cos_bank; double sin_bank, cos_bank;
double bank_angle, sideslip_angle; double bank_angle, sideslip_angle;
double sin_sideslip, cos_sideslip;
double ss_const; // sideslip angle pixels per rad double ss_const; // sideslip angle pixels per rad
bank_angle = (*horizon->load_roll)(); // Need roll limit! bank_angle = (*horizon->load_roll)(); // Roll limit +/- 30 degrees
sideslip_angle = (*horizon->load_sideslip)(); if( bank_angle < -FG_PI_2/3 ) {
bank_angle = -FG_PI_2/3;
}else if( bank_angle > FG_PI_2/3 ) {
bank_angle = FG_PI_2/3;
}
sideslip_angle = (*horizon->load_sideslip)(); // Sideslip limit +/- 5 degrees
if( sideslip_angle < -FG_PI/36.0 ) {
sideslip_angle = -FG_PI/36.0;
} else if( sideslip_angle > FG_PI/36.0 ) {
sideslip_angle = FG_PI/36.0;
}
// sin_bank = sin( FG_2PI-FG_Phi ); // sin_bank = sin( FG_2PI-FG_Phi );
// cos_bank = cos( FG_2PI-FG_Phi ); // cos_bank = cos( FG_2PI-FG_Phi );
sin_bank = sin(FG_2PI-bank_angle); sin_bank = sin(FG_2PI-bank_angle);
cos_bank = cos(FG_2PI-bank_angle); cos_bank = cos(FG_2PI-bank_angle);
sin_sideslip = sin(sideslip_angle);
cos_sideslip = cos(sideslip_angle);
x_inc1 = (int)(horizon->scr_width * cos_bank); x_inc1 = (int)(horizon->scr_width * cos_bank);
y_inc1 = (int)(horizon->scr_width * sin_bank); y_inc1 = (int)(horizon->scr_width * sin_bank);
@ -672,22 +690,31 @@ static void drawhorizon( HUD_horizon *horizon )
x_t_inc1 = (int)(horizon->tee_height * sin_bank); x_t_inc1 = (int)(horizon->tee_height * sin_bank);
y_t_inc1 = (int)(horizon->tee_height * cos_bank); y_t_inc1 = (int)(horizon->tee_height * cos_bank);
d_bottom_x = horizon->scrn_pos.x; d_bottom_x = 0;
d_bottom_y = horizon->scrn_pos.y-horizon->scr_hole; d_bottom_y = (int)(-horizon->scr_hole);
d_right_x = horizon->scrn_pos.x+horizon->scr_hole; d_right_x = (int)(horizon->scr_hole);
d_right_y = horizon->scrn_pos.y; d_right_y = 0;
d_top_x = horizon->scrn_pos.x; d_top_x = 0;
d_top_y = horizon->scrn_pos.y+horizon->scr_hole; d_top_y = (int)(horizon->scr_hole);
d_left_x = horizon->scrn_pos.x-horizon->scr_hole; d_left_x = (int)(-horizon->scr_hole);
d_left_y = horizon->scrn_pos.y; d_left_y = 0;
ss_const = (FG_PI_2/2)/(2*horizon->scr_width-2*horizon->scr_hole); ss_const = (horizon->scr_width*2)/(FG_2PI/36.0);// width represents 10 degrees
d_bottom_x += sideslip_angle*ss_const; // horizon->scr_width-horizon->scr_hole; d_bottom_x += (int)(sideslip_angle*ss_const);
d_right_x += sideslip_angle*ss_const; // horizon->scr_width-horizon->scr_hole; d_right_x += (int)(sideslip_angle*ss_const);
d_left_x += sideslip_angle*ss_const; // horizon->scr_width-horizon->scr_hole; d_left_x += (int)(sideslip_angle*ss_const);
d_top_x += sideslip_angle*ss_const; // horizon->scr_width-horizon->scr_hole; d_top_x += (int)(sideslip_angle*ss_const);
inc_b_x = (int)(d_bottom_x*cos_bank-d_bottom_y*sin_bank);
inc_b_y = (int)(d_bottom_x*sin_bank+d_bottom_y*cos_bank);
inc_r_x = (int)(d_right_x*cos_bank-d_right_y*sin_bank);
inc_r_y = (int)(d_right_x*sin_bank+d_right_y*cos_bank);
inc_t_x = (int)(d_top_x*cos_bank-d_top_y*sin_bank);
inc_t_y = (int)(d_top_x*sin_bank+d_top_y*cos_bank);
inc_l_x = (int)(d_left_x*cos_bank-d_left_y*sin_bank);
inc_l_y = (int)(d_left_x*sin_bank+d_left_y*cos_bank);
if( horizon->scr_hole == 0 ) if( horizon->scr_hole == 0 )
{ {
drawOneLine( horizon->scrn_pos.x - x_inc1, horizon->scrn_pos.y - y_inc1, \ drawOneLine( horizon->scrn_pos.x - x_inc1, horizon->scrn_pos.y - y_inc1, \
@ -708,10 +735,39 @@ static void drawhorizon( HUD_horizon *horizon )
horizon->scrn_pos.x - x_inc2 + x_t_inc1, horizon->scrn_pos.y - y_inc2 - y_t_inc1 ); horizon->scrn_pos.x - x_inc2 + x_t_inc1, horizon->scrn_pos.y - y_inc2 - y_t_inc1 );
// draw sideslip diamond (it is not yet positioned correctly ) // draw sideslip diamond (it is not yet positioned correctly )
drawOneLine( d_bottom_x, d_bottom_y, d_right_x, d_right_y ) drawOneLine( horizon->scrn_pos.x + inc_b_x, \
drawOneLine( d_right_x, d_right_y, d_top_x, d_top_y ); horizon->scrn_pos.y + inc_b_y, \
drawOneLine( d_top_x, d_top_y, d_left_x, d_left_y ); horizon->scrn_pos.x + inc_r_x, \
drawOneLine( d_left_x, d_left_y, d_bottom_x, d_bottom_y ); horizon->scrn_pos.y + inc_r_y )
drawOneLine( horizon->scrn_pos.x + inc_r_x, \
horizon->scrn_pos.y + inc_r_y, \
horizon->scrn_pos.x + inc_t_x, \
horizon->scrn_pos.y + inc_t_y );
drawOneLine( horizon->scrn_pos.x + inc_t_x, \
horizon->scrn_pos.y + inc_t_y, \
horizon->scrn_pos.x + inc_l_x, \
horizon->scrn_pos.y + inc_l_y );
drawOneLine( horizon->scrn_pos.x + inc_l_x, \
horizon->scrn_pos.y + inc_l_y, \
horizon->scrn_pos.x + inc_b_x, \
horizon->scrn_pos.y + inc_b_y );
/* drawOneLine( horizon->scrn_pos.x + inc_b_x, \
horizon->scrn_pos.y + inc_b_y, \
horizon->scrn_pos.x + inc_r_x, \
horizon->scrn_pos.y + inc_r_y )
drawOneLine( horizon->scrn_pos.x + inc_r_x, \
horizon->scrn_pos.y + inc_r_y, \
horizon->scrn_pos.x + inc_t_x, \
horizon->scrn_pos.y + inc_t_y );
drawOneLine( horizon->scrn_pos.x + inc_t_x, \
horizon->scrn_pos.y + inc_t_y, \
horizon->scrn_pos.x + inc_l_x, \
horizon->scrn_pos.y + inc_l_y );
drawOneLine( horizon->scrn_pos.x + inc_l_x, \
horizon->scrn_pos.y + inc_l_y, \
horizon->scrn_pos.x + inc_b_x, \
horizon->scrn_pos.y + inc_b_y ); */
} }
// drawControlSurfaces() // drawControlSurfaces()
@ -1463,9 +1519,12 @@ void fgHUDSetBrightness( Hptr hud, int brightness )
} }
/* $Log$ /* $Log$
/* Revision 1.18 1998/02/21 14:53:10 curt /* Revision 1.19 1998/02/23 20:18:28 curt
/* Added Charlie's HUD changes. /* Incorporated Michele America's hud changes.
/* /*
* Revision 1.18 1998/02/21 14:53:10 curt
* Added Charlie's HUD changes.
*
* Revision 1.17 1998/02/20 00:16:21 curt * Revision 1.17 1998/02/20 00:16:21 curt
* Thursday's tweaks. * Thursday's tweaks.
* *