Node* Effect::Duplicate() const { Effect* newNode = new Effect; Copy(newNode); DuplicateChildren(newNode); return newNode; }
Node* Effect::Duplicate(onut::Pool<true>& in_pool, NodeVect& in_pooledNodes) const { Effect* newNode = in_pool.alloc<Effect>(); Copy(newNode); in_pooledNodes.push_back(newNode); DuplicateChildren(newNode, in_pool, in_pooledNodes); return newNode; }
/** * SetupUpdate should be called after this to set update callback * for model. */ tc3DModel::tc3DModel(const tc3DModel* source) : distanceFromCamera(1e10), gameObj(source->gameObj), author(source->author), fileName(source->fileName), boundingBox(source->boundingBox), boundingBoxComputed(source->boundingBoxComputed), mesh(source->mesh->Duplicate(0)), smokeTrails(source->smokeTrails), wakeSources(source->wakeSources), smokeMode(OFF) //mesh(unknownAir->Duplicate()) { mesh->SetShadowCast(true, true); static int addCount = 0; DuplicateChildren(source); //CTVScene* scene = tcTVEngine::Get()->GetScene(); //mesh = boost::shared_ptr<CTVMesh>(scene->CreateMeshBuilder("Teapot2")); //mesh->CreateTeapot(); //wxASSERT(source->modelNode.valid()); // error if modelNode not loaded yet //wxASSERT(unknownAll.valid()); //modelTransform = new osg::MatrixTransform; //modelTransform->setDataVariance(osg::Object::DYNAMIC); //root = new osg::Switch; //modelTransform->addChild(root.get()); #if 0 // osgAL experiment try { if (addCount < 0) { soundNode = tcSound::Get()->CreateSound("helolaunch.wav"); modelTransform->addChild(soundNode.get()); addCount++; } } catch (...) { fprintf(stderr, "Failed to load sound file\n"); } #endif /*modelGroup = new osg::LOD; root->addChild(modelGroup.get(), true); root->addChild(unknownAll.get(), false); root->addChild(unknownAir.get(), false); root->addChild(unknownLand.get(), false); root->addChild(unknownSurface.get(), false);*/ genericMode = USE_TRUE_MODEL; animationInfo.clear(); size_t nAnimations = source->animationInfo.size(); for(size_t n=0;n<nAnimations;n++) { animationInfo.push_back(source->animationInfo[n]); } engineSmokeSources = source->engineSmokeSources; //modelNode = dynamic_cast<osg::Group*>(source->modelNode->clone(ModelCopyOp(this,true,0))); //// add children with varying level of detail //modelGroup->addChild(modelNode.get(),0,300.0); ///* //modelGroup->addChild( // dynamic_cast<osg::Node*>(source->modelNode->clone(ModelCopyOp(this,false,2.0f))) // , 200.0, 500.0); //*/ //modelGroup->addChild( // dynamic_cast<osg::Node*>(source->modelNode->clone(ModelCopyOp(this,false,4.0f))) // , 300.0, 10000.0); //modelGroup->addChild( // dynamic_cast<osg::Node*>(source->modelNode->clone(ModelCopyOp(this,false,10.0f))) // , 10000.0, 20000.0); // unsigned nRanges = modelGroup->getNumRanges(); mesh->ComputeNormals(); }