mirror of
https://github.com/1dot13/source.git
synced 2026-07-22 13:40:22 +02:00
Fix: performance of GetItem check
git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@8402 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
+19
-13
@@ -2663,7 +2663,7 @@ void UpdateAssignments()
|
||||
HandleContinueOfTownTraining( );
|
||||
|
||||
// check if anyone is on an assignment where they have nothing to do
|
||||
ReEvaluateEveryonesNothingToDo();
|
||||
ReEvaluateEveryonesNothingToDo(TRUE);
|
||||
|
||||
// update mapscreen
|
||||
fCharacterInfoPanelDirty = TRUE;
|
||||
@@ -17083,15 +17083,17 @@ void BandageBleedingDyingPatientsBeingTreated( )
|
||||
|
||||
|
||||
|
||||
void ReEvaluateEveryonesNothingToDo()
|
||||
void ReEvaluateEveryonesNothingToDo( BOOLEAN aDoExtensiveCheck )
|
||||
{
|
||||
INT32 iCounter = 0;
|
||||
SOLDIERTYPE *pSoldier = NULL;
|
||||
BOOLEAN fNothingToDo;
|
||||
BOOLEAN fNothingToDo = FALSE;
|
||||
|
||||
UINT32 numberOfMovableItemsCache[MAXIMUM_VALID_X_COORDINATE][MAXIMUM_VALID_Y_COORDINATE];
|
||||
for (int i = 0; i < MAXIMUM_VALID_X_COORDINATE; i++) {
|
||||
for (int j = 0; j < MAXIMUM_VALID_Y_COORDINATE; j++) {
|
||||
for (int i = 0; i < MAXIMUM_VALID_X_COORDINATE; ++i)
|
||||
{
|
||||
for (int j = 0; j < MAXIMUM_VALID_Y_COORDINATE; ++j )
|
||||
{
|
||||
numberOfMovableItemsCache[i][j] = INT_MAX;
|
||||
}
|
||||
}
|
||||
@@ -17177,16 +17179,20 @@ void ReEvaluateEveryonesNothingToDo()
|
||||
|
||||
case MOVE_EQUIPMENT:
|
||||
{
|
||||
// which sector do we want to move stuff to?
|
||||
INT16 targetX = SECTORX( pSoldier->usItemMoveSectorID )-1;
|
||||
INT16 targetY = SECTORY( pSoldier->usItemMoveSectorID )-1;
|
||||
|
||||
if (numberOfMovableItemsCache[targetX][targetY] == INT_MAX)
|
||||
// unfortunately, this check can be quite expensive, so don't always perform it
|
||||
if ( aDoExtensiveCheck )
|
||||
{
|
||||
numberOfMovableItemsCache[targetX][targetY] = GetNumberOfMovableItems(targetX+1, targetY+1, 0);
|
||||
}
|
||||
// which sector do we want to move stuff to?
|
||||
INT16 targetX = SECTORX( pSoldier->usItemMoveSectorID )-1;
|
||||
INT16 targetY = SECTORY( pSoldier->usItemMoveSectorID )-1;
|
||||
|
||||
fNothingToDo = (numberOfMovableItemsCache[targetX][targetY] == 0);
|
||||
if (numberOfMovableItemsCache[targetX][targetY] == INT_MAX)
|
||||
{
|
||||
numberOfMovableItemsCache[targetX][targetY] = GetNumberOfMovableItems(targetX+1, targetY+1, 0);
|
||||
}
|
||||
|
||||
fNothingToDo = (numberOfMovableItemsCache[targetX][targetY] == 0);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
@@ -476,7 +476,7 @@ void RebuildAssignmentsBox( void );
|
||||
|
||||
void BandageBleedingDyingPatientsBeingTreated( );
|
||||
|
||||
void ReEvaluateEveryonesNothingToDo();
|
||||
void ReEvaluateEveryonesNothingToDo(BOOLEAN aDoExtensiveCheck = FALSE);
|
||||
|
||||
// set assignment for list of characters
|
||||
void SetAssignmentForList( INT8 bAssignment, INT8 bParam );
|
||||
|
||||
Reference in New Issue
Block a user