Skip to content
Snippets Groups Projects
Commit c9a1984d authored by Lactozilla's avatar Lactozilla :speech_balloon:
Browse files

Simplify P_BlockThingsIterator

There was no reason to do what I did, since the loop only needs to hold
a reference to the next block. This reverts the function to how it was
before 7469a627, but holds the
reference properly.
parent 466f3504
Branches
Tags
1 merge request!2565Fix blocknode iterating and simplify P_BlockThingsIterator
Pipeline #6321 passed
......@@ -1052,7 +1052,6 @@ boolean P_BlockLinesIterator(INT32 x, INT32 y, boolean (*func)(line_t *))
//
boolean P_BlockThingsIterator(INT32 x, INT32 y, boolean (*func)(mobj_t *))
{
mobj_t *bnext = NULL;
blocknode_t *block, *next = NULL;
if (x < 0 || y < 0 || x >= bmapwidth || y >= bmapheight)
......@@ -1061,25 +1060,14 @@ boolean P_BlockThingsIterator(INT32 x, INT32 y, boolean (*func)(mobj_t *))
// Check interaction with the objects in the blockmap.
for (block = blocklinks[y*bmapwidth + x]; block; block = next)
{
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!
next = block->mnext; // We want to note our reference to mnext here in case the object gets removed!
if (!func(block->mobj))
{
P_SetTarget(&bnext, NULL);
return false;
}
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);
if (P_MobjWasRemoved(tmthing)) // func just popped our tmthing, cannot continue.
return true;
}
}
P_SetTarget(&bnext, NULL);
return true;
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment