Пример #1
0
void
TestScene5::runOgre()
{
	// initialize framework & open window
	Ogre::Root* root = new Ogre::Root();
	root->restoreConfig();
	root->initialise(false);
	auto window = root->createRenderWindow("Ogre RenderWindow", 800, 600, false);
	auto sceneMgr = root->createSceneManager(Ogre::ST_GENERIC);
	// adjust camera
	auto cam1 = sceneMgr->createCamera("cam1");
	auto camNode1 = sceneMgr->getRootSceneNode()->createChildSceneNode("camnode1");
	cam1->setNearClipDistance(5);
	camNode1->attachObject(cam1);
	camNode1->setPosition(100, 100, 100);
	camNode1->lookAt(Ogre::Vector3(-1, -1, -1), Ogre::Node::TS_LOCAL);
	window->addViewport(cam1);
	// load & integrate model
	root->addResourceLocation("./resources/Ogre", "FileSystem");
	Ogre::ResourceGroupManager::getSingleton().initialiseAllResourceGroups();
	auto model = sceneMgr->createEntity("model", "alexandria.mesh");
	auto modelNode = sceneMgr->getRootSceneNode()->createChildSceneNode();
	modelNode->attachObject(model);
	// position model
	modelNode->setPosition(-100, -100, -100);
	// loop
	runOgreLoop(root);
}
	//-----------------------------------------------------------------------
    // Update all the zone info for a given node.  This function
	// makes sure the home zone of the node is correct, and references
	// to any zones it is visiting are added and a reference to the 
	// node is added to the visitor lists of any zone it is visiting.
	//
	void PCZSceneManager::_updatePCZSceneNode( PCZSceneNode * pczsn )
    {
	    // Skip if root Zone has been destroyed (shutdown conditions)
	    if (!mDefaultZone)
		    return;

		// Skip if the node is the sceneroot node 
		if (pczsn == getRootSceneNode())
			return;

		// clear all references to visiting zones
		pczsn->clearNodeFromVisitedZones();

        // Find the current home zone of the node associated with the pczsn entry.
		_updateHomeZone( pczsn, false );

		/* The following function does the following:
		* 1) Check all portals in the home zone - if the node is touching the portal
		*    then add the node to the connected zone as a visitor
		* 2) Recurse into visited zones in case the node spans several zones
		*/
		// (recursively) check each portal of home zone to see if the node is touching 
		if (pczsn->getHomeZone() &&
			pczsn->allowedToVisit() == true)
		{
			pczsn->getHomeZone()->_checkNodeAgainstPortals(pczsn, 0);
		}

		// update zone-specific data for the node for any zones that require it
		pczsn->updateZoneData();
    }
Пример #3
0
    Box::Box( PhysicsScene* scene, const Vector3& size, const Vector3& position, const Quaternion& orientation ): Primitive( scene )
    {
      PxPhysics& physics = mScene->getScene()->getPhysics();

      PxTransform transform;
      transform.p = Math::ogreVec3ToPx( position );
      transform.q = Math::ogreQtToPx( orientation );

      PxBoxGeometry geometry;
      geometry.halfExtents = Math::ogreVec3ToPx( size / 2.0f );
      mActor = PxCreateStatic( physics, transform, geometry, *scene->getDefaultMaterial() );
      if ( !mActor )
        ENGINE_EXCEPT( "Could not create physics box actor" );

      mScene->getScene()->addActor( *mActor );

      mMesh = Procedural::BoxGenerator().setSize( size ).realizeMesh();

      auto scm = Locator::getGraphics().getScene();
      mNode = scm->getRootSceneNode()->createChildSceneNode();

      mItem = Locator::getGraphics().getScene()->createItem( mMesh );
      mItem->setQueryFlags( SceneQueryFlag_World );
      mItem->setDatablock( "Developer/Floor" );
      mItem->setCastShadows( true );
      mNode->attachObject( mItem );
      mNode->setPosition( position );
      mNode->setOrientation( orientation );
    }
    //-------------------------------------------------------------------------
    void TerrainSceneManager::setupTerrainPages(void)
    {

        //create a root terrain node.
        if (!mTerrainRoot)
            mTerrainRoot = getRootSceneNode() -> createChildSceneNode( "Terrain" );

        //setup the page array.
        unsigned short pageSlots = 1 + (mBufferedPageMargin * 2);
        unsigned short i, j;
        for (i = 0; i < pageSlots; ++i)
        {
            mTerrainPages.push_back(TerrainPageRow());
            for (j = 0; j < pageSlots; ++j)
            {
                mTerrainPages[i].push_back(0);
            }
        }

		// If we're not paging, load immediate for convenience
		if ( mActivePageSource && !mPagingEnabled )
			mActivePageSource->requestPage(0,0);


    }
