// Initialize the controls subsystem.
////////////////////////////////////////////////////////////////////
- globals->add_subsystem("controls", new FGControls, SGSubsystemMgr::GENERAL);
+ globals->add_new_subsystem<FGControls>(SGSubsystemMgr::GENERAL);
////////////////////////////////////////////////////////////////////
// Initialize the input subsystem.
time_params( NULL ),
ephem( NULL ),
route_mgr( NULL ),
- controls( NULL ),
viewmgr( NULL ),
commands( SGCommandMgr::instance() ),
channel_options_list( NULL ),
}
SGSubsystem *
-FGGlobals::get_subsystem (const char * name)
+FGGlobals::get_subsystem (const char * name) const
{
if (!subsystem_mgr) {
return NULL;
matlib = m;
}
+FGControls *FGGlobals::get_controls() const
+{
+ return get_subsystem<FGControls>();
+}
+
FGSampleQueue* FGGlobals::get_chatter_queue() const
{
return _chatter_queue;
// Global autopilot "route"
FGRouteMgr *route_mgr;
- // control input state
- FGControls *controls;
-
// viewer manager
FGViewMgr *viewmgr;
virtual FGRenderer *get_renderer () const;
void set_renderer(FGRenderer* render);
- virtual SGSubsystemMgr *get_subsystem_mgr () const;
+ SGSubsystemMgr *get_subsystem_mgr () const;
+
+ SGSubsystem *get_subsystem (const char * name) const;
- virtual SGSubsystem *get_subsystem (const char * name);
+ template<class T>
+ T* get_subsystem() const
+ {
+ return dynamic_cast<T*>(get_subsystem(T::subsystemName()));
+ }
- virtual void add_subsystem (const char * name,
+
+ void add_subsystem (const char * name,
SGSubsystem * subsystem,
SGSubsystemMgr::GroupType
type = SGSubsystemMgr::GENERAL,
double min_time_sec = 0);
- virtual SGEventMgr *get_event_mgr () const;
+ template<class T>
+ T* add_new_subsystem (SGSubsystemMgr::GroupType
+ type = SGSubsystemMgr::GENERAL,
+ double min_time_sec = 0)
+ {
+ T* sub = new T;
+ add_subsystem(T::subsystemName(), sub, type, min_time_sec);
+ return sub;
+ }
+
+ SGEventMgr *get_event_mgr () const;
- virtual SGSoundMgr *get_soundmgr () const;
+ SGSoundMgr *get_soundmgr () const;
inline double get_sim_time_sec () const { return sim_time_sec; }
inline void inc_sim_time_sec (double dt) { sim_time_sec += dt; }
inline SGMaterialLib *get_matlib() const { return matlib; }
void set_matlib( SGMaterialLib *m );
- inline FGControls *get_controls() const { return controls; }
- inline void set_controls( FGControls *c ) { controls = c; }
-
inline FGViewMgr *get_viewmgr() const { return viewmgr; }
inline void set_viewmgr( FGViewMgr *vm ) { viewmgr = vm; }
FGViewer *get_current_view() const;
initial_waypoints = list;
}
+ FGControls *get_controls() const;
+
FGScenery * get_scenery () const;
void set_scenery ( FGScenery *s );