- fixed: Line_SetPortal crashed with one-way portals.

This commit is contained in:
Christoph Oelckers 2017-02-14 23:13:29 +01:00
parent c5204f34ca
commit 2f1b5c375e

View file

@ -225,7 +225,7 @@ static line_t *FindDestination(line_t *src, int tag)
}
}
}
return NULL;
return nullptr;
}
@ -275,7 +275,7 @@ static void SetRotation(FLinePortal *port)
void P_SpawnLinePortal(line_t* line)
{
// portal destination is special argument #0
line_t* dst = NULL;
line_t* dst = nullptr;
if (line->args[2] >= PORTT_VISUAL && line->args[2] <= PORTT_LINKED)
{
@ -304,7 +304,7 @@ void P_SpawnLinePortal(line_t* line)
port->mType = PORTT_TELEPORT;
}
}
if (port->mDestination != NULL)
if (port->mDestination != nullptr)
{
port->mDefFlags = port->mType == PORTT_VISUAL ? PORTF_VISIBLE : port->mType == PORTT_TELEPORT ? PORTF_TYPETELEPORT : PORTF_TYPEINTERACTIVE;
}
@ -357,7 +357,7 @@ void P_SpawnLinePortal(line_t* line)
void P_UpdatePortal(FLinePortal *port)
{
if (port->mDestination == NULL)
if (port->mDestination == nullptr)
{
// Portal has no destination: switch it off
port->mFlags = 0;
@ -442,16 +442,16 @@ static bool ChangePortalLine(line_t *line, int destid)
if (line->portalindex >= linePortals.Size()) return false;
FLinePortal *port = &linePortals[line->portalindex];
if (port->mType == PORTT_LINKED) return false; // linked portals cannot be changed.
if (destid == 0) port->mDestination = NULL;
if (destid == 0) port->mDestination = nullptr;
port->mDestination = FindDestination(line, destid);
if (port->mDestination == NULL)
if (port->mDestination == nullptr)
{
port->mFlags = 0;
}
else if (port->mType == PORTT_INTERACTIVE)
{
FLinePortal *portd = &linePortals[port->mDestination->portalindex];
if (portd != NULL && portd->mType == PORTT_INTERACTIVE && portd->mDestination == line)
FLinePortal *portd = port->mDestination->portalindex < linePortals.Size()? &linePortals[port->mDestination->portalindex] : nullptr;
if (portd != nullptr && portd->mType == PORTT_INTERACTIVE && portd->mDestination == line)
{
// this is a 2-way interactive portal
port->mFlags = port->mDefFlags | PORTF_INTERACTIVE;
@ -662,7 +662,7 @@ void P_TranslatePortalZ(line_t* src, double& z)
unsigned P_GetSkyboxPortal(AActor *actor)
{
if (actor == NULL) return 1; // this means a regular sky.
if (actor == nullptr) return 1; // this means a regular sky.
for (unsigned i = 0;i<level.sectorPortals.Size();i++)
{
if (level.sectorPortals[i].mSkybox == actor) return i;
@ -820,7 +820,7 @@ static bool CollectSectors(int groupid, sector_t *origin)
for (auto line : sec->Lines)
{
sector_t *other = line->frontsector == sec ? line->backsector : line->frontsector;
if (other != NULL && other != sec && other->PortalGroup != groupid)
if (other != nullptr && other != sec && other->PortalGroup != groupid)
{
other->PortalGroup = groupid;
list.Push(other);
@ -1098,10 +1098,10 @@ void P_CreateLinkedPortals()
}
// reject would just get in the way when checking sight through portals.
if (Displacements.size > 1 && rejectmatrix != NULL)
if (Displacements.size > 1 && rejectmatrix != nullptr)
{
delete[] rejectmatrix;
rejectmatrix = NULL;
rejectmatrix = nullptr;
}
// finally we must flag all planes which are obstructed by the sector's own ceiling or floor.
for (auto &sec : level.sectors)