// Target: PythonTextTail.cpp
// Search:
// void CPythonTextTail::UpdateShowingTextTail()

// Replace whole function - Identity once, cull 4000, skip !isShow. NO frame throttle.

void CPythonTextTail::UpdateShowingTextTail()
{
	// IMPORTANT: Identity() must be done ONCE per batch, not per text tail.
	CPythonGraphic& rpyGraphic = CPythonGraphic::Instance();
	rpyGraphic.Identity();

	TTextTailList::iterator itor;

	// Items
	for (itor = m_ItemTextTailList.begin(); itor != m_ItemTextTailList.end(); ++itor)
	{
		TTextTail* p = *itor;
		if (!p || !p->pOwner)
			continue;

		// Simple distance culling (distance is updated in UpdateAllTextTail, throttled)
		if (p->fDistanceFromPlayer > 4000.0f)
			continue;

		UpdateTextTail(p);
	}

	// Chat tails
	for (TChatTailMap::iterator itorChat = m_ChatTailMap.begin(); itorChat != m_ChatTailMap.end(); ++itorChat)
	{
		TTextTail* p = itorChat->second;
		if (!p || !p->pOwner)
			continue;

		if (p->fDistanceFromPlayer > 4000.0f)
			continue;

		UpdateTextTail(p);
	}

	// Characters
	for (itor = m_CharacterTextTailList.begin(); itor != m_CharacterTextTailList.end(); ++itor)
	{
		TTextTail* p = *itor;
		if (!p || !p->pOwner)
			continue;

		// Skip hidden owners early
		if (!p->pOwner->isShow())
			continue;

		if (p->fDistanceFromPlayer > 4000.0f)
			continue;

		UpdateTextTail(p);
	}
}