Пример #5
0
void fakeHaskell()
{
    DemoApp* da = initDemo();
    
    Ogre::SceneManager* sm = getSceneManager();
    Ogre::SceneNode* rnode = getRootSceneNode(sm);
    
    /*	OgreFramework::getSingletonPtr()->m_pSceneMgr->setSkyBox(true, "Examples/SpaceSkyBox");
     
     m_pCubeEntity = OgreFramework::getSingletonPtr()->m_pSceneMgr->createEntity("Cube", "ogrehead.mesh");
     m_pCubeNode = OgreFramework::getSingletonPtr()->m_pSceneMgr->getRootSceneNode()->createChildSceneNode("CubeNode");
     m_pCubeNode->attachObject(m_pCubeEntity);
     
     m_pCube2E = OgreFramework::getSingletonPtr()->m_pSceneMgr->createEntity("Steve", Ogre::SceneManager::PT_CUBE);
     m_pCube2N = OgreFramework::getSingletonPtr()->m_pSceneMgr->getRootSceneNode()->createChildSceneNode("SteveN");
     m_pCube2N->attachObject(m_pCube2E);*/
    
    setSkybox(sm, true, "Examples/SpaceSkyBox");
    
    Ogre::Entity* cubeEntity = createEntity(sm, "Cube", "ogrehead.mesh");
    Ogre::SceneNode* cubeNode = createChildSceneNode(rnode, "CubeNode");
    attachObject(cubeNode, cubeEntity);
    
    finishSetupAndRun(da);
}
Пример #6
0
void SingleplayerGame::createScene(std::vector<std::string> partyNames){
    auto scnMgr = mRenderer->mSceneManager;
    auto root = scnMgr->getRootSceneNode();
    Ogre::Camera* camera = mRenderer->mCamera;
    mRoomRoot = root->createChildSceneNode();
    scnMgr->setSkyBox(true, "Examples/MorningSkyBox", 5000, true);


    // Set ambient light
    scnMgr->setAmbientLight(Ogre::ColourValue(0.3, 0.3, 0.3));
    scnMgr->setShadowTechnique(Ogre::SHADOWTYPE_STENCIL_ADDITIVE);
 
    // Create a light
    mMainLight = scnMgr->createLight(BaseGame::mainLightName);
    mMainLight->setPosition(0, 500, 0);
    mMainLight->setType(Ogre::Light::LT_POINT);
    mMainLight->setDiffuseColour(.5, .5, .5);

    // Create ground plane
    ground = new Plane(scnMgr, mRoomRoot);

    // Add test objects
    Player* p = new Player(scnMgr, mRoomRoot,
            mPlayerBank->getPlayerInfo(partyNames[0]),
            Ogre::Vector3(500, 0, 200), mSoundBank);
    myParty.push_back(p);

    Player* p2 = new Player(scnMgr, mRoomRoot,
            mPlayerBank->getPlayerInfo(partyNames[1]),
            Ogre::Vector3(500, 0, 0), mSoundBank);
    myParty.push_back(p2);

    Player* p3 = new Player(scnMgr, mRoomRoot,
            mPlayerBank->getPlayerInfo(partyNames[2]),
            Ogre::Vector3(500, 0, -200), mSoundBank);
    myParty.push_back(p3);
    

    Player* p4 = new Player(scnMgr, mRoomRoot,
            mPlayerBank->getPlayerInfo("Mecha-Scoot"),
            Ogre::Vector3(-500, 0, 200), mSoundBank);
    enemyParty.push_back(p4);

    Player* p5 = new Player(scnMgr, mRoomRoot,
            mPlayerBank->getPlayerInfo("SSJVirginia"),
            Ogre::Vector3(-500, 0, 0), mSoundBank);
    enemyParty.push_back(p5);

    Player* p6 = new Player(scnMgr, mRoomRoot,
            mPlayerBank->getPlayerInfo("Metal Scoot"),
            Ogre::Vector3(-500, 0, -200), mSoundBank);
    enemyParty.push_back(p6);

    // Set Camera Position
    cameraInitialPosition = Ogre::Vector3(1100, 250, 700);
    cameraInitialLookAt = Ogre::Vector3(0, 0, 0);
    camera->setPosition(cameraInitialPosition);
    camera->lookAt(cameraInitialLookAt);
}
Пример #7
0
void SceneManager::renderScene(Viewport* vp, Camera* cam) {
    assert(mRenderer != NULL);
    mRenderer->clearRenderQueues();

    // Find visible scene objects and insert them into the render queues.
    getRootSceneNode()->findVisibleObjects(cam);

    assert(mRenderer != NULL);
    mRenderer->render(vp, cam);
}
Пример #8
0
void
TestScene12::runOgre()
{
	// initialize framework & open window
	Ogre::Root* root = new Ogre::Root();
	root->restoreConfig();
	root->initialise(false);
	auto window = root->createRenderWindow("Ogre RenderWindow", 800, 600, false);
	auto sceneMgr = root->createSceneManager(Ogre::ST_GENERIC);
	// adjust camera
	auto cam1 = sceneMgr->createCamera("cam1");
	auto camNode1 = sceneMgr->getRootSceneNode()->createChildSceneNode("camnode1");
	cam1->setNearClipDistance(5);
	camNode1->attachObject(cam1);
	camNode1->setPosition(Ogre::Vector3(100, 100, 100));
	camNode1->lookAt(Ogre::Vector3(-1, -1, -1), Ogre::Node::TS_LOCAL);
	window->addViewport(cam1);
	// load & integrate model
	root->addResourceLocation("./resources/Ogre", "FileSystem");
	Ogre::ResourceGroupManager::getSingleton().initialiseAllResourceGroups();
	Mesh_Cube M(1);
	M.createMesh("cube");
	Ogre::SceneNode* groups[ROWS];
	std::list<Ogre::SceneNode*> nodes;
	for (int i = 0; i < ROWS; i++)
	{
		groups[i] = sceneMgr->getRootSceneNode()->createChildSceneNode();
		nodes.push_back(groups[i]);
	}
	for (int i = 0; i < ROWS * COLS; i++)
	{
		auto node = groups[i % ROWS]->createChildSceneNode();
		node->attachObject(sceneMgr->createEntity(std::string("model") + boost::lexical_cast<std::string>(i), "cube"));
		node->setPosition(
			camNode1->getOrientation() * -Ogre::Vector3::UNIT_X * LEFT(i)
			+ camNode1->getOrientation() * Ogre::Vector3::UNIT_Y * UP(i)
		);
	}
	root->addFrameListener(new MoveObjectTask_Ogre12(nodes));
	// loop
	runOgreLoop(root);
}
PhysicDebugGraphicObject::PhysicDebugGraphicObject(ISystemScene& pSystemScene, UObject& entity,
                                                   const Schema::SystemComponent& component)
        : ISystemObject(&pSystemScene, &entity, component) {
    auto sceneManager = GetSystemScene<GraphicScene>()->getSceneManager();
    lines_ = sceneManager->createManualObject();
    lines_->begin("BaseWhiteNoLighting", Ogre::RenderOperation::OT_LINE_LIST);
    lines_->position(Ogre::Vector3::ZERO);
    lines_->position(Ogre::Vector3::ZERO);
    lines_->end();
    sceneManager->getRootSceneNode()->attachObject(lines_);
}
Пример #10
0
	//-----------------------------------------------------------------------
	void PCZSceneManager::clearScene(void)
	{
		destroyAllStaticGeometry();
		destroyAllMovableObjects();

		// Clear root node of all children
		getRootSceneNode()->removeAllChildren();
		getRootSceneNode()->detachAllObjects();

		// Delete all SceneNodes, except root that is
		for (SceneNodeList::iterator i = mSceneNodes.begin();
			i != mSceneNodes.end(); ++i)
		{
			OGRE_DELETE i->second;
		}
		mSceneNodes.clear();
		mAutoTrackingSceneNodes.clear();

		// delete all the zones
		for (ZoneMap::iterator j = mZones.begin();
			j != mZones.end(); ++j)
		{
			OGRE_DELETE j->second;
		}
		mZones.clear();
	    mDefaultZone = 0;

		// Clear animations
		destroyAllAnimations();

		// Remove sky nodes since they've been deleted
		mSkyBoxNode = mSkyPlaneNode = mSkyDomeNode = 0;
		mSkyBoxEnabled = mSkyPlaneEnabled = mSkyDomeEnabled = false; 

		// Clear render queue, empty completely
		if (mRenderQueue)
			mRenderQueue->clear(true);

		// re-initialize
        init(mDefaultZoneTypeName, mDefaultZoneFileName);
	}
