+ {
+ // TODO make more generic and extendable for more properties
+ if( node->hasValue("emission") )
+ setEmission( node->getFloatValue("emission") );
+ }
+
+ virtual bool childChanged(SGPropertyNode* node)
+ {
+ if( node->getParent() != _node )
+ return false;
+
+ if( node->getNameString() == "emission" )
+ setEmission( node->getFloatValue() );
+ else
+ return false;
+
+ return true;
+ }
+
+ void setEmission(float emit)
+ {
+ emit = SGMiscf::clip(emit, 0, 1);
+
+ if( !_material )
+ {
+ _material = new osg::Material;
+ _material->setColorMode(osg::Material::OFF);
+ _material->setDataVariance(osg::Object::DYNAMIC);
+ _group->getOrCreateStateSet()
+ ->setAttribute(_material, ( osg::StateAttribute::ON
+ | osg::StateAttribute::OVERRIDE ) );
+ }
+
+ _material->setEmission(
+ osg::Material::FRONT_AND_BACK,
+ osg::Vec4(emit, emit, emit, emit)
+ );
+ }