mirror of
https://github.com/nillerusr/source-engine.git
synced 2026-08-08 01:39:36 +00:00
1
This commit is contained in:
@@ -0,0 +1,174 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Purpose: An object that is used, when modifying the state of the document,
|
||||
// to collect information about what objects changed and how they changed.
|
||||
// This aggregate info is then passed to CMapDoc::UpdateObjects which performs
|
||||
// post processing and view updates.
|
||||
//
|
||||
// $NoKeywords: $
|
||||
//=============================================================================//
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: Iterates the list of updated objects.
|
||||
//-----------------------------------------------------------------------------
|
||||
POSITION CUpdateHint::GetHeadPosition(int nIndex)
|
||||
{
|
||||
return(m_NotifyList[nIndex].Objects.GetHeadPosition());
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: Iterates the list of updated objects.
|
||||
//-----------------------------------------------------------------------------
|
||||
CMapClass *CUpdateHint::GetNext(POSITION &pos)
|
||||
{
|
||||
return(m_NotifyList[nIndex].Objects.GetNext(pos));
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: Returns the notification code for this update.
|
||||
//-----------------------------------------------------------------------------
|
||||
int CUpdateHint::GetNotifyCode(void)
|
||||
{
|
||||
return(m_NotifyList[nIndex].nCode);
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: Returns the current update region.
|
||||
//-----------------------------------------------------------------------------
|
||||
BoundBox const &CUpdateHint::GetUpdateRegion(void)
|
||||
{
|
||||
return(m_UpdateRegion);
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: Prepares to update an object.
|
||||
// Input : pObject - Object that will be updated.
|
||||
//-----------------------------------------------------------------------------
|
||||
void CUpdateHint::PreUpdateObject(CMapClass *pObject)
|
||||
{
|
||||
if (pObject != NULL)
|
||||
{
|
||||
CMapObjectList TempList;
|
||||
TempList.AddTail(pObject);
|
||||
PreUpdateObjects(&TempList);
|
||||
}
|
||||
else
|
||||
{
|
||||
PreUpdateObjects(NULL);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: Prepares to update the list of objects.
|
||||
// Input : pObjects - List of objects, NULL if none.
|
||||
//-----------------------------------------------------------------------------
|
||||
void CUpdateHint::PreUpdateObjects(CMapObjectList *pObjects)
|
||||
{
|
||||
if (pObjects != NULL)
|
||||
{
|
||||
POSITION pos = pObjects->GetHeadPosition();
|
||||
while (pos != NULL)
|
||||
{
|
||||
CMapClass *pObject = pObjects->GetNext(pos);
|
||||
if (pObject != NULL)
|
||||
{
|
||||
m_UpdateRegion.UpdateBounds(pObject);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: Prepares to update an object.
|
||||
// Input : pObject - Object that will be updated.
|
||||
//-----------------------------------------------------------------------------
|
||||
void CUpdateHint::PostUpdateObject(CMapClass *pObject, int nNotifyCode)
|
||||
{
|
||||
if (pObject != NULL)
|
||||
{
|
||||
CMapObjectList TempList;
|
||||
TempList.AddTail(pObject);
|
||||
PostUpdateObjects(&TempList, nNotifyCode);
|
||||
}
|
||||
else
|
||||
{
|
||||
PostUpdateObjects(NULL, nNotifyCode);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: Prepares to update the list of objects.
|
||||
// Input : pObjects - List of objects, NULL if none.
|
||||
//-----------------------------------------------------------------------------
|
||||
void CUpdateHint::PostUpdateObjects(CMapObjectList *pObjects, int nNotifyCode)
|
||||
{
|
||||
int nIndex = 0;
|
||||
bool bFound = false;
|
||||
|
||||
while (!bFound && (nIndex < m_ListEntries))
|
||||
{
|
||||
if (m_NotifyList[nIndex].nCode == nNotifyCode)
|
||||
{
|
||||
bFound = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
nIndex++;
|
||||
}
|
||||
}
|
||||
|
||||
if ((!bFound && (nIndex < MAX_NOTIFY_CODES))
|
||||
{
|
||||
if (nIndex < MAX_NOTIFY_CODES)
|
||||
{
|
||||
m_ListEntries++;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ASSERT(nIndex < MAX_NOTIFY_CODES);
|
||||
return;
|
||||
}
|
||||
|
||||
m_NotifyList[nIndex].Objects.AddTail(pObjects);
|
||||
|
||||
if (pObjects != NULL)
|
||||
{
|
||||
POSITION pos = pObjects->GetHeadPosition();
|
||||
while (pos != NULL)
|
||||
{
|
||||
CMapClass *pObject = pObjects->GetNext(pos);
|
||||
if (pObject != NULL)
|
||||
{
|
||||
m_UpdateRegion.UpdateBounds(pObject);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
//-----------------------------------------------------------------------------
|
||||
void CUpdateHint::Reset(void)
|
||||
{
|
||||
m_Objects.RemoveAll();
|
||||
m_UpdateRegion.ResetBounds();
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
//-----------------------------------------------------------------------------
|
||||
void CUpdateHint::UpdateBounds(BoundBox &bbox)
|
||||
{
|
||||
m_UpdateRegion.UpdateBounds(&bbox);
|
||||
}
|
||||
Reference in New Issue
Block a user