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:
Flugente
2017-04-15 20:48:04 +00:00
parent 0c521e2623
commit baf68cd7e6
2 changed files with 20 additions and 14 deletions
+19 -13
View File
@@ -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;
+1 -1
View File
@@ -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 );