void World::RemoveEntity( Entity* pEntity ) { if(mSpacePartition) mSpacePartition->Remove( pEntity ); mEntities.remove(pEntity); if( pEntity->IsA( Camera::StaticClass() ) ) RemoveCamera( Cast<Camera>( pEntity ) ); }
// Draw everything in the scene from the viewpoint of the camera given. // If no camera is supplied, the most recently created camera is used. void CTLXEngineMod::DrawScene ( ICamera* pCamera ) { TL_FN("DrawScene"); ICamera* pTempCamera = 0; if (!pCamera) { if (m_Cameras.size() > 0) { pCamera = m_Cameras.back(); } else { pCamera = pTempCamera = CreateCamera(kManual, 0, 0, 0); } } CTLXCamera* pTLXCamera; pTLXCamera = dynamic_cast<CTLXCamera*>(pCamera); // Engine based update - FPS cameras, and scene manager preparation if (pTLXCamera->GetType() == kFPS) { static float time = m_pTimer->GetTime(); float newTime = m_pTimer->GetTime(); float frameTime = newTime - time; time = newTime; float moveSpeed = pTLXCamera->GetMovementSpeed() * frameTime; float rotSpeed = pTLXCamera->GetRotationSpeed() * frameTime; if (KeyHeld(Key_Up)) { pTLXCamera->MoveLocalZ(moveSpeed); } if (KeyHeld(Key_Down)) { pTLXCamera->MoveLocalZ(-moveSpeed); } if (KeyHeld(Key_Right)) { pTLXCamera->MoveLocalX(moveSpeed); } if (KeyHeld(Key_Left)) { pTLXCamera->MoveLocalX(-moveSpeed); } pTLXCamera->RotateY(GetMouseMovementX() * rotSpeed); if (g_bLegacyTL) { pTLXCamera->RotateX(GetMouseMovementY() * rotSpeed); } else { pTLXCamera->RotateLocalX(GetMouseMovementY() * rotSpeed); } m_pWindow->SetMousePosition(m_pWindow->GetWidth() / 2, m_pWindow->GetHeight() / 2); } m_pSceneManager->Update(); // Draw scene m_pRenderDevice->ClearBackBuffer(true, 0xC0C0C0); m_pRenderDevice->StartRender(); m_pRenderManager->Render(pTLXCamera->GetAbsPositionMatrix(), pTLXCamera->GetProjectionMatrix()); m_pTextureManager->RenderSprites(); for (TFontListIter itFont = m_Fonts.begin(); itFont != m_Fonts.end(); ++itFont) { (*itFont)->DrawTextRequests(); } m_pRenderDevice->FinishRender(); m_pRenderDevice->FlipBackBuffer(); if (pTempCamera) { RemoveCamera(pTempCamera); } TL_ENDFN; }