443 lines
13 KiB
C++
443 lines
13 KiB
C++
/**************************************************************************
|
|
* 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 <Aircraft/aircraft.h>
|
|
#include <Flight/flight.h>
|
|
#include <Controls/controls.h>
|
|
|
|
// 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
|
|
* <chotchkiss@namg.us.anritsu.com>
|
|
*
|
|
* Revision 1.8 1998/02/07 15:29:35 curt
|
|
* Incorporated HUD changes and struct/typedef changes from Charlie Hotchkiss
|
|
* <chotchkiss@namg.us.anritsu.com>
|
|
*
|
|
* 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 <rpk@sgi.com>
|
|
* 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.
|
|
*
|
|
*/
|