mirror of
https://git.do.srb2.org/STJr/SRB2.git
synced 2024-11-24 21:31:46 +00:00
Fix #1219
This commit is contained in:
parent
4018a7fa0f
commit
7469a6271b
1 changed files with 18 additions and 6 deletions
|
@ -1026,23 +1026,35 @@ boolean P_BlockLinesIterator(INT32 x, INT32 y, boolean (*func)(line_t *))
|
||||||
//
|
//
|
||||||
boolean P_BlockThingsIterator(INT32 x, INT32 y, boolean (*func)(mobj_t *))
|
boolean P_BlockThingsIterator(INT32 x, INT32 y, boolean (*func)(mobj_t *))
|
||||||
{
|
{
|
||||||
mobj_t *mobj;
|
mobj_t *bnext = NULL;
|
||||||
blocknode_t *block;
|
blocknode_t *block, *next = NULL;
|
||||||
|
|
||||||
if (x < 0 || y < 0 || x >= bmapwidth || y >= bmapheight)
|
if (x < 0 || y < 0 || x >= bmapwidth || y >= bmapheight)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
// Check interaction with the objects in the blockmap.
|
// Check interaction with the objects in the blockmap.
|
||||||
for (block = blocklinks[y*bmapwidth + x]; block; block = block->mnext)
|
for (block = blocklinks[y*bmapwidth + x]; block; block = next)
|
||||||
{
|
{
|
||||||
mobj = block->mobj;
|
next = block->mnext;
|
||||||
|
if (next)
|
||||||
|
P_SetTarget(&bnext, next->mobj); // We want to note our reference to bnext here in case it is MF_NOTHINK and gets removed!
|
||||||
|
|
||||||
if (!func(mobj))
|
if (!func(block->mobj))
|
||||||
|
{
|
||||||
|
P_SetTarget(&bnext, NULL);
|
||||||
return false;
|
return false;
|
||||||
if (P_MobjWasRemoved(tmthing)) // func just broke blockmap chain, cannot continue.
|
}
|
||||||
|
|
||||||
|
if (P_MobjWasRemoved(tmthing) // func just popped our tmthing, cannot continue.
|
||||||
|
|| (bnext && P_MobjWasRemoved(bnext))) // func just broke blockmap chain, cannot continue.
|
||||||
|
{
|
||||||
|
P_SetTarget(&bnext, NULL);
|
||||||
return true;
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
P_SetTarget(&bnext, NULL);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue