X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FInstrumentation%2FNavDisplay.hxx;h=870c3cc3051a58089dd83a13cd143a221253ef3e;hb=0b9adf8854398461333eba43df18fa2f5c8231a1;hp=368ff8c55d12d3925a79412750139938354927fb;hpb=472cc02d6eb9ca42e7a4db7d3335cfae405303da;p=flightgear.git diff --git a/src/Instrumentation/NavDisplay.hxx b/src/Instrumentation/NavDisplay.hxx index 368ff8c55..870c3cc30 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 @@ -74,6 +76,8 @@ public: void forceUpdate() { _forceUpdate = true; } + bool anyRuleForType(const std::string& type) const; + bool isPositionedShown(FGPositioned* pos); protected: std::string _name; int _num; @@ -95,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); @@ -110,9 +120,7 @@ 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); SymbolInstance* addSymbolInstance(const osg::Vec2& proj, double heading, SymbolDef* def, SGPropertyNode* vars); void addLine(osg::Vec2 a, osg::Vec2 b, const osg::Vec4& color); @@ -139,8 +147,8 @@ private: SGPropertyNode_ptr _navRadio1Node; SGPropertyNode_ptr _navRadio2Node; SGPropertyNode_ptr _xCenterNode, _yCenterNode; - - osg::ref_ptr _resultTexture; + SGPropertyNode_ptr _viewHeadingNode; + osg::ref_ptr _symbolTexture; osg::ref_ptr _radarGeode; osg::ref_ptr _textGeode; @@ -171,7 +179,8 @@ private: double _rangeNm; SGPropertyNode_ptr _rangeNode; - SymbolDefVector _rules; + SymbolDefVector _definitions; + SymbolRuleVector _rules; FGNavRecord* _nav1Station; FGNavRecord* _nav2Station; std::vector _symbols; @@ -181,7 +190,8 @@ private: SGVec3d _cachedPos; FGPositioned::List _itemsInRange; SGPropertyNode_ptr _excessDataNode; - + int _maxSymbols; + class CacheListener; std::auto_ptr _cacheListener;