Пример #11
0
void SceneManager::clearSceneNodes() {
	getRootSceneNode()->removeAllChildren();
	for (SceneNodeMap::iterator iter = mSceneNodes.begin();
         iter != mSceneNodes.end(); ++iter) {
		delete iter->second;
	}
	mSceneNodes.clear();
    
    if (mSceneGraph.root) {
        delete mSceneGraph.root;
        mSceneGraph.root = NULL;
    }
}
Пример #12
0
SceneNode* SceneManager::getSceneNode(const string& name) {
    // Early termination for camera node.
    SceneNode* node = getCameraNode(name);
    if (node) {
        return node;
    }

    SceneNodeIterator iter(getRootSceneNode());
    while(iter.hasNext()) {
        SceneNode& node = *iter;
        const string& nodeName = node.getName();
        const NodeID& nodeID = node.getID();
        if (nodeName == node.createName(nodeID, name)) {
            return iter.current();
        }
        iter.advance();
    }
    return NULL;
}
Пример #13
0
void
TestScene3::runOgre()
{
	// initialize framework & open window
	Ogre::Root* root = new Ogre::Root();
	root->restoreConfig();
	root->initialise(false);
	auto window = root->createRenderWindow("Ogre RenderWindow", 800, 600, false);
	auto sceneMgr = root->createSceneManager(Ogre::ST_GENERIC);
	// adjust camera
	auto cam1 = sceneMgr->createCamera("cam1");
	auto camNode1 = sceneMgr->getRootSceneNode()->createChildSceneNode("camnode1");
	cam1->setNearClipDistance(5);
	camNode1->attachObject(cam1);
	camNode1->setPosition(100, 100, 100);
	camNode1->lookAt(Ogre::Vector3(-1, -1, -1), Ogre::Node::TS_LOCAL);
	window->addViewport(cam1);
	// loop
	runOgreLoop(root);
}
Пример #14
0
    Plane::Plane( PhysicsScene* scene, const Ogre::Plane& plane,
    const Real width, const Real height, const Vector3& position, const Real u, const Real v ):
    Primitive( scene )
    {
      PxPhysics& physics = mScene->getScene()->getPhysics();

      mActor = PxCreatePlane( physics,
        PxPlane( Glacier::Math::ogreVec3ToPx( plane.normal ), plane.d ),
        *mScene->getDefaultMaterial() );
      if ( !mActor )
        ENGINE_EXCEPT( "Could not create physics plane actor" );

      mScene->getScene()->addActor( *mActor );

      Ogre::v1::MeshPtr planeMeshV1 = Ogre::v1::MeshManager::getSingleton().createPlane(
        "",
        Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME,
        plane, width, height,
        1, 1, true, 1, u, v, Ogre::Vector3::UNIT_Z,
        Ogre::v1::HardwareBuffer::HBU_STATIC,
        Ogre::v1::HardwareBuffer::HBU_STATIC );

      mMesh = Ogre::MeshManager::getSingleton().createManual( "", Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME );
      mMesh->importV1( planeMeshV1.get(), true, true, true );

      // mMesh = Procedural::PlaneGenerator().setEnableNormals( true ).setSize( Vector2( width, height ) ).setNormal( plane.normal ).setNumSegX( 8 ).setNumSegY( 8 ).setUTile( u ).setVTile( v ).realizeMesh();

      auto scm = Locator::getGraphics().getScene();
      mNode = scm->getRootSceneNode()->createChildSceneNode();

      mItem = scm->createItem( mMesh );
      mItem->setQueryFlags( SceneQueryFlag_World );
      mItem->setDatablock( "GameTextures/TileLargeHexagon" );
      mItem->setCastShadows( false );
      mNode->attachObject( mItem );
      mNode->setPosition( position );
      mNode->setOrientation( Quaternion::IDENTITY );
    }
