X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FInstrumentation%2FNavDisplay.hxx;h=d91cf2ab58cb930993ad847c3ab184a2f053afb6;hb=9fa790bcac7e535bb06cd228ae15178f1b10b26f;hp=00725e0820ce05f8e7bc46a60b30cd2d9647081f;hpb=9ab41ea15809c02ba46bf9e6911fbb1aa808b8b1;p=flightgear.git diff --git a/src/Instrumentation/NavDisplay.hxx b/src/Instrumentation/NavDisplay.hxx index 00725e082..d91cf2ab5 100644 --- a/src/Instrumentation/NavDisplay.hxx +++ b/src/Instrumentation/NavDisplay.hxx @@ -44,6 +44,7 @@ class FGNavRecord; class SymbolInstance; class SymbolDef; +class SymbolRule; namespace flightgear { @@ -51,6 +52,7 @@ namespace flightgear } typedef std::set string_set; +typedef std::vector SymbolRuleVector; typedef std::vector SymbolDefVector; class NavDisplay : public SGSubsystem @@ -67,17 +69,28 @@ public: { _cachedItemsValid = false; } + + double textureSize() const + { return _textureSize; } + + void forceUpdate() + { _forceUpdate = true; } + + bool anyRuleForType(const std::string& type) const; + bool isPositionedShown(FGPositioned* pos); protected: std::string _name; int _num; double _time; double _updateInterval; - + bool _forceUpdate; + SGPropertyNode_ptr _serviceable_node; SGPropertyNode_ptr _Instrument; SGPropertyNode_ptr _radar_mode_control_node; SGPropertyNode_ptr _user_heading_node; - + SGPropertyNode_ptr _testModeNode; + FGODGauge *_odg; // Convenience function for creating a property node with a @@ -86,11 +99,17 @@ protected: SGPropertyNode *getInstrumentNode(const char *name, DefaultType value); private: + friend class SymbolRule; + friend class SymbolDef; + + void addRule(SymbolRule*); + void addSymbolsToScene(); void addSymbolToScene(SymbolInstance* sym); void limitDisplayedSymbols(); void findItems(); + void isPositionedShownInner(FGPositioned* pos, SymbolRuleVector& rules); void foundPositionedItem(FGPositioned* pos); void computePositionedPropsAndHeading(FGPositioned* pos, SGPropertyNode* nd, double& heading); void computePositionedState(FGPositioned* pos, string_set& states); @@ -101,19 +120,22 @@ private: void processAI(); void computeAIStates(const SGPropertyNode* ai, string_set& states); - bool anyRuleForType(const std::string& type) const; + bool anyRuleMatches(const std::string& type, const string_set& states) const; - void findRules(const std::string& type, const string_set& states, SymbolDefVector& rules); + void findRules(const std::string& type, const string_set& states, SymbolRuleVector& rules); - bool addSymbolInstance(const osg::Vec2& proj, double heading, SymbolDef* def, SGPropertyNode* vars); + SymbolInstance* addSymbolInstance(const osg::Vec2& proj, double heading, SymbolDef* def, SGPropertyNode* vars); void addLine(osg::Vec2 a, osg::Vec2 b, const osg::Vec4& color); osg::Vec2 projectBearingRange(double bearingDeg, double rangeNm) const; osg::Vec2 projectGeod(const SGGeod& geod) const; bool isProjectedClipped(const osg::Vec2& projected) const; void updateFont(); + void addTestSymbol(const std::string& type, const std::string& states, const SGGeod& pos, double heading, SGPropertyNode* vars); + void addTestSymbols(); + std::string _texture_path; - + unsigned int _textureSize; float _scale; // factor to convert nm to display units float _view_heading; @@ -126,8 +148,9 @@ private: SGPropertyNode_ptr _ai_enabled_node; SGPropertyNode_ptr _navRadio1Node; SGPropertyNode_ptr _navRadio2Node; - - osg::ref_ptr _resultTexture; + SGPropertyNode_ptr _xCenterNode, _yCenterNode; + SGPropertyNode_ptr _viewHeadingNode; + osg::ref_ptr _symbolTexture; osg::ref_ptr _radarGeode; osg::ref_ptr _textGeode; @@ -158,7 +181,8 @@ private: double _rangeNm; SGPropertyNode_ptr _rangeNode; - SymbolDefVector _rules; + SymbolDefVector _definitions; + SymbolRuleVector _rules; FGNavRecord* _nav1Station; FGNavRecord* _nav2Station; std::vector _symbols; @@ -168,9 +192,13 @@ private: SGVec3d _cachedPos; FGPositioned::List _itemsInRange; SGPropertyNode_ptr _excessDataNode; - + int _maxSymbols; + class CacheListener; std::auto_ptr _cacheListener; + + class ForceUpdateListener; + std::auto_ptr _forceUpdateListener; }; #endif // _INST_ND_HXX