Add a function for finding last matching structure

This commit is contained in:
Asdow
2026-05-06 11:28:11 +03:00
parent 46afd90fdc
commit 09197e421c
2 changed files with 29 additions and 0 deletions
+28
View File
@@ -1428,6 +1428,7 @@ STRUCTURE * SwapStructureForPartnerForcingGraphicalChange( INT32 sGridNo, STRUCT
} }
#endif #endif
// Finds the first structure with matching flag
STRUCTURE * FindStructure( INT32 sGridNo, UINT32 fFlags ) STRUCTURE * FindStructure( INT32 sGridNo, UINT32 fFlags )
{ {
// finds a structure that matches any of the given flags // finds a structure that matches any of the given flags
@@ -1451,6 +1452,33 @@ STRUCTURE * FindStructure( INT32 sGridNo, UINT32 fFlags )
return( NULL ); return( NULL );
} }
// Finds the last structure with matching flag
STRUCTURE* FindLastStructure(INT32 sGridNo, UINT32 fFlags)
{
// finds a structure that matches any of the given flags
STRUCTURE* pCurrent;
STRUCTURE* pLastMatch = nullptr;
//bug fix for win98 crash when traveling between sectors
if ( TileIsOutOfBounds(sGridNo) )
{
return(NULL);
}
pCurrent = gpWorldLevelData[sGridNo].pStructureHead;
while ( pCurrent != NULL )
{
if ( (pCurrent->fFlags & fFlags) != 0 )
{
pLastMatch = pCurrent;
//return(pCurrent);
}
pCurrent = pCurrent->pNext;
}
return(pLastMatch);
}
STRUCTURE * FindNextStructure( STRUCTURE * pStructure, UINT32 fFlags ) STRUCTURE * FindNextStructure( STRUCTURE * pStructure, UINT32 fFlags )
{ {
STRUCTURE * pCurrent; STRUCTURE * pCurrent;
+1
View File
@@ -47,6 +47,7 @@ BOOLEAN DeleteStructureFromWorld( STRUCTURE * pStructure );
// functions to find a structure in a location // functions to find a structure in a location
// //
STRUCTURE * FindStructure( INT32 sGridNo, UINT32 fFlags ); STRUCTURE * FindStructure( INT32 sGridNo, UINT32 fFlags );
STRUCTURE* FindLastStructure(INT32 sGridNo, UINT32 fFlags);
STRUCTURE * FindNextStructure( STRUCTURE * pStructure, UINT32 fFlags ); STRUCTURE * FindNextStructure( STRUCTURE * pStructure, UINT32 fFlags );
STRUCTURE * FindStructureByID( INT32 sGridNo, UINT16 usStructureID ); STRUCTURE * FindStructureByID( INT32 sGridNo, UINT16 usStructureID );
STRUCTURE * FindBaseStructure( STRUCTURE * pStructure ); STRUCTURE * FindBaseStructure( STRUCTURE * pStructure );