- fixed: P_LineOpening_XFloors set some floor-related info in the ceiling case so that it never reached the point where it is needed.

- fixed: FMultiBlockLinesIterator/FMultiBlockThingsIterator need to treat radius=-1 as 'use default from actor.'
This commit is contained in:
Christoph Oelckers 2016-02-22 13:31:15 +01:00
parent 31cf712db3
commit ed2b107bc9
2 changed files with 9 additions and 10 deletions

View file

@ -821,13 +821,6 @@ void P_LineOpening_XFloors (FLineOpening &open, AActor * thing, const line_t *li
open.floorpic = highestfloorpic; open.floorpic = highestfloorpic;
open.floorterrain = highestfloorterrain; open.floorterrain = highestfloorterrain;
open.bottomsec = highestfloorsec; open.bottomsec = highestfloorsec;
}
if(lowestceiling < open.top)
{
open.top = lowestceiling;
open.ceilingpic = lowestceilingpic;
open.topsec = lowestceilingsec;
if (highestfloorplanes[0]) if (highestfloorplanes[0])
{ {
open.frontfloorplane = *highestfloorplanes[0]; open.frontfloorplane = *highestfloorplanes[0];
@ -840,6 +833,13 @@ void P_LineOpening_XFloors (FLineOpening &open, AActor * thing, const line_t *li
} }
} }
if(lowestceiling < open.top)
{
open.top = lowestceiling;
open.ceilingpic = lowestceilingpic;
open.topsec = lowestceilingsec;
}
open.lowfloor = MIN(lowestfloor[0], lowestfloor[1]); open.lowfloor = MIN(lowestfloor[0], lowestfloor[1]);
} }
} }

View file

@ -726,7 +726,7 @@ FMultiBlockLinesIterator::FMultiBlockLinesIterator(FPortalGroupArray &check, AAc
{ {
checkpoint = origin->Pos(); checkpoint = origin->Pos();
if (!check.inited) P_CollectConnectedGroups(origin->Sector->PortalGroup, checkpoint, origin->Top(), checkradius, checklist); if (!check.inited) P_CollectConnectedGroups(origin->Sector->PortalGroup, checkpoint, origin->Top(), checkradius, checklist);
checkpoint.z = checkradius; checkpoint.z = checkradius == -1? origin->radius : checkradius;
basegroup = origin->Sector->PortalGroup; basegroup = origin->Sector->PortalGroup;
Reset(); Reset();
} }
@ -801,7 +801,6 @@ bool FMultiBlockLinesIterator::Next(FMultiBlockLinesIterator::CheckResult *item)
item->line = line; item->line = line;
item->position.x = offset.x; item->position.x = offset.x;
item->position.y = offset.y; item->position.y = offset.y;
item->position.z = checkpoint.z;
item->portalflags = portalflags; item->portalflags = portalflags;
return true; return true;
} }
@ -1059,7 +1058,7 @@ FMultiBlockThingsIterator::FMultiBlockThingsIterator(FPortalGroupArray &check, A
{ {
checkpoint = origin->Pos(); checkpoint = origin->Pos();
if (!check.inited) P_CollectConnectedGroups(origin->Sector->PortalGroup, checkpoint, origin->Top(), checkradius, checklist); if (!check.inited) P_CollectConnectedGroups(origin->Sector->PortalGroup, checkpoint, origin->Top(), checkradius, checklist);
checkpoint.z = checkradius; checkpoint.z = checkradius == -1? origin->radius : checkradius;
basegroup = origin->Sector->PortalGroup; basegroup = origin->Sector->PortalGroup;
Reset(); Reset();
} }