void CGameWindow::Render()
{
	if (!GameServer())
		return;

	TPROF("CGameWindow::Render");

	GameServer()->Render();

	if (true)
	{
		TPROF("GUI");
		glgui::CRootPanel::Get()->Think(GameServer()->GetGameTime());
		glgui::CRootPanel::Get()->Paint(0, 0, (int)m_iWindowWidth, (int)m_iWindowHeight);
	}
}
Exemple #2
0
void CGameServer::Render()
{
	TPROF("CGameServer::Render");

	if (!GetCameraManager())
		return;

	GetCameraManager()->Think();

	GameWindow()->GetGameRenderer()->Render();
}
void CGameWindow::Run()
{
	while (IsOpen())
	{
		CProfiler::BeginFrame();

		if (true)
		{
			TPROF("CGameWindow::Run");

			PreFrame();

			if (GameServer()->IsHalting())
			{
				//DestroyGame();
				//CreateGame(m_eRestartAction);
			}

			float flTime = GetTime();
			if (GameServer())
			{
				if (GameServer()->IsLoading())
				{
					// Pump the network
					CNetwork::Think();
					RenderLoading();
					continue;
				}
				else if (GameServer()->IsClient() && !GameNetwork()->IsConnected())
				{
					//DestroyGame();
					//CreateGame(GAMETYPE_MENU);
				}
				else
				{
					GameServer()->Think(flTime);
					Render();
				}
			}

			PostFrame();
		}

		CProfiler::Render();
		SwapBuffers();
	}
}
Exemple #4
0
void CParticleSystemLibrary::Render()
{
	TPROF("CParticleSystemLibrary::Render");

	if (!r_particles.GetBool())
		return;

	MakeQuad();

	CParticleSystemLibrary* pPSL = Get();

	if (!pPSL->m_apInstances.size())
		return;

	tmap<size_t, CSystemInstance*>::iterator it;

	if (true)
	{
		CGameRenderingContext c(GameServer()->GetRenderer(), true);
		c.UseProgram("particle");
		c.SetUniform("bDiffuse", true);
		c.SetUniform("iDiffuse", 0);

		for (it = pPSL->m_apInstances.begin(); it != pPSL->m_apInstances.end(); it++)
		{
			CSystemInstance* pInstance = (*it).second;
			pInstance->Render(&c, false);
		}
	}

	if (true)
	{
		CGameRenderingContext c(GameServer()->GetRenderer(), true);
		c.UseProgram("particle");
		c.SetUniform("bDiffuse", true);
		c.SetUniform("iDiffuse", 0);
		c.SetDepthMask(false);

		for (it = pPSL->m_apInstances.begin(); it != pPSL->m_apInstances.end(); it++)
		{
			CSystemInstance* pInstance = (*it).second;
			pInstance->Render(&c, true);
		}
	}

	CRenderingContext::DebugFinish();
}
void CParticleSystemLibrary::Render()
{
	TPROF("CParticleSystemLibrary::Render");

	CParticleSystemLibrary* pPSL = Get();

	if (!pPSL->m_apInstances.size())
		return;

	tmap<size_t, CSystemInstance*>::iterator it;

	if (true)
	{
		CGameRenderingContext c(GameServer()->GetRenderer(), true);
		c.UseProgram("model");
		c.SetUniform("bDiffuse", true);
		c.SetUniform("iDiffuse", 0);
		c.SetUniform("bColorSwapInAlpha", false);

		for (it = pPSL->m_apInstances.begin(); it != pPSL->m_apInstances.end(); it++)
		{
			CSystemInstance* pInstance = (*it).second;
			if (pInstance->GetSystem()->GetBlend() == BLEND_NONE)
				pInstance->Render(&c);
		}
	}

	if (true)
	{
		CGameRenderingContext c(GameServer()->GetRenderer(), true);
		c.UseProgram("model");
		c.SetUniform("bDiffuse", true);
		c.SetUniform("iDiffuse", 0);
		c.SetUniform("bColorSwapInAlpha", false);

		for (it = pPSL->m_apInstances.begin(); it != pPSL->m_apInstances.end(); it++)
		{
			CSystemInstance* pInstance = (*it).second;
			if (pInstance->GetSystem()->GetBlend() != BLEND_NONE)
				pInstance->Render(&c);
		}
	}
}
Exemple #6
0
void CParticleSystemLibrary::Simulate()
{
	TPROF("CParticleSystemLibrary::Simulate");

	CParticleSystemLibrary* pPSL = Get();

	tmap<size_t, CSystemInstance*>::iterator it = pPSL->m_apInstances.begin();

	tvector<size_t> aiDeleted;

	for (; it != pPSL->m_apInstances.end(); it++)
	{
		CSystemInstance* pInstance = (*it).second;

		pInstance->Simulate();

		if (pInstance->IsStopped() && pInstance->GetNumParticles() == 0)
			aiDeleted.push_back((*it).first);
	}

	for (size_t i = 0; i < aiDeleted.size(); i++)
		RemoveInstance(aiDeleted[i]);
}
Exemple #7
0
void CGameServer::Think(double flHostTime)
{
	TPROF("CGameServer::Think");

	m_iFrame++;
	m_flFrameTime = flHostTime - m_flHostTime;

	m_flFrameTime *= m_flTimeScale;

	// If the framerate drops, don't let too much happen without the player seeing
	if (GameNetwork()->IsConnected())
	{
		// But not as much in multiplayer games where we need to keep the game time synchronized
		if (m_flFrameTime > 1.0f)
			m_flFrameTime = 1.0f;
	}
	else
	{
		if (m_flFrameTime > 0.15f)
			m_flFrameTime = 0.15f;
	}

	m_flGameTime += m_flFrameTime;

	m_flHostTime = flHostTime;

	if (GameNetwork()->IsConnected() && GameNetwork()->IsHost() && m_flHostTime > m_flNextClientInfoUpdate)
	{
		m_flNextClientInfoUpdate = m_flHostTime + 5.0f;

		size_t iClientsConnected = GameNetwork()->GetClientsConnected();
		for (size_t i = 0; i < iClientsConnected; i++)
		{
			size_t iClient = GameNetwork()->GetClientConnectionId(i);
			if (iClient == ~0)
				continue;

			GameNetwork()->CallFunction(iClient, "ClientInfo", iClient, GetGameTime());
		}
	}

	// Erase anything deleted last frame.
	for (size_t i = 0; i < m_ahDeletedEntities.size(); i++)
		delete m_ahDeletedEntities[i];

	m_ahDeletedEntities.clear();

	if (CWorkbench::IsActive())
		Workbench()->Think();

	CNetwork::Think();

	size_t iMaxEntities = GameServer()->GetMaxEntities();
	for (size_t i = 0; i < iMaxEntities; i++)
	{
		CBaseEntity* pEntity = CBaseEntity::GetEntity(i);
		if (!pEntity)
			continue;

		pEntity->Think();

		if (m_bHalting)
			break;
	}

	Simulate();

	Think();

	if (GameNetwork()->IsHost())
		CGameServerNetwork::UpdateNetworkVariables(NETWORK_TOCLIENTS);

	if (GameNetwork()->IsHost())
	{
		for (size_t i = 0; i < iMaxEntities; i++)
		{
			CBaseEntity* pEntity = CBaseEntity::GetEntity(i);
			if (!pEntity)
				continue;

			if (!pEntity->HasIssuedClientSpawn())
				pEntity->IssueClientSpawn();

			if (m_bHalting)
				break;
		}
	}

	CParticleSystemLibrary::Simulate();

	TPortal_Think();
}