mirror of
https://github.com/1dot13/source.git
synced 2026-08-26 14:30:26 +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( );
|
HandleContinueOfTownTraining( );
|
||||||
|
|
||||||
// check if anyone is on an assignment where they have nothing to do
|
// check if anyone is on an assignment where they have nothing to do
|
||||||
ReEvaluateEveryonesNothingToDo();
|
ReEvaluateEveryonesNothingToDo(TRUE);
|
||||||
|
|
||||||
// update mapscreen
|
// update mapscreen
|
||||||
fCharacterInfoPanelDirty = TRUE;
|
fCharacterInfoPanelDirty = TRUE;
|
||||||
@@ -17083,15 +17083,17 @@ void BandageBleedingDyingPatientsBeingTreated( )
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
void ReEvaluateEveryonesNothingToDo()
|
void ReEvaluateEveryonesNothingToDo( BOOLEAN aDoExtensiveCheck )
|
||||||
{
|
{
|
||||||
INT32 iCounter = 0;
|
INT32 iCounter = 0;
|
||||||
SOLDIERTYPE *pSoldier = NULL;
|
SOLDIERTYPE *pSoldier = NULL;
|
||||||
BOOLEAN fNothingToDo;
|
BOOLEAN fNothingToDo = FALSE;
|
||||||
|
|
||||||
UINT32 numberOfMovableItemsCache[MAXIMUM_VALID_X_COORDINATE][MAXIMUM_VALID_Y_COORDINATE];
|
UINT32 numberOfMovableItemsCache[MAXIMUM_VALID_X_COORDINATE][MAXIMUM_VALID_Y_COORDINATE];
|
||||||
for (int i = 0; i < MAXIMUM_VALID_X_COORDINATE; i++) {
|
for (int i = 0; i < MAXIMUM_VALID_X_COORDINATE; ++i)
|
||||||
for (int j = 0; j < MAXIMUM_VALID_Y_COORDINATE; j++) {
|
{
|
||||||
|
for (int j = 0; j < MAXIMUM_VALID_Y_COORDINATE; ++j )
|
||||||
|
{
|
||||||
numberOfMovableItemsCache[i][j] = INT_MAX;
|
numberOfMovableItemsCache[i][j] = INT_MAX;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -17177,16 +17179,20 @@ void ReEvaluateEveryonesNothingToDo()
|
|||||||
|
|
||||||
case MOVE_EQUIPMENT:
|
case MOVE_EQUIPMENT:
|
||||||
{
|
{
|
||||||
// which sector do we want to move stuff to?
|
// unfortunately, this check can be quite expensive, so don't always perform it
|
||||||
INT16 targetX = SECTORX( pSoldier->usItemMoveSectorID )-1;
|
if ( aDoExtensiveCheck )
|
||||||
INT16 targetY = SECTORY( pSoldier->usItemMoveSectorID )-1;
|
|
||||||
|
|
||||||
if (numberOfMovableItemsCache[targetX][targetY] == INT_MAX)
|
|
||||||
{
|
{
|
||||||
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;
|
break;
|
||||||
|
|
||||||
|
|||||||
@@ -476,7 +476,7 @@ void RebuildAssignmentsBox( void );
|
|||||||
|
|
||||||
void BandageBleedingDyingPatientsBeingTreated( );
|
void BandageBleedingDyingPatientsBeingTreated( );
|
||||||
|
|
||||||
void ReEvaluateEveryonesNothingToDo();
|
void ReEvaluateEveryonesNothingToDo(BOOLEAN aDoExtensiveCheck = FALSE);
|
||||||
|
|
||||||
// set assignment for list of characters
|
// set assignment for list of characters
|
||||||
void SetAssignmentForList( INT8 bAssignment, INT8 bParam );
|
void SetAssignmentForList( INT8 bAssignment, INT8 bParam );
|
||||||
|
|||||||
Reference in New Issue
Block a user