bool PlaneNodeProcessor::processNode(DOMElement *nodeElem, bool loadGameObjects)
{
    if (!hasNodeName(nodeElem, "plane"))
    {
        return false;
    }

    Ogre::String entName = getAttributeValueAsStdString(nodeElem, "name");

    LOG_DEBUG(Logger::RULES,
              "Processing plane node "
              + entName);
    if(entName=="")
    {
        entName = getRandomName("Plane");
    }

    Quaternion orientation(Quaternion::IDENTITY);
    Vector3 position(Vector3::ZERO);
    Vector2 scale(1,1);

    DOMElement* oriElem = getChildNamed(nodeElem, "rotation");
    if (oriElem != NULL)
    {
        orientation = processQuaternion(oriElem);
    }
    else
    {
        LOG_WARNING(Logger::RULES, "No orientation given for plane, used Identity");
    }

    DOMElement* posElem = getChildNamed(nodeElem, "position");
    if (posElem != NULL)
    {
        position = processVector3(posElem);
    }
    else
    {
        LOG_WARNING(Logger::RULES, "No position given for plane, used (0,0,0)");
    }

    DOMElement* scaleElem = getChildNamed(nodeElem, "scale");
    if (posElem != NULL)
    {
        scale = processVector2(scaleElem);
    }
    else
    {
        LOG_WARNING(Logger::RULES, "No scale given for plane, used (0,0)");
    }

    while(!MeshManager::getSingleton().getByName(entName).isNull())
    {
        entName = getRandomName("Plane");
    }

    SceneNode* node = getRootSceneNode()->createChildSceneNode(entName + "Node", position, orientation);

    MovablePlane* plane = new MovablePlane(entName + "Plane");
    plane->d = 0;
    plane->normal = Vector3::UNIT_Y;

    MeshManager::getSingleton().createPlane(entName + "Mesh", "custom", *plane, scale.x, scale.y, 10, 10, true, 1, 1, 1, Vector3::UNIT_Z);

    Entity* ent = CoreSubsystem::getSingleton().getWorld()->getSceneManager()->createEntity(entName, entName + "Mesh");

    LOG_DEBUG(Logger::RULES, " Loaded plane "+entName);

    node->attachObject(ent);
    node->attachObject(plane);
    //node->scale(scale.x,1,scale.y);

    createCollision(ent, getChildNamed(nodeElem, "physicsproxy"));

    DOMElement* materialElem = getChildNamed(nodeElem, "material");
    if(materialElem)
    {
        if(getChildNamed(nodeElem, "renderToTexture"))
        {
            Ogre::String matName = getAttributeValueAsStdString(materialElem, "name");
            MaterialPtr material = static_cast<MaterialPtr>(MaterialManager::getSingleton().getByName(matName))->clone(matName + entName);
            createRenderToTextures(ent, plane, material, getChildNamed(nodeElem, "renderToTexture"));
            ent->setMaterialName(matName + entName);
        }
        else
            ent->setMaterialName(getAttributeValueAsStdString(materialElem, "name"));
    }
    else
    {
        LOG_WARNING(Logger::RULES, "No material given for plane "+entName);
    }
    return true;
}
Пример #16
0
    void PCZSceneManager::init( const String &defaultZoneTypeName,
								const String &filename)
    {

		// delete ALL portals
		Portal * p;
		PortalList::iterator i = mPortals.begin();
		for (i = mPortals.begin(); i != mPortals.end(); i++)
		{
			p = *i;
			OGRE_DELETE p;
		}
		mPortals.clear();

		// delete all the zones
		for (ZoneMap::iterator j = mZones.begin();
			j != mZones.end(); ++j)
		{
			OGRE_DELETE j->second;
		}
		mZones.clear();

        mFrameCount = 0;

		mDefaultZoneTypeName = defaultZoneTypeName;
		mDefaultZoneFileName = filename;

        // create a new default zone
		mZoneFactoryManager = PCZoneFactoryManager::getSingletonPtr();
		mDefaultZone = createZoneFromFile(mDefaultZoneTypeName, "Default_Zone", (PCZSceneNode*)getRootSceneNode(), mDefaultZoneFileName);
    }
