/************************************************************************** * hud.hxx -- hud defines and prototypes (initial draft) * * Written by Michele America, started September 1997. * * Copyright (C) 1997 Michele F. America - nomimarketing@mail.telepac.pt * * 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, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * * $Id$ * (Log is kept at end of this file) **************************************************************************/ #ifndef _HUD_HXX #define _HUD_HXX #ifndef __cplusplus # error This library requires C++ #endif #include #include #include // View mode definitions enum VIEW_MODES { HUD_VIEW, PANEL_VIEW, CHASE_VIEW, TOWER_VIEW }; // Hud general constants #define DAY 1 #define NIGHT 2 #define BRT_DARK 3 #define BRT_MEDIUM 4 #define BRT_LIGHT 5 #define SIZE_SMALL 6 #define SIZE_LARGE 7 // Instrument types #define ARTIFICIAL_HORIZON 1 #define SCALE 2 #define LADDER 3 #define LABEL 4 // Scale constants #define HORIZONTAL 1 #define TOP 2 #define BOTTOM 3 #define VERTICAL 4 #define LEFT 5 #define RIGHT 6 #define LIMIT 7 #define NOLIMIT 8 #define ROUNDROB 9 // Label constants #define SMALL 1 #define LARGE 2 #define BLINK 3 #define NOBLINK 4 #define LEFT_JUST 5 #define CENTER_JUST 6 #define RIGHT_JUST 7 // Ladder constants #define NONE 1 #define UPPER_LEFT 2 #define UPPER_CENTER 3 #define UPPER_RIGHT 4 #define CENTER_RIGHT 5 #define LOWER_RIGHT 6 #define LOWER_CENTER 7 #define LOWER_LEFT 8 #define CENTER_LEFT 9 #define SOLID_LINES 10 #define DASHED_LINES 11 #define DASHED_NEG_LINES 12 // Ladder orientaion // #define HUD_VERTICAL 1 // #define HUD_HORIZONTAL 2 // #define HUD_FREEFLOAT 3 // Ladder orientation modes // #define HUD_LEFT 1 // #define HUD_RIGHT 2 // #define HUD_TOP 1 // #define HUD_BOTTOM 2 // #define HUD_V_LEFT 1 // #define HUD_V_RIGHT 2 // #define HUD_H_TOP 1 // #define HUD_H_BOTTOM 2 // Ladder sub-types // #define HUD_LIM 1 // #define HUD_NOLIM 2 // #define HUD_CIRC 3 // #define HUD_INSTR_LADDER 1 // #define HUD_INSTR_CLADDER 2 // #define HUD_INSTR_HORIZON 3 // #define HUD_INSTR_LABEL 4 // The following structs will become classes with a derivation from // an ABC instrument_pack. Eventually the instruments may well become // dll's. This would open the instrumentation issue to all commers. // // Methods Needed: // Constructor() // Initialization(); // For dynamic scenario settups? // Update(); // Follow the data changes. // Repaint(); // Respond to uncover/panel repaints. // Break(); // Show a frown. // Fix(); // Return to normal appearance and function. // Night_Day(); // Illumination changes appearance/bitmaps. // // CLO 2/21/98 - added to fix compile error typedef struct { int x; int y; } FG_POINT; // CLO 2/21/98 - added to fix compile error typedef struct { int left; int right; int top; int bottom; } FG_RECT; typedef struct { // Parametric defined members int type; int sub_type; int div_min; int div_max; int orientation; int minimum_value; int maximum_value; int width_units; int modulo; // for compass, etc. Set to 0 for non_modulo scales. double (*load_value)( void ); // Pre-calculated members. int scr_span; int mid_scr; FG_RECT scrn_pos; // Screen rectangle for inicator // Replaces previous parameters as: // scr_pos -> left,bottom // scr_max -> top, right // scr_min -> left,bottom double factor; double half_width_units; }HUD_scale, *pHUDscale; typedef struct { int type; FG_RECT position; int div_min; int div_max; int orientation; int label_position; int width_units; int modulo; // for compass, etc. Set to 0 for non_modulo scales. double (*load_value)( void ); }HUD_circular_scale, *pHUD_circscale; typedef struct { int type; FG_POINT scrn_pos; int scr_width; int scr_height; int scr_hole; int div_units; int label_position; int width_units; double (*load_roll)( void ); double (*load_pitch)( void ); }HUD_ladder, *pHUDladder; typedef struct { int scr_min; int scr_max; int div_min; int div_max; int orientation; int label_position; int width_units; double (*load_value)( void ); } HUD_circular_ladder, *pHUDcircladder; #define HORIZON_FIXED 1 #define HORIZON_MOVING 2 typedef struct{ int type; FG_POINT scrn_pos; int scr_width; int scr_hole; int tee_height; double (*load_roll)( void ); double (*load_sideslip)( void ); } HUD_horizon, *pHUDhorizon; typedef struct { FG_POINT scrn_pos; double(*load_value)(void); } HUD_control_surfaces, *pHUDControlSurfaces; typedef struct { FG_POINT scrn_pos; // ctrl_x, ctrl_y int ctrl_length; int orientation; int alignment; int min_value; int max_value; int width_units; double (*load_value)(void); } HUD_control, *pHUDControl; #define LABEL_COUNTER 1 #define LABEL_WARNING 2 typedef struct { int type; FG_POINT scrn_pos; int size; int blink; int justify; char *pre_str; char *post_str; char *format; double (*load_value)( void ); // pointer to routine to get the data } HUD_label, *pHUDlabel; // Removed union HUD_instr_data to evolve this to oop code. typedef enum{ HUDno_instr, HUDscale, HUDcirc_scale, HUDladder, HUDcirc_ladder, HUDhorizon, HUDlabel, HUDcontrol_surfaces, HUDcontrol } hudinstype; typedef struct HUD_INSTR_STRUCT{ hudinstype type; int sub_type; int orientation; void *instr; // For now we will cast this pointer accoring to the value // of the type member. struct HUD_INSTR_STRUCT *next; } HUD_instr, *HIptr; typedef struct { int code; HIptr instruments; int status; int time_of_day; int brightness; int size; // possibly another name for this ? (michele) }HUD, *Hptr; Hptr fgHUDInit ( fgAIRCRAFT *cur_aircraft ); void fgHUDSetTimeMode( Hptr hud, int time_of_day ); void fgHUDSetBrightness( Hptr hud, int brightness ); Hptr fgHUDAddHorizon( Hptr hud, int x_pos, int y_pos, int length, int hole_len, int tee_height, double (*load_roll)( void ), double (*load_sideslip)( void ) ); Hptr fgHUDAddScale ( Hptr hud, \ int type, \ int subtype, \ int scr_pos, \ int scr_min, \ int scr_max, \ int div_min, \ int div_max, \ int orientation, \ int min_value, \ int max_value, \ int width_units, \ int modulus, \ double (*load_value)( void ) ); Hptr fgHUDAddLabel ( Hptr hud, \ int x_pos, \ int y_pos, \ int size, \ int blink, \ int justify, \ char *pre_str, \ char *post_str, \ char *format, \ double (*load_value)( void ) ); Hptr fgHUDAddLadder ( Hptr hud, \ int x_pos, \ int y_pos, \ int scr_width, \ int scr_height, \ int hole_len, \ int div_units, \ int label_pos, \ int max_value, \ double (*load_roll)( void ), \ double (*load_pitch)( void ) ); Hptr fgHUDAddControlSurfaces( Hptr hud, \ int x_pos, \ int y_pos, \ double (*load_value)( void) ); Hptr fgHUDAddControl( Hptr hud, \ int ctrl_x, \ int ctrl_y, \ int ctrl_length, \ int orientation, \ int alignment, \ int min_value, \ int max_value, \ int width_units, \ double (*load_value)( void) ); /* Hptr fgHUDAddLadder ( Hptr hud, int scr_min, int scr_max, int div_min, int div_max, \ int orientation, int max_value, double *(load_value); Hptr fgHUDAddCircularLadder( Hptr hud, int scr_min, int scr_max, int div_min, int div_max, \ int max_value, double *(load_value) ); Hptr fgHUDAddNumDisp( Hptr hud, int x_pos, int y_pos, int size, int blink, \ char *pre_str, char *post_str, double *(load_value) ); */ void fgUpdateHUD ( Hptr hud ); void fgUpdateHUD2( Hptr hud ); // Future use? #endif // _HUD_HXX /* $Log$ /* Revision 1.1 1998/04/24 00:45:58 curt /* C++-ifing the code a bit. /* * Revision 1.15 1998/02/23 19:07:57 curt * Incorporated Durk's Astro/ tweaks. Includes unifying the sun position * calculation code between sun display, and other FG sections that use this * for things like lighting. * * Revision 1.14 1998/02/21 14:53:14 curt * Added Charlie's HUD changes. * * Revision 1.13 1998/02/20 00:16:22 curt * Thursday's tweaks. * * Revision 1.12 1998/02/19 13:05:52 curt * Incorporated some HUD tweaks from Michelle America. * Tweaked the sky's sunset/rise colors. * Other misc. tweaks. * * Revision 1.11 1998/02/16 13:38:42 curt * Integrated changes from Charlie Hotchkiss. * * Revision 1.10 1998/02/12 21:59:42 curt * Incorporated code changes contributed by Charlie Hotchkiss * * * Revision 1.8 1998/02/07 15:29:35 curt * Incorporated HUD changes and struct/typedef changes from Charlie Hotchkiss * * * Revision 1.7 1998/02/03 23:20:15 curt * Lots of little tweaks to fix various consistency problems discovered by * Solaris' CC. Fixed a bug in fg_debug.c with how the fgPrintf() wrapper * passed arguments along to the real printf(). Also incorporated HUD changes * by Michele America. * * Revision 1.6 1998/01/22 02:59:30 curt * Changed #ifdef FILE_H to #ifdef _FILE_H * * Revision 1.5 1998/01/19 19:27:01 curt * Merged in make system changes from Bob Kuehne * This should simplify things tremendously. * * Revision 1.4 1998/01/19 18:40:21 curt * Tons of little changes to clean up the code and to remove fatal errors * when building with the c++ compiler. * * Revision 1.3 1997/12/30 16:36:41 curt * Merged in Durk's changes ... * * Revision 1.2 1997/12/10 22:37:40 curt * Prepended "fg" on the name of all global structures that didn't have it yet. * i.e. "struct WEATHER {}" became "struct fgWEATHER {}" * * Revision 1.1 1997/08/29 18:03:22 curt * Initial revision. * */