//---------------------------------------------------------------------------- Node* Game::LoadAndInitializeScene() { Importer importer("Data/Scene/"); Node* pScene = importer.LoadSceneFromXml("Scene.xml", mspPhysicsWorld); if (!pScene) { return NULL; } NodeCamera* pCameraNode = pScene->FindChild<NodeCamera>(); WIRE_ASSERT(pCameraNode /* No Camera in scene.xml */); mspSceneCamera = pCameraNode->Get(); mSortingCuller.SetCamera(mspSceneCamera); // The maximum number of objects that are going to be culled is the // number of objects we imported. If we don't set the size of the set now, // the culler will dynamically increase it during runtime. This is not // a big deal, however it is better to avoid memory allocations during the // render loop. UInt renderObjectCount = importer.GetStatistics()->RenderObjectCount; mSortingCuller.SetMaxQuantity(renderObjectCount); // Create and configure probe robot controller SpatialPtr spRedHealthBar = mspGUI->FindChild("RedHealthBar"); WIRE_ASSERT(spRedHealthBar /* No RedHealthBar in GUI.xml */); Node* pProbeRobotSpatial = DynamicCast<Node>(pScene->FindChild("Probe Robot")); WIRE_ASSERT(pProbeRobotSpatial /* No Probe Robot in Scene.xml */); // Detach red energy/health bar and attach it robot probe as a billboard NodeBillboard* pBillboard = WIRE_NEW NodeBillboard; pProbeRobotSpatial->AttachChild(pBillboard); Node* pParent = DynamicCast<Node>(spRedHealthBar->GetParent()); WIRE_ASSERT(pParent); pParent->DetachChild(spRedHealthBar); pBillboard->AttachChild(spRedHealthBar); Spatial* pPlayerSpatial = pScene->FindChild("Player"); WIRE_ASSERT(pPlayerSpatial /* No Player in Scene.xml */); mspProbeRobot = WIRE_NEW ProbeRobot(mspPhysicsWorld, pPlayerSpatial, spRedHealthBar); pProbeRobotSpatial->AttachController(mspProbeRobot); // Create and configure player controller mspPlayer = WIRE_NEW Player(mspSceneCamera, mspPhysicsWorld); pPlayerSpatial->AttachController(mspPlayer); Spatial* pPlatform = pScene->FindChild("Platform"); WIRE_ASSERT(pPlatform /* Platform object missing in scene */); pPlatform->AttachController(WIRE_NEW Elevator(mspPhysicsWorld)); pScene->Bind(GetRenderer()); pScene->WarmUpRendering(GetRenderer()); return pScene; }
//---------------------------------------------------------------------------- Node* Game::LoadAndInitializeGUI() { Importer importer("Data/GUI/"); Node* pRoot = importer.LoadSceneFromXml("GUI.xml"); if (!pRoot) { return NULL; } NodeCamera* pCameraNode = pRoot->FindChild<NodeCamera>(); WIRE_ASSERT(pCameraNode /* No Camera in GUI.xml */); mspGUICamera = pCameraNode->Get(); mspCrosshair = pRoot->FindChild("Crosshair"); WIRE_ASSERT(mspCrosshair /* No Crosshair in GUI.xml */); pRoot->Bind(GetRenderer()); return pRoot; }
//---------------------------------------------------------------------------- Node* Game::LoadAndInitializeLoading() { Importer importer("Data/Logo/"); Node* pRoot = importer.LoadSceneFromXml("logo.xml"); if (!pRoot) { return NULL; } NodeCamera* pCameraNode = pRoot->FindChild<NodeCamera>(); WIRE_ASSERT(pCameraNode /* No Camera in logo.xml */); mspLogoCamera = pCameraNode->Get(); // center 512x256 logo on screen pRoot->Local.SetTranslate(Vector3F((GetWidthF()-512.0F) * 0.5F, (GetHeightF() - 256.0F) * 0.5F, 0)); pRoot->Bind(GetRenderer()); return pRoot; }