- fixed: P_CheckSight returned incorrect results when having to traverse the collected lines just for adding more portals to the list.

This commit is contained in:
Christoph Oelckers 2016-12-08 11:23:08 +01:00
parent 66d287ea81
commit d741e0eb26

View file

@ -716,6 +716,7 @@ bool SightCheck::P_SightPathTraverse ()
// step through map blocks // step through map blocks
// Count is present to prevent a round off error from skipping the break // Count is present to prevent a round off error from skipping the break
int itres;
for (count = 0 ; count < 1000 ; count++) for (count = 0 ; count < 1000 ; count++)
{ {
// end traversing when reaching the end of the blockmap // end traversing when reaching the end of the blockmap
@ -724,15 +725,15 @@ bool SightCheck::P_SightPathTraverse ()
{ {
break; break;
} }
int res = P_SightBlockLinesIterator(mapx, mapy); itres = P_SightBlockLinesIterator(mapx, mapy);
if (res == 0) if (itres == 0)
{ {
sightcounts[1]++; sightcounts[1]++;
return false; // early out return false; // early out
} }
// either reached the end or had an early-out condition with portals left to check, // either reached the end or had an early-out condition with portals left to check,
if (res == -1 || (mapxstep | mapystep) == 0) if (itres == -1 || (mapxstep | mapystep) == 0)
break; break;
switch (((xs_FloorToInt(yintercept) == mapy) << 1) | (xs_FloorToInt(xintercept) == mapx)) switch (((xs_FloorToInt(yintercept) == mapy) << 1) | (xs_FloorToInt(xintercept) == mapx))
@ -787,7 +788,9 @@ sightcounts[1]++;
// //
sightcounts[2]++; sightcounts[2]++;
return P_SightTraverseIntercepts ( ); bool traverseres = P_SightTraverseIntercepts ( );
if (itres == -1) return false; // if the iterator had an early out there was no line of sight. The traverser was only called to collect more portals.
return traverseres;
} }
/* /*