Smart tree top hiding: code optimization.

git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@8940 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
Sevenfm
2021-02-17 15:24:00 +00:00
parent 4471b8ef97
commit 27d681905d
+53 -60
View File
@@ -4086,85 +4086,78 @@ void UpdateTreeVisibility()
//Get the gridno the cursor is at //Get the gridno the cursor is at
GetMouseMapPos(&usMouseSpot); GetMouseMapPos(&usMouseSpot);
// first show all trees // show all trees except trees near visible soldiers
for (cnt = 0; cnt < WORLD_MAX; cnt++) for (cnt = 0; cnt < WORLD_MAX; cnt++)
{ {
pNode = gpWorldLevelData[cnt].pStructHead; pNode = gpWorldLevelData[cnt].pStructHead;
while (pNode != NULL) while (pNode != NULL)
{ {
GetTileFlags(pNode->usIndex, &fTileFlags); GetTileFlags(pNode->usIndex, &fTileFlags);
if (fTileFlags & FULL3D_TILE) if (fTileFlags & FULL3D_TILE)
{ {
if ((pNode->uiFlags & LEVELNODE_REVEALTREES)) pStructureData = pNode->pStructureData;
if (pStructureData)
sSpot = pNode->pStructureData->sGridNo;
//sSpot = pNode->pStructureData->sBaseGridNo;
else
sSpot = NOWHERE;
if (!TileIsOutOfBounds(sSpot))
{ {
pNode->uiFlags &= ~(LEVELNODE_REVEALTREES); fHideTree = FALSE;
fRerender = TRUE;
}
}
pNode = pNode->pNext;
}
}
// now show all trees except trees near visible soldiers // check trees near cursor position
for (cnt = 0; cnt < WORLD_MAX; cnt++) if (!TileIsOutOfBounds(usMouseSpot) &&
{ (PythSpacesAway(sSpot, usMouseSpot) <= 2 && AIDirection(sSpot, usMouseSpot) == 0 ||
pNode = gpWorldLevelData[cnt].pStructHead; PythSpacesAway(sSpot, usMouseSpot) <= 5 && AIDirection(sSpot, usMouseSpot) == 7 ||
PythSpacesAway(sSpot, usMouseSpot) <= 2 && AIDirection(sSpot, usMouseSpot) == 6))
while (pNode != NULL)
{
pStructureData = pNode->pStructureData;
if (pStructureData)
sSpot = pNode->pStructureData->sGridNo;
//sSpot = pNode->pStructureData->sBaseGridNo;
else
sSpot = NOWHERE;
fHideTree = FALSE;
// check trees near cursor position
if (!TileIsOutOfBounds(usMouseSpot) &&
(PythSpacesAway(sSpot, usMouseSpot) <= 2 && AIDirection(sSpot, usMouseSpot) == 0 ||
PythSpacesAway(sSpot, usMouseSpot) <= 5 && AIDirection(sSpot, usMouseSpot) == 7 ||
PythSpacesAway(sSpot, usMouseSpot) <= 2 && AIDirection(sSpot, usMouseSpot) == 6))
{
fHideTree = TRUE;
}
// find visible soldier near spot
if (!TileIsOutOfBounds(sSpot) && !fHideTree)
{
for (UINT8 uiLoop = 0; uiLoop < guiNumMercSlots; uiLoop++)
{
pOpponent = MercSlots[uiLoop];
if (pOpponent &&
pOpponent->bVisible != -1 &&
!TileIsOutOfBounds(pOpponent->sGridNo) &&
(PythSpacesAway(sSpot, pOpponent->sGridNo) <= 2 && AIDirection(sSpot, pOpponent->sGridNo) == 0 ||
PythSpacesAway(sSpot, pOpponent->sGridNo) <= 5 && AIDirection(sSpot, pOpponent->sGridNo) == 7 ||
PythSpacesAway(sSpot, pOpponent->sGridNo) <= 2 && AIDirection(sSpot, pOpponent->sGridNo) == 6))
{ {
fHideTree = TRUE; fHideTree = TRUE;
break;
} }
}
}
if (fHideTree) // find visible soldier near spot
{ if (!TileIsOutOfBounds(sSpot) && !fHideTree)
GetTileFlags(pNode->usIndex, &fTileFlags);
if (fTileFlags & FULL3D_TILE)
{
if (!(pNode->uiFlags & LEVELNODE_REVEALTREES))
{ {
pNode->uiFlags |= (LEVELNODE_REVEALTREES); for (UINT8 uiLoop = 0; uiLoop < guiNumMercSlots; uiLoop++)
fRerender = TRUE; {
fHidden = TRUE; pOpponent = MercSlots[uiLoop];
if (pOpponent &&
pOpponent->bVisible != -1 &&
!TileIsOutOfBounds(pOpponent->sGridNo) &&
(PythSpacesAway(sSpot, pOpponent->sGridNo) <= 2 && AIDirection(sSpot, pOpponent->sGridNo) == 0 ||
PythSpacesAway(sSpot, pOpponent->sGridNo) <= 5 && AIDirection(sSpot, pOpponent->sGridNo) == 7 ||
PythSpacesAway(sSpot, pOpponent->sGridNo) <= 2 && AIDirection(sSpot, pOpponent->sGridNo) == 6))
{
fHideTree = TRUE;
break;
}
}
}
if (fHideTree)
{
if (!(pNode->uiFlags & LEVELNODE_REVEALTREES))
{
pNode->uiFlags |= (LEVELNODE_REVEALTREES);
fRerender = TRUE;
fHidden = TRUE;
}
}
else
{
if ((pNode->uiFlags & LEVELNODE_REVEALTREES))
{
pNode->uiFlags &= ~(LEVELNODE_REVEALTREES);
fRerender = TRUE;
}
} }
} }
} }
pNode = pNode->pNext; pNode = pNode->pNext;
} }
} }