Пример #17
0
	void MainApplication::createScene(void)
	{
		// Application  global configuration
		GlobalConfiguration::setup("../data/xml/hot_config.xml", m_sceneManager, m_trayManager) ;

		// Creates the instance of collision detector
		new Triggers::SweepAndPrune ;
		//new Triggers::BasicCollisionDetector ;

		GlobalConfiguration::setCurrentMap("map01") ;
		creerChemin("map01");

		// create your scene here :)
		::std::cout<<"Creating scene..."<<::std::flush ;
	
		// 0- Sets the camera style
		//m_cameraManager->setStyle(OgreBites::CS_ORBIT) ; //OgreBites::CS_MANUAL) ;

		// 1- Sets the shadows (shadow volumes)
		// ------------------------------------
		m_sceneManager->setShadowTechnique(Ogre::SHADOWTYPE_NONE) ; // No shadows
		//m_sceneManager->setShadowTechnique(Ogre::SHADOWTYPE_STENCIL_MODULATIVE) ; ////Ogre::SHADOWTYPE_STENCIL_ADDITIVE) ;//
		//////m_sceneManager->setShadowDirectionalLightExtrusionDistance(10000000) ;
		//m_sceneManager->setShadowIndexBufferSize(500000) ;
		//m_sceneManager->setShadowColour(::Ogre::ColourValue(.3,.3,.3)) ;
		//////m_sceneManager->setShowDebugShadows(true) ;

		m_camera->setFarClipDistance(Ogre::Real(3000)) ;
		m_camera->setNearClipDistance(Ogre::Real(0.01)) ;

		// 2- Sets fog
		// -----------
		m_sceneManager->setFog(Ogre::FOG_LINEAR, Ogre::ColourValue(Ogre::Real(0.0), Ogre::Real(0.0), Ogre::Real(0.0)), Ogre::Real(0.03), Ogre::Real(2000.0), Ogre::Real(3000.0)) ;

		// 3- Adds lights
		Ogre::Light * light = m_sceneManager->createLight("light1siga") ;
		light->setType(Ogre::Light::LT_DIRECTIONAL) ;
		Ogre::Vector3 direction(-10.0, -10.0, -1.0) ;
		direction.normalise() ;
		light->setDirection(direction) ;
		light->setDiffuseColour(0.5,0.5,0.5) ;
		light->setSpecularColour(0.5, 0.5, 0.5) ;
		m_sceneManager->setAmbientLight(::Ogre::ColourValue(0.5,0.5,0.5)) ;
		m_sceneManager->getRootSceneNode()->attachObject(light) ;

		
		// Gets the root scene node
		Ogre::SceneNode * rootSceneNode = getRootSceneNode() ;
		
		// Setups the picking
		//m_picking = new PickingBoundingBox(m_sceneManager, m_camera, OIS::MB_Left) ;
		m_picking = new PickingSelectionBuffer(m_window, m_sceneManager, m_camera, OIS::MB_Left) ;

		// Setups the camera control system
		m_cameraManager = new RTSCameraManager(m_sceneManager, m_camera, &m_keyboardState) ;

		
		//TEST de DIJKSTRA
		/*Math::Vector2<Config::Real> my_position(0,0);
		Math::Vector2<Config::Real> target_position(10,15);
		std::vector<Math::Vector2<Config::Real>> chemin;
		if(GlobalConfiguration::getCurrentMap()->isValid(target_position))
		{
			calc_chemin(GlobalConfiguration::getCurrentMap(),my_position,target_position,chemin);
		}
		else{std::cout << "position non valide" <<std::endl;}
		std::cout << "/////////////////////////////////////////////////////////////////" << std::endl;
		std::cout << "Chemin : " << std::endl;
		for(int i=0;i<chemin.size();i++)
		{
			std::cout << chemin[i]  << std::endl;
		}
		std::cout << "/////////////////////////////////////////////////////////////////" << std::endl;*/


	}
	void OverhangTerrainSceneManager::initialise()
	{
		_pRoot = getRootSceneNode() -> createChildSceneNode( "Terrain" );
	}
Пример #19
0
// Update scene graph.
void SceneManager::updateScene(const float secondsPassed) {
    getRootSceneNode()->update(secondsPassed);
}