Example #1
0
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;
	}