return sequence;
}
+
+// Blinking hold short line lights
+osg::Node*
+SGLightFactory::getHoldShort(const SGDirectionalLightBin& lights)
+{
+ if (lights.getNumLights() < 2)
+ return 0;
+
+ sg_srandom(unsigned(lights.getLight(0).position[0]));
+ float flashTime = 2 + 0.1 * sg_random();
+ osg::Sequence* sequence = new osg::Sequence;
+
+ // start with lights off
+ sequence->addChild(new osg::Group, flashTime);
+ // ...and increase the lights in steps
+ for (int i = 2; i < 7; i+=2) {
+ Effect* effect = getLightEffect(i, osg::Vec3(1, 0.001, 0.000002),
+ 0, i, true);
+ EffectGeode* egeode = new EffectGeode;
+ for (unsigned int j = 0; j < lights.getNumLights(); ++j) {
+ egeode->addDrawable(getLightDrawable(lights.getLight(j)));
+ egeode->setEffect(effect);
+ }
+ sequence->addChild(egeode, (i==6) ? flashTime : 0.1);
+ }
+
+ sequence->setInterval(osg::Sequence::SWING, 0, -1);
+ sequence->setDuration(1.0f, -1);
+ sequence->setMode(osg::Sequence::START);
+
+ return sequence;
+}