mirror of
https://github.com/ZDoom/qzdoom.git
synced 2025-03-01 15:20:53 +00:00
- p_sight.cpp, p_spec.cpp and p_switch.cpp refactored.
This commit is contained in:
parent
4d8070927d
commit
13e25faea7
3 changed files with 39 additions and 38 deletions
|
@ -68,11 +68,11 @@ public:
|
||||||
|
|
||||||
SightCheck(const AActor * t1, const AActor * t2, int flags)
|
SightCheck(const AActor * t1, const AActor * t2, int flags)
|
||||||
{
|
{
|
||||||
lastztop = lastzbottom = sightzstart = t1->z + t1->height - (t1->height>>2);
|
lastztop = lastzbottom = sightzstart = t1->Z() + t1->height - (t1->height>>2);
|
||||||
lastsector = t1->Sector;
|
lastsector = t1->Sector;
|
||||||
sightthing=t1;
|
sightthing=t1;
|
||||||
seeingthing=t2;
|
seeingthing=t2;
|
||||||
bottomslope = t2->z - sightzstart;
|
bottomslope = t2->Z() - sightzstart;
|
||||||
topslope = bottomslope + t2->height;
|
topslope = bottomslope + t2->height;
|
||||||
Flags = flags;
|
Flags = flags;
|
||||||
|
|
||||||
|
@ -132,7 +132,7 @@ bool SightCheck::PTR_SightTraverse (intercept_t *in)
|
||||||
{
|
{
|
||||||
int frontflag;
|
int frontflag;
|
||||||
|
|
||||||
frontflag = P_PointOnLineSidePrecise(sightthing->x, sightthing->y, li);
|
frontflag = P_PointOnLineSidePrecise(sightthing->X(), sightthing->Y(), li);
|
||||||
|
|
||||||
//Check 3D FLOORS!
|
//Check 3D FLOORS!
|
||||||
for(int i=1;i<=2;i++)
|
for(int i=1;i<=2;i++)
|
||||||
|
@ -413,8 +413,8 @@ bool SightCheck::P_SightTraverseIntercepts ()
|
||||||
if((rover->flags & FF_SOLID) == myseethrough || !(rover->flags & FF_EXISTS)) continue;
|
if((rover->flags & FF_SOLID) == myseethrough || !(rover->flags & FF_EXISTS)) continue;
|
||||||
if ((Flags & SF_IGNOREWATERBOUNDARY) && (rover->flags & FF_SOLID) == 0) continue;
|
if ((Flags & SF_IGNOREWATERBOUNDARY) && (rover->flags & FF_SOLID) == 0) continue;
|
||||||
|
|
||||||
fixed_t ff_bottom=rover->bottom.plane->ZatPoint(seeingthing->x, seeingthing->y);
|
fixed_t ff_bottom=rover->bottom.plane->ZatPoint(seeingthing);
|
||||||
fixed_t ff_top=rover->top.plane->ZatPoint(seeingthing->x, seeingthing->y);
|
fixed_t ff_top=rover->top.plane->ZatPoint(seeingthing);
|
||||||
|
|
||||||
if (lastztop<=ff_bottom && topz>ff_bottom && lastzbottom<=ff_bottom && bottomz>ff_bottom) return false;
|
if (lastztop<=ff_bottom && topz>ff_bottom && lastzbottom<=ff_bottom && bottomz>ff_bottom) return false;
|
||||||
if (lastzbottom>=ff_top && bottomz<ff_top && lastztop>=ff_top && topz<ff_top) return false;
|
if (lastzbottom>=ff_top && bottomz<ff_top && lastztop>=ff_top && topz<ff_top) return false;
|
||||||
|
@ -458,8 +458,8 @@ bool SightCheck::P_SightPathTraverse (fixed_t x1, fixed_t y1, fixed_t x2, fixed_
|
||||||
|
|
||||||
if(!(rover->flags & FF_EXISTS)) continue;
|
if(!(rover->flags & FF_EXISTS)) continue;
|
||||||
|
|
||||||
fixed_t ff_bottom=rover->bottom.plane->ZatPoint(sightthing->x, sightthing->y);
|
fixed_t ff_bottom=rover->bottom.plane->ZatPoint(sightthing);
|
||||||
fixed_t ff_top=rover->top.plane->ZatPoint(sightthing->x, sightthing->y);
|
fixed_t ff_top=rover->top.plane->ZatPoint(sightthing);
|
||||||
|
|
||||||
if (sightzstart < ff_top && sightzstart >= ff_bottom)
|
if (sightzstart < ff_top && sightzstart >= ff_bottom)
|
||||||
{
|
{
|
||||||
|
@ -691,16 +691,16 @@ sightcounts[0]++;
|
||||||
if (!(flags & SF_IGNOREWATERBOUNDARY))
|
if (!(flags & SF_IGNOREWATERBOUNDARY))
|
||||||
{
|
{
|
||||||
if ((s1->GetHeightSec() &&
|
if ((s1->GetHeightSec() &&
|
||||||
((t1->z + t1->height <= s1->heightsec->floorplane.ZatPoint (t1->x, t1->y) &&
|
((t1->Z() + t1->height <= s1->heightsec->floorplane.ZatPoint(t1) &&
|
||||||
t2->z >= s1->heightsec->floorplane.ZatPoint (t2->x, t2->y)) ||
|
t2->Z() >= s1->heightsec->floorplane.ZatPoint(t2)) ||
|
||||||
(t1->z >= s1->heightsec->ceilingplane.ZatPoint (t1->x, t1->y) &&
|
(t1->Z() >= s1->heightsec->ceilingplane.ZatPoint(t1) &&
|
||||||
t2->z + t1->height <= s1->heightsec->ceilingplane.ZatPoint (t2->x, t2->y))))
|
t2->Z() + t1->height <= s1->heightsec->ceilingplane.ZatPoint(t2))))
|
||||||
||
|
||
|
||||||
(s2->GetHeightSec() &&
|
(s2->GetHeightSec() &&
|
||||||
((t2->z + t2->height <= s2->heightsec->floorplane.ZatPoint (t2->x, t2->y) &&
|
((t2->Z() + t2->height <= s2->heightsec->floorplane.ZatPoint(t2) &&
|
||||||
t1->z >= s2->heightsec->floorplane.ZatPoint (t1->x, t1->y)) ||
|
t1->Z() >= s2->heightsec->floorplane.ZatPoint(t1)) ||
|
||||||
(t2->z >= s2->heightsec->ceilingplane.ZatPoint (t2->x, t2->y) &&
|
(t2->Z() >= s2->heightsec->ceilingplane.ZatPoint(t2) &&
|
||||||
t1->z + t2->height <= s2->heightsec->ceilingplane.ZatPoint (t1->x, t1->y)))))
|
t1->Z() + t2->height <= s2->heightsec->ceilingplane.ZatPoint(t1)))))
|
||||||
{
|
{
|
||||||
res = false;
|
res = false;
|
||||||
goto done;
|
goto done;
|
||||||
|
@ -713,7 +713,7 @@ sightcounts[0]++;
|
||||||
validcount++;
|
validcount++;
|
||||||
{
|
{
|
||||||
SightCheck s(t1, t2, flags);
|
SightCheck s(t1, t2, flags);
|
||||||
res = s.P_SightPathTraverse (t1->x, t1->y, t2->x, t2->y);
|
res = s.P_SightPathTraverse (t1->X(), t1->Y(), t2->X(), t2->Y());
|
||||||
}
|
}
|
||||||
|
|
||||||
done:
|
done:
|
||||||
|
|
|
@ -430,7 +430,7 @@ void P_PlayerInSpecialSector (player_t *player, sector_t * sector)
|
||||||
{
|
{
|
||||||
// Falling, not all the way down yet?
|
// Falling, not all the way down yet?
|
||||||
sector = player->mo->Sector;
|
sector = player->mo->Sector;
|
||||||
if (player->mo->z != sector->floorplane.ZatPoint(player->mo)
|
if (player->mo->Z() != sector->floorplane.ZatPoint(player->mo)
|
||||||
&& !player->mo->waterlevel)
|
&& !player->mo->waterlevel)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
|
@ -507,7 +507,7 @@ static void DoSectorDamage(AActor *actor, sector_t *sec, int amount, FName type,
|
||||||
if (!(flags & DAMAGE_PLAYERS) && actor->player != NULL)
|
if (!(flags & DAMAGE_PLAYERS) && actor->player != NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (!(flags & DAMAGE_IN_AIR) && actor->z != sec->floorplane.ZatPoint(actor) && !actor->waterlevel)
|
if (!(flags & DAMAGE_IN_AIR) && actor->Z() != sec->floorplane.ZatPoint(actor) && !actor->waterlevel)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (protectClass != NULL)
|
if (protectClass != NULL)
|
||||||
|
@ -553,12 +553,12 @@ void P_SectorDamage(int tag, int amount, FName type, const PClass *protectClass,
|
||||||
z1 = z2;
|
z1 = z2;
|
||||||
z2 = zz;
|
z2 = zz;
|
||||||
}
|
}
|
||||||
if (actor->z + actor->height > z1)
|
if (actor->Z() + actor->height > z1)
|
||||||
{
|
{
|
||||||
// If DAMAGE_IN_AIR is used, anything not beneath the 3D floor will be
|
// If DAMAGE_IN_AIR is used, anything not beneath the 3D floor will be
|
||||||
// damaged (so, anything touching it or above it). Other 3D floors between
|
// damaged (so, anything touching it or above it). Other 3D floors between
|
||||||
// the actor and this one will not stop this effect.
|
// the actor and this one will not stop this effect.
|
||||||
if ((flags & DAMAGE_IN_AIR) || actor->z <= z2)
|
if ((flags & DAMAGE_IN_AIR) || actor->Z() <= z2)
|
||||||
{
|
{
|
||||||
// Here we pass the DAMAGE_IN_AIR flag to disable the floor check, since it
|
// Here we pass the DAMAGE_IN_AIR flag to disable the floor check, since it
|
||||||
// only works with the real sector's floor. We did the appropriate height checks
|
// only works with the real sector's floor. We did the appropriate height checks
|
||||||
|
@ -1058,7 +1058,7 @@ void P_SpawnSkybox(ASkyViewpoint *origin)
|
||||||
if (Sector == NULL)
|
if (Sector == NULL)
|
||||||
{
|
{
|
||||||
Printf("Sector not initialized for SkyCamCompat\n");
|
Printf("Sector not initialized for SkyCamCompat\n");
|
||||||
origin->Sector = Sector = P_PointInSector(origin->x, origin->y);
|
origin->Sector = Sector = P_PointInSector(origin->X(), origin->Y());
|
||||||
}
|
}
|
||||||
if (Sector)
|
if (Sector)
|
||||||
{
|
{
|
||||||
|
@ -2152,8 +2152,8 @@ DPusher::DPusher (DPusher::EPusher type, line_t *l, int magnitude, int angle,
|
||||||
if (source) // point source exist?
|
if (source) // point source exist?
|
||||||
{
|
{
|
||||||
m_Radius = (m_Magnitude) << (FRACBITS+1); // where force goes to zero
|
m_Radius = (m_Magnitude) << (FRACBITS+1); // where force goes to zero
|
||||||
m_X = m_Source->x;
|
m_X = m_Source->X();
|
||||||
m_Y = m_Source->y;
|
m_Y = m_Source->Y();
|
||||||
}
|
}
|
||||||
m_Affectee = affectee;
|
m_Affectee = affectee;
|
||||||
}
|
}
|
||||||
|
@ -2268,7 +2268,7 @@ void DPusher::Tick ()
|
||||||
{
|
{
|
||||||
if (hsec == NULL)
|
if (hsec == NULL)
|
||||||
{ // NOT special water sector
|
{ // NOT special water sector
|
||||||
if (thing->z > thing->floorz) // above ground
|
if (thing->Z() > thing->floorz) // above ground
|
||||||
{
|
{
|
||||||
xspeed = m_Xmag; // full force
|
xspeed = m_Xmag; // full force
|
||||||
yspeed = m_Ymag;
|
yspeed = m_Ymag;
|
||||||
|
@ -2282,7 +2282,7 @@ void DPusher::Tick ()
|
||||||
else // special water sector
|
else // special water sector
|
||||||
{
|
{
|
||||||
ht = hsec->floorplane.ZatPoint(thing);
|
ht = hsec->floorplane.ZatPoint(thing);
|
||||||
if (thing->z > ht) // above ground
|
if (thing->Z() > ht) // above ground
|
||||||
{
|
{
|
||||||
xspeed = m_Xmag; // full force
|
xspeed = m_Xmag; // full force
|
||||||
yspeed = m_Ymag;
|
yspeed = m_Ymag;
|
||||||
|
@ -2310,7 +2310,7 @@ void DPusher::Tick ()
|
||||||
{ // special water sector
|
{ // special water sector
|
||||||
floor = &hsec->floorplane;
|
floor = &hsec->floorplane;
|
||||||
}
|
}
|
||||||
if (thing->z > floor->ZatPoint(thing))
|
if (thing->Z() > floor->ZatPoint(thing))
|
||||||
{ // above ground
|
{ // above ground
|
||||||
xspeed = yspeed = 0; // no force
|
xspeed = yspeed = 0; // no force
|
||||||
}
|
}
|
||||||
|
|
|
@ -138,8 +138,9 @@ bool P_CheckSwitchRange(AActor *user, line_t *line, int sideno)
|
||||||
|
|
||||||
P_MakeDivline (line, &dll);
|
P_MakeDivline (line, &dll);
|
||||||
|
|
||||||
dlu.x = user->x;
|
fixedvec3 pos = user->PosRelative(line);
|
||||||
dlu.y = user->y;
|
dlu.x = pos.x;
|
||||||
|
dlu.y = pos.y;
|
||||||
dlu.dx = finecosine[user->angle >> ANGLETOFINESHIFT];
|
dlu.dx = finecosine[user->angle >> ANGLETOFINESHIFT];
|
||||||
dlu.dy = finesine[user->angle >> ANGLETOFINESHIFT];
|
dlu.dy = finesine[user->angle >> ANGLETOFINESHIFT];
|
||||||
inter = P_InterceptVector(&dll, &dlu);
|
inter = P_InterceptVector(&dll, &dlu);
|
||||||
|
@ -167,11 +168,11 @@ bool P_CheckSwitchRange(AActor *user, line_t *line, int sideno)
|
||||||
onesided:
|
onesided:
|
||||||
fixed_t sectorc = front->ceilingplane.ZatPoint(checkx, checky);
|
fixed_t sectorc = front->ceilingplane.ZatPoint(checkx, checky);
|
||||||
fixed_t sectorf = front->floorplane.ZatPoint(checkx, checky);
|
fixed_t sectorf = front->floorplane.ZatPoint(checkx, checky);
|
||||||
return (user->z + user->height >= sectorf && user->z <= sectorc);
|
return (user->Top() >= sectorf && user->Z() <= sectorc);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Now get the information from the line.
|
// Now get the information from the line.
|
||||||
P_LineOpening(open, NULL, line, checkx, checky, user->x, user->y);
|
P_LineOpening(open, NULL, line, checkx, checky, pos.x, pos.y);
|
||||||
if (open.range <= 0)
|
if (open.range <= 0)
|
||||||
goto onesided;
|
goto onesided;
|
||||||
|
|
||||||
|
@ -187,8 +188,8 @@ bool P_CheckSwitchRange(AActor *user, line_t *line, int sideno)
|
||||||
if (!(rover->flags & FF_EXISTS)) continue;
|
if (!(rover->flags & FF_EXISTS)) continue;
|
||||||
if (!(rover->flags & FF_UPPERTEXTURE)) continue;
|
if (!(rover->flags & FF_UPPERTEXTURE)) continue;
|
||||||
|
|
||||||
if (user->z > rover->top.plane->ZatPoint(checkx, checky) ||
|
if (user->Z() > rover->top.plane->ZatPoint(checkx, checky) ||
|
||||||
user->z + user->height < rover->bottom.plane->ZatPoint(checkx, checky))
|
user->Top() < rover->bottom.plane->ZatPoint(checkx, checky))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
// This 3D floor depicts a switch texture in front of the player's eyes
|
// This 3D floor depicts a switch texture in front of the player's eyes
|
||||||
|
@ -196,7 +197,7 @@ bool P_CheckSwitchRange(AActor *user, line_t *line, int sideno)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return (user->z + user->height > open.top);
|
return (user->Top() > open.top);
|
||||||
}
|
}
|
||||||
else if ((TexMan.FindSwitch(side->GetTexture(side_t::bottom))) != NULL)
|
else if ((TexMan.FindSwitch(side->GetTexture(side_t::bottom))) != NULL)
|
||||||
{
|
{
|
||||||
|
@ -209,8 +210,8 @@ bool P_CheckSwitchRange(AActor *user, line_t *line, int sideno)
|
||||||
if (!(rover->flags & FF_EXISTS)) continue;
|
if (!(rover->flags & FF_EXISTS)) continue;
|
||||||
if (!(rover->flags & FF_LOWERTEXTURE)) continue;
|
if (!(rover->flags & FF_LOWERTEXTURE)) continue;
|
||||||
|
|
||||||
if (user->z > rover->top.plane->ZatPoint(checkx, checky) ||
|
if (user->Z() > rover->top.plane->ZatPoint(checkx, checky) ||
|
||||||
user->z + user->height < rover->bottom.plane->ZatPoint(checkx, checky))
|
user->Top() < rover->bottom.plane->ZatPoint(checkx, checky))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
// This 3D floor depicts a switch texture in front of the player's eyes
|
// This 3D floor depicts a switch texture in front of the player's eyes
|
||||||
|
@ -218,7 +219,7 @@ bool P_CheckSwitchRange(AActor *user, line_t *line, int sideno)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return (user->z < open.bottom);
|
return (user->Z() < open.bottom);
|
||||||
}
|
}
|
||||||
else if ((flags & ML_3DMIDTEX) || (TexMan.FindSwitch(side->GetTexture(side_t::mid))) != NULL)
|
else if ((flags & ML_3DMIDTEX) || (TexMan.FindSwitch(side->GetTexture(side_t::mid))) != NULL)
|
||||||
{
|
{
|
||||||
|
@ -226,12 +227,12 @@ bool P_CheckSwitchRange(AActor *user, line_t *line, int sideno)
|
||||||
// to keep compatibility with Eternity's implementation.
|
// to keep compatibility with Eternity's implementation.
|
||||||
if (!P_GetMidTexturePosition(line, sideno, &checktop, &checkbot))
|
if (!P_GetMidTexturePosition(line, sideno, &checktop, &checkbot))
|
||||||
return false;
|
return false;
|
||||||
return user->z < checktop && user->z + user->height > checkbot;
|
return user->Z() < checktop && user->Top() > checkbot;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// no switch found. Check whether the player can touch either top or bottom texture
|
// no switch found. Check whether the player can touch either top or bottom texture
|
||||||
return (user->z + user->height > open.top) || (user->z < open.bottom);
|
return (user->Top() > open.top) || (user->Z() < open.bottom);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue