예제 #1
0
파일: Effect.cpp 프로젝트: Daivuk/ggj16
 Node* Effect::Duplicate() const
 {
     Effect* newNode = new Effect;
     Copy(newNode);
     DuplicateChildren(newNode);
     return newNode;
 }
예제 #2
0
파일: Effect.cpp 프로젝트: Daivuk/ggj16
 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;
 }
예제 #3
0
/**
* 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();
}