// ---------------------------------------------------------------------------- TrackObjectPresentationParticles::TrackObjectPresentationParticles( const XMLNode& xml_node, scene::ISceneNode* parent) : TrackObjectPresentationSceneNode(xml_node) { m_emitter = NULL; m_lod_emitter_node = NULL; std::string path; xml_node.get("kind", &path); int clip_distance = -1; xml_node.get("clip_distance", &clip_distance); xml_node.get("conditions", &m_trigger_condition); bool auto_emit = true; xml_node.get("auto_emit", &auto_emit); m_delayed_stop = false; m_delayed_stop_time = 0.0; #ifndef SERVER_ONLY try { ParticleKind* kind = ParticleKindManager::get()->getParticles(path); if (kind == NULL) { throw std::runtime_error(path + " could not be loaded"); } ParticleEmitter* emitter = new ParticleEmitter(kind, m_init_xyz, parent); if (clip_distance > 0) { scene::ISceneManager* sm = irr_driver->getSceneManager(); scene::ISceneNode* sroot = sm->getRootSceneNode(); LODNode* lod = new LODNode("particles", !parent ? sroot : parent, sm); lod->add(clip_distance, (scene::ISceneNode*)emitter->getNode(), true); m_node = lod; m_lod_emitter_node = lod; m_emitter = emitter; } else { m_node = emitter->getNode(); m_emitter = emitter; } if (m_trigger_condition.size() > 0 || !auto_emit) { m_emitter->setCreationRateAbsolute(0.0f); } } catch (std::runtime_error& e) { Log::warn ("Track", "Could not load particles '%s'; cause :\n %s", path.c_str(), e.what()); } #endif } // TrackObjectPresentationParticles
TrackObjectPresentationParticles::TrackObjectPresentationParticles(const XMLNode& xml_node, scene::ISceneNode* parent) : TrackObjectPresentationSceneNode(xml_node) { m_emitter = NULL; m_lod_emitter_node = NULL; std::string path; xml_node.get("kind", &path); int clip_distance = -1; xml_node.get("clip_distance", &clip_distance); xml_node.get("conditions", &m_trigger_condition); try { ParticleKind* kind = ParticleKindManager::get()->getParticles( path.c_str() ); if (kind == NULL) { throw std::runtime_error(path + " could not be loaded"); } ParticleEmitter* emitter = new ParticleEmitter(kind, m_init_xyz, parent); if (clip_distance > 0) { scene::ISceneManager* sm = irr_driver->getSceneManager(); scene::ISceneNode* sroot = sm->getRootSceneNode(); LODNode* lod = new LODNode("particles", parent == NULL ? sroot : parent, sm); lod->add(clip_distance, (scene::ISceneNode*)emitter->getNode(), true); m_node = lod; m_lod_emitter_node = lod; m_emitter = emitter; } else { m_node = emitter->getNode(); m_emitter = emitter; } if (m_trigger_condition.size() > 0) { m_emitter->setCreationRateAbsolute(0.0f); } } catch (std::runtime_error& e) { fprintf(stderr, "[Track] WARNING: Could not load particles '%s'; cause :\n %s", path.c_str(), e.what()); } }