Add a new node "float-property" to be used in float comparision in effect predicates

This commit is contained in:
fredb
2010-04-12 07:25:13 +02:00
committed by Tim Moore
parent caabe8fc87
commit f19e83dcf1
+10 -5
View File
@@ -1279,14 +1279,15 @@ osgDB::RegisterDotOsgWrapperProxy effectProxy
} }
// Property expressions for technique predicates // Property expressions for technique predicates
class PropertyExpression : public SGExpression<bool> template<typename T>
class PropertyExpression : public SGExpression<T>
{ {
public: public:
PropertyExpression(SGPropertyNode* pnode) : _pnode(pnode) {} PropertyExpression(SGPropertyNode* pnode) : _pnode(pnode) {}
void eval(bool& value, const expression::Binding*) const void eval(T& value, const expression::Binding*) const
{ {
value = _pnode->getValue<bool>(); value = _pnode->getValue<T>();
} }
protected: protected:
SGPropertyNode_ptr _pnode; SGPropertyNode_ptr _pnode;
@@ -1305,12 +1306,13 @@ protected:
osg::ref_ptr<Technique> _tniq; osg::ref_ptr<Technique> _tniq;
}; };
template<typename T>
Expression* propertyExpressionParser(const SGPropertyNode* exp, Expression* propertyExpressionParser(const SGPropertyNode* exp,
expression::Parser* parser) expression::Parser* parser)
{ {
SGPropertyNode_ptr pnode = getPropertyRoot()->getNode(exp->getStringValue(), SGPropertyNode_ptr pnode = getPropertyRoot()->getNode(exp->getStringValue(),
true); true);
PropertyExpression* pexp = new PropertyExpression(pnode); PropertyExpression<T>* pexp = new PropertyExpression<T>(pnode);
TechniquePredParser* predParser TechniquePredParser* predParser
= dynamic_cast<TechniquePredParser*>(parser); = dynamic_cast<TechniquePredParser*>(parser);
if (predParser) if (predParser)
@@ -1320,6 +1322,9 @@ Expression* propertyExpressionParser(const SGPropertyNode* exp,
} }
expression::ExpParserRegistrar propertyRegistrar("property", expression::ExpParserRegistrar propertyRegistrar("property",
propertyExpressionParser); propertyExpressionParser<bool>);
expression::ExpParserRegistrar propvalueRegistrar("float-property",
propertyExpressionParser<float>);
} }