bool ParticleEffect::Start()
{
    if(IsAlive())
        return true;

    return _CreateEffect();
}
ParticleEffect* ParticleManager::_AddEffect(const ParticleEffectDef *def, float x, float y)
{
	if (!def) {
		IF_PRINT_WARNING(VIDEO_DEBUG)
			<< "AddEffect() failed because def was NULL!" << std::endl;
		return 0;
	}

	if (def->_systems.empty()) {
		IF_PRINT_WARNING(VIDEO_DEBUG)
			<< "AddEffect() failed because def->_systems was empty!" << std::endl;
		return 0;
	}

	ParticleEffect *effect = _CreateEffect(def);
	if (!effect) {
		IF_PRINT_WARNING(VIDEO_DEBUG)
			<< "Could not create particle effect!" << std::endl;
		return 0;
	}

	effect->Move(x, y);
	_all_effects.push_back(effect);
	_active_effects.push_back(effect);

	return effect;
};
bool ParticleEffect::LoadEffect(const std::string& filename) {
	if (!_LoadEffectDef(filename)) {
		PRINT_WARNING << "Failed to load particle definition file: "
		    << filename << std::endl;
		return false;
	}

	if (!_CreateEffect()) {
		PRINT_WARNING << "Failed to create particle effect from file: "
		    << filename << std::endl;
        return false;
	}

	return true;
}
// The static version, to handle outside the particle manager
ParticleEffect* ParticleManager::CreateEffect(const std::string& filename) {
	ParticleEffectDef *def = _LoadEffect(filename);

	if (!def) {
		PRINT_WARNING << "Failed to load particle definition file: "
		    << filename << std::endl;
		return 0;
	}

	ParticleEffect *effect = _CreateEffect(def);
	if (!effect) {
		PRINT_WARNING << "Failed to create particle effect from file: "
		    << filename << std::endl;
	}

	return effect;
}