//====== Copyright © 1996-2005, Valve Corporation, All rights reserved. =======//
//
// Purpose: Physics simulation for non-havok/ipion objects
//
// $NoKeywords: $
//=============================================================================//
#include "core/stdafx.h"
#include "tier1/cvar.h"
#include "player.h"
#include "physics_main.h"
#include "engine/client/client.h"
#include "game/shared/util_shared.h"

//-----------------------------------------------------------------------------
// Purpose: Runs the command simulation for fake players
//-----------------------------------------------------------------------------
void Physics_RunBotSimulation(bool bSimulating)
{
	if (!sv_simulateBots->GetBool())
		return;

	for (int i = 0; i < MAX_PLAYERS; i++)
	{
		CClient* pClient = g_pClient->GetClient(i);
		if (!pClient)
			continue;

		if (pClient->IsActive() && pClient->IsFakeClient())
		{
			CPlayer* pPlayer = UTIL_PlayerByIndex(pClient->GetHandle());
			if (pPlayer)
				pPlayer->RunNullCommand();
		}
	}
}

//-----------------------------------------------------------------------------
// Purpose: Runs the main physics simulation loop against all entities ( except players )
//-----------------------------------------------------------------------------
void Physics_RunThinkFunctions(bool bSimulating)
{
	Physics_RunBotSimulation(bSimulating);
	v_Physics_RunThinkFunctions(bSimulating);
}

///////////////////////////////////////////////////////////////////////////////
void VPhysics_Main::Attach() const
{
	DetourAttach(&v_Physics_RunThinkFunctions, &Physics_RunThinkFunctions);
}

void VPhysics_Main::Detach() const
{
	DetourDetach(&v_Physics_RunThinkFunctions, &Physics_RunThinkFunctions);
}