X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=simgear%2Fscene%2Ftgdb%2Fpt_lights.cxx;h=7e123a475da55583f31b65ba2dd59e28ae846fa8;hb=e4dacaf0d270fb70beb2821888945b5e837afb50;hp=925d3e20b85118dd5c8ec1fbb362158724a06a92;hpb=f712bc92941a1edbb24be103a8e8cfdcab3e0b68;p=simgear.git diff --git a/simgear/scene/tgdb/pt_lights.cxx b/simgear/scene/tgdb/pt_lights.cxx index 925d3e20..7e123a47 100644 --- a/simgear/scene/tgdb/pt_lights.cxx +++ b/simgear/scene/tgdb/pt_lights.cxx @@ -548,26 +548,27 @@ SGLightFactory::getHoldShort(const SGDirectionalLightBin& lights) if (lights.getNumLights() < 2) return 0; - float flashTime = 2; + sg_srandom(unsigned(lights.getLight(0).position[0])); + float flashTime = 2 + 0.1 * sg_random(); osg::Sequence* sequence = new osg::Sequence; - sequence->setDefaultTime(flashTime); - Effect* effect = getLightEffect(6, osg::Vec3(1, 0.001, 0.000002), - 0, 6, true); - // Lights on - EffectGeode* egeode = new EffectGeode; - for (int i = lights.getNumLights(); 0 <= i; --i) { - egeode->setEffect(effect); - egeode->addDrawable(getLightDrawable(lights.getLight(i))); - } - sequence->addChild(egeode, flashTime); - // Lights off + // 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::LOOP, 0, -1); + sequence->setInterval(osg::Sequence::SWING, 0, -1); sequence->setDuration(1.0f, -1); sequence->setMode(osg::Sequence::START); - sequence->setSync(true); return sequence; }