- Use a flood-fill algorithm to define polyobjects with PolyObj_StartLine instead of a simple

loop-following algorithm. This fixes the polyobjects in http://www.doomworld.com/idgames/index.php?id=6291

SVN r2482 (trunk)
This commit is contained in:
Randy Heit 2010-08-01 05:16:09 +00:00
commit 58269a18f0
3 changed files with 69 additions and 44 deletions

View file

@ -128,27 +128,8 @@ FLightStack* LightStacks;
TArray<FMapThing> MapThingsConverted;
int sidecount;
struct sidei_t // [RH] Only keep BOOM sidedef init stuff around for init
{
union
{
// Used when unpacking sidedefs and assigning
// properties based on linedefs.
struct
{
short tag, special;
short alpha;
DWORD map;
} a;
sidei_t *sidetemp;
// Used when grouping sidedefs into loops.
struct
{
DWORD first, next;
char lineside;
} b;
};
} *sidetemp;
TArray<int> linemap;
bool UsingGLNodes;
@ -2261,9 +2242,8 @@ static void P_LoopSidedefs ()
sides[right].LeftSide = i;
}
// Throw away sidedef init info now that we're done with it
delete[] sidetemp;
sidetemp = NULL;
// We keep the sidedef init info around until after polyobjects are initialized,
// so don't delete just yet.
}
int P_DetermineTranslucency (int lumpnum)
@ -3866,6 +3846,10 @@ void P_SetupLevel (char *lumpname, int position)
PO_Init (); // Initialize the polyobjs
times[16].Unclock();
assert(sidetemp != NULL);
delete[] sidetemp;
sidetemp = NULL;
// if deathmatch, randomly spawn the active players
if (deathmatch)
{