Incorporated Michele America's hud changes.
This commit is contained in:
parent
e798c59696
commit
bc841826f0
1 changed files with 114 additions and 55 deletions
169
Cockpit/hud.c
169
Cockpit/hud.c
|
@ -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 = ¤t_aircraft.flight;
|
// struct fgFLIGHT *f = ¤t_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.
|
||||||
*
|
*
|
||||||
|
|
Loading…
Add table
Reference in a new issue