/** GDevelop - Particle System Extension Copyright (c) 2010-2014 Florian Rival (Florian.Rival@gmail.com) This project is released under the MIT License. */ #include "ParticleSystemWrapper.h" #include #include #include bool ParticleSystemWrapper::SPKinitialized = false; ParticleSystemWrapper::ParticleSystemWrapper() : particleSystem(NULL), particleModel(NULL), emitter(NULL), zone(NULL), group(NULL), renderer(NULL) { if ( !SPKinitialized ) { SPK::randomSeed = static_cast(time(NULL)); SPK::System::setClampStep(true,0.1f); // clamp the step to 100 ms SPK::System::useAdaptiveStep(0.001f,0.01f); // use an adaptive step from 1ms to 10ms (1000fps to 100fps) SPKinitialized = true; } } ParticleSystemWrapper::~ParticleSystemWrapper() { if ( particleSystem ) delete particleSystem; if ( particleModel ) delete particleModel; if ( emitter ) delete emitter; if ( zone ) delete zone; if ( group ) delete group; if ( renderer ) delete renderer; } void ParticleSystemWrapper::Init(const ParticleSystemWrapper & other) { openGLTextureParticle = other.openGLTextureParticle; if ( particleSystem ) delete particleSystem; if ( particleModel ) delete particleModel; if ( emitter ) delete emitter; if ( zone ) delete zone; if ( group ) delete group; if ( renderer ) delete renderer; //Don't initialize members if the other object's member are NULL. if ( other.particleModel == NULL ) return; particleModel = new SPK::Model(*other.particleModel); zone = new SPK::Sphere(*other.zone); emitter = new SPK::SphericEmitter(*other.emitter); emitter->setZone(zone); group = new SPK::Group(*other.group); group->setModel(particleModel); group->removeEmitter(other.emitter); group->addEmitter(emitter); particleSystem = new SPK::System(*other.particleSystem); particleSystem->removeGroup(other.group); particleSystem->addGroup(group); }