X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=simgear%2Fscene%2Ftgdb%2Fpt_lights.cxx;h=7e123a475da55583f31b65ba2dd59e28ae846fa8;hb=e4dacaf0d270fb70beb2821888945b5e837afb50;hp=2aa6606acbdc56c0cca96914621771ea2e641c47;hpb=9ad070871afb134a76a3549c8716b0a4f929ad3a;p=simgear.git diff --git a/simgear/scene/tgdb/pt_lights.cxx b/simgear/scene/tgdb/pt_lights.cxx index 2aa6606a..7e123a47 100644 --- a/simgear/scene/tgdb/pt_lights.cxx +++ b/simgear/scene/tgdb/pt_lights.cxx @@ -540,3 +540,35 @@ SGLightFactory::getOdal(const SGLightBin& lights) 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; +}