#include #include #include #include osgParticle::ModularProgram::ModularProgram() : Program() { } osgParticle::ModularProgram::ModularProgram(const ModularProgram& copy, const osg::CopyOp& copyop) : Program(copy, copyop) { Operator_vector::const_iterator ci; for (ci=copy._operators.begin(); ci!=copy._operators.end(); ++ci) { _operators.push_back(static_cast(copyop(ci->get()))); } } void osgParticle::ModularProgram::execute(double dt) { Operator_vector::iterator ci; Operator_vector::iterator ci_end = _operators.end(); ParticleSystem* ps = getParticleSystem(); for (ci=_operators.begin(); ci!=ci_end; ++ci) { (*ci)->beginOperate(this); int n = ps->numParticles(); for (int i=0; igetParticle(i); if (P->isAlive() && (*ci)->isEnabled()) { (*ci)->operate(P, dt); } } (*ci)->endOperate(); } }