Add a new node "float-property" to be used in float comparision in effect predicates
This commit is contained in:
@@ -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>);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user