// Target: PythonTextTail.cpp
// Search:
// CGraphicText * ms_pFont = NULL;

// Add below (distance throttle flag only - do NOT throttle UpdateShowing/Arrange)

CGraphicText * ms_pFont = NULL;

// Distance scan can be slower than render FPS. Position project + Arrange must run
// every OnRender frame or names lag/jump while the camera moves.
static bool gs_bTextTailThrottleDistance = true;

void CPythonTextTail::GetInfo(std::string* pstInfo)
{
	char szInfo[256];
	sprintf(szInfo, "TextTail: ChatTail %d, ChrTail (Map %d, List %d), ItemTail (Map %d, List %d), Pool %d",
		m_ChatTailMap.size(),
		m_CharacterTextTailMap.size(), m_CharacterTextTailList.size(),
		m_ItemTextTailMap.size(), m_ItemTextTailList.size(),
		m_TextTailPool.GetCapacity());

	pstInfo->append(szInfo);
}

void CPythonTextTail::UpdateAllTextTail()
{
	// Throttle expensive distance updates (calling this at 120+ FPS wastes CPU)
	static DWORD s_dwLastAllUpdateMS = 0;
	const DWORD dwNowMS = ELTimer_GetMSec();
	if (gs_bTextTailThrottleDistance)
	{
		if (dwNowMS - s_dwLastAllUpdateMS < 50)
			return;
	}
	s_dwLastAllUpdateMS = dwNowMS;

	CInstanceBase* pInstance = CPythonCharacterManager::Instance().GetMainInstancePtr();
	if (pInstance)
	{
		TPixelPosition pixelPos;
		pInstance->NEW_GetPixelPosition(&pixelPos);

		TTextTailMap::iterator itorMap;

		for (itorMap = m_CharacterTextTailMap.begin(); itorMap != m_CharacterTextTailMap.end(); ++itorMap)
		{
			UpdateDistance(pixelPos, itorMap->second);
		}

		for (itorMap = m_ItemTextTailMap.begin(); itorMap != m_ItemTextTailMap.end(); ++itorMap)
		{
			UpdateDistance(pixelPos, itorMap->second);
		}

		for (TChatTailMap::iterator itorChat = m_ChatTailMap.begin(); itorChat != m_ChatTailMap.end(); ++itorChat)
		{
			UpdateDistance(pixelPos, itorChat->second);
		}
	}
}
