- fixed: For reflective floors, closed doors need to be considered an outer boundary, even if the floor below the door is reflective itself.

This commit is contained in:
Christoph Oelckers 2017-03-07 18:59:16 +01:00
parent 7ce8009576
commit 7a0c466b24
2 changed files with 7 additions and 2 deletions

View file

@ -289,7 +289,7 @@ void GLWall::SkyTop(seg_t * seg,sector_t * fs,sector_t * bs,vertex_t * v1,vertex
if (frontreflect > 0) if (frontreflect > 0)
{ {
float backreflect = bs->GetReflect(sector_t::ceiling); float backreflect = bs->GetReflect(sector_t::ceiling);
if (backreflect > 0 && bs->ceilingplane.fD() == fs->ceilingplane.fD()) if (backreflect > 0 && bs->ceilingplane.fD() == fs->ceilingplane.fD() && !bs->isClosed())
{ {
// Don't add intra-portal line to the portal. // Don't add intra-portal line to the portal.
return; return;
@ -368,7 +368,7 @@ void GLWall::SkyBottom(seg_t * seg,sector_t * fs,sector_t * bs,vertex_t * v1,ver
if (frontreflect > 0) if (frontreflect > 0)
{ {
float backreflect = bs->GetReflect(sector_t::floor); float backreflect = bs->GetReflect(sector_t::floor);
if (backreflect > 0 && bs->floorplane.fD() == fs->floorplane.fD()) if (backreflect > 0 && bs->floorplane.fD() == fs->floorplane.fD() && !bs->isClosed())
{ {
// Don't add intra-portal line to the portal. // Don't add intra-portal line to the portal.
return; return;

View file

@ -955,6 +955,11 @@ public:
return LowestFloorAt(a->Pos(), resultsec); return LowestFloorAt(a->Pos(), resultsec);
} }
bool isClosed() const
{
return floorplane.Normal() == -ceilingplane.Normal() && floorplane.D == -ceilingplane.D;
}
double NextHighestCeilingAt(double x, double y, double bottomz, double topz, int flags = 0, sector_t **resultsec = NULL, F3DFloor **resultffloor = NULL); double NextHighestCeilingAt(double x, double y, double bottomz, double topz, int flags = 0, sector_t **resultsec = NULL, F3DFloor **resultffloor = NULL);
double NextLowestFloorAt(double x, double y, double z, int flags = 0, double steph = 0, sector_t **resultsec = NULL, F3DFloor **resultffloor = NULL); double NextLowestFloorAt(double x, double y, double z, int flags = 0, double steph = 0, sector_t **resultsec = NULL, F3DFloor **resultffloor = NULL);