FlightGear next
fdm_shell.hxx
Go to the documentation of this file.
1// fdm_shell.hxx -- encapsulate FDM implementations as well-behaved subsystems
2//
3// Written by James Turner, started June 2010.
4//
5// Copyright (C) 2010 Curtis L. Olson - http://www.flightgear.org/~curt
6//
7// This program is free software; you can redistribute it and/or
8// modify it under the terms of the GNU General Public License as
9// published by the Free Software Foundation; either version 2 of the
10// License, or (at your option) any later version.
11//
12// This program is distributed in the hope that it will be useful, but
13// WITHOUT ANY WARRANTY; without even the implied warranty of
14// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15// General Public License for more details.
16//
17// You should have received a copy of the GNU General Public License
18// along with this program; if not, write to the Free Software
19// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
20//
21// $Id$
22
23#ifndef FG_FDM_SHELL_HXX
24#define FG_FDM_SHELL_HXX
25
26#include <simgear/math/SGGeod.hxx>
27#include <simgear/structure/subsystem_mgr.hxx>
28
29#include "TankProperties.hxx"
30
31// forward decls
32class FGInterface;
33class FGAIManager;
34
43class FDMShell : public SGSubsystem
44{
45public:
46 FDMShell();
47 ~FDMShell() override;
48
49 // Subsystem API.
50 void bind() override;
51 void init() override;
52 void postinit() override;
53 void reinit() override;
54 void shutdown() override;
55 void unbind() override;
56 void update(double dt) override;
57
58 // Subsystem identification.
59 static const char* staticSubsystemClassId() { return "flight"; }
60
62
63private:
64 void createImplementation();
65
66 void validateOutputProperties();
67
68 void doInitAndBind();
69
70private:
71 TankPropertiesList _tankProperties;
72 SGSharedPtr<FGInterface> _impl;
73 SGPropertyNode_ptr _props; // root property tree for this FDM instance
74 bool _dataLogging = false;
75
76 bool _nanCheckFailed = false;
77 SGGeod _lastValidPos;
78
79 SGPropertyNode_ptr _wind_north, _wind_east,_wind_down;
80 SGPropertyNode_ptr _control_fdm_atmo,_temp_degc,_pressure_inhg;
81 SGPropertyNode_ptr _density_slugft, _data_logging, _replay_master;
82
83 SGPropertyNode_ptr _initialFdmProperties;
84
85 SGSharedPtr<FGAIManager> _ai_mgr;
86 SGPropertyNode_ptr _max_radius_nm;
87 SGPropertyNode_ptr _ai_wake_enabled;
88};
89
90#endif // of FG_FDM_SHELL_HXX
void reinit() override
void shutdown() override
void update(double dt) override
static const char * staticSubsystemClassId()
Definition fdm_shell.hxx:59
~FDMShell() override
Definition fdm_shell.cxx:70
FGInterface * getInterface() const
void unbind() override
void postinit() override
void bind() override
void init() override
Definition fdm_shell.cxx:74