X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FScenery%2Fscenery.hxx;h=4d506e4b709b1ea4877c2216197ecc9a6e1e0c27;hb=0fe90a83dd5df063252c10f50d9f8320e9055637;hp=baf9cce2267062e5e530d26ee509ed04ce6494d3;hpb=1294aed4650ec2aacef27a7fdeb2f4e012516ca0;p=flightgear.git diff --git a/src/Scenery/scenery.hxx b/src/Scenery/scenery.hxx index baf9cce22..4d506e4b7 100644 --- a/src/Scenery/scenery.hxx +++ b/src/Scenery/scenery.hxx @@ -30,11 +30,16 @@ #endif +#include +#include + #include +#include
+ // Define a structure containing global scenery parameters -struct fgSCENERY { +class FGScenery : public FGSubsystem { // center of current scenery chunk Point3D center; @@ -47,22 +52,87 @@ struct fgSCENERY { // elevation of terrain at our current lat/lon (based on the // actual drawn polygons) double cur_elev; -}; - -extern struct fgSCENERY scenery; - -// Initialize the Scenery Management system -int fgSceneryInit( void ); - - -// Tell the scenery manager where we are so it can load the proper -// data, and build the proper structures. -void fgSceneryUpdate(double lon, double lat, double elev); - - -// Render out the current scene -void fgSceneryRender( void ); + // the distance (radius) from the center of the earth to the + // current scenery elevation point + double cur_radius; + + // unit normal at point used to determine current elevation + sgdVec3 cur_normal; + + // SSG scene graph + ssgRoot *scene_graph; + ssgBranch *terrain_branch; + ssgRoot *gnd_lights_root; + ssgRoot *rwy_lights_root; + ssgRoot *taxi_lights_root; + ssgBranch *models_branch; + ssgBranch *aircraft_branch; + +public: + + FGScenery(); + ~FGScenery(); + + // Implementation of FGSubsystem. + void init (); + void bind (); + void unbind (); + void update (double dt); + + inline double get_cur_elev() const { return cur_elev; } + inline void set_cur_elev( double e ) { cur_elev = e; } + + inline Point3D get_center() const { return center; } + inline void set_center( Point3D p ) { center = p; } + + inline Point3D get_next_center() const { return next_center; } + inline void set_next_center( Point3D p ) { next_center = p; } + + inline void set_cur_radius( double r ) { cur_radius = r; } + inline void set_cur_normal( sgdVec3 n ) { sgdCopyVec3( cur_normal, n ); } + + inline ssgRoot *get_scene_graph () const { return scene_graph; } + inline void set_scene_graph (ssgRoot * s) { scene_graph = s; } + + inline ssgBranch *get_terrain_branch () const { return terrain_branch; } + inline void set_terrain_branch (ssgBranch * t) { terrain_branch = t; } + + inline ssgRoot *get_gnd_lights_root () const { + return gnd_lights_root; + } + inline void set_gnd_lights_root (ssgRoot *r) { + gnd_lights_root = r; + } + + inline ssgRoot *get_rwy_lights_root () const { + return rwy_lights_root; + } + inline void set_rwy_lights_root (ssgRoot *r) { + rwy_lights_root = r; + } + + inline ssgRoot *get_taxi_lights_root () const { + return taxi_lights_root; + } + inline void set_taxi_lights_root (ssgRoot *r) { + taxi_lights_root = r; + } + + inline ssgBranch *get_models_branch () const { + return models_branch; + } + inline void set_models_branch (ssgBranch *t) { + models_branch = t; + } + + inline ssgBranch *get_aircraft_branch () const { + return aircraft_branch; + } + inline void set_aircraft_branch (ssgBranch *t) { + aircraft_branch = t; + } +}; #endif // _SCENERY_HXX