mirror of
https://git.do.srb2.org/STJr/SRB2.git
synced 2025-01-30 21:20:54 +00:00
Create P_CeilingzAtPos function
This commit is contained in:
parent
e593610862
commit
ca88db00cd
2 changed files with 46 additions and 1 deletions
|
@ -424,6 +424,7 @@ void P_Initsecnode(void);
|
||||||
void P_RadiusAttack(mobj_t *spot, mobj_t *source, fixed_t damagedist, UINT8 damagetype, boolean sightcheck);
|
void P_RadiusAttack(mobj_t *spot, mobj_t *source, fixed_t damagedist, UINT8 damagetype, boolean sightcheck);
|
||||||
|
|
||||||
fixed_t P_FloorzAtPos(fixed_t x, fixed_t y, fixed_t z, fixed_t height);
|
fixed_t P_FloorzAtPos(fixed_t x, fixed_t y, fixed_t z, fixed_t height);
|
||||||
|
fixed_t P_CeilingzAtPos(fixed_t x, fixed_t y, fixed_t z, fixed_t height);
|
||||||
boolean PIT_PushableMoved(mobj_t *thing);
|
boolean PIT_PushableMoved(mobj_t *thing);
|
||||||
|
|
||||||
boolean P_DoSpring(mobj_t *spring, mobj_t *object);
|
boolean P_DoSpring(mobj_t *spring, mobj_t *object);
|
||||||
|
|
46
src/p_map.c
46
src/p_map.c
|
@ -4953,7 +4953,7 @@ void P_MapEnd(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
// P_FloorzAtPos
|
// P_FloorzAtPos
|
||||||
// Returns the floorz of the XYZ position // TODO: Need ceilingpos function too
|
// Returns the floorz of the XYZ position
|
||||||
// Tails 05-26-2003
|
// Tails 05-26-2003
|
||||||
fixed_t P_FloorzAtPos(fixed_t x, fixed_t y, fixed_t z, fixed_t height)
|
fixed_t P_FloorzAtPos(fixed_t x, fixed_t y, fixed_t z, fixed_t height)
|
||||||
{
|
{
|
||||||
|
@ -4997,3 +4997,47 @@ fixed_t P_FloorzAtPos(fixed_t x, fixed_t y, fixed_t z, fixed_t height)
|
||||||
|
|
||||||
return floorz;
|
return floorz;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// P_CeilingZAtPos
|
||||||
|
// Returns the ceilinz of the XYZ position
|
||||||
|
fixed_t P_CeilingzAtPos(fixed_t x, fixed_t y, fixed_t z, fixed_t height)
|
||||||
|
{
|
||||||
|
sector_t *sec = R_PointInSubsector(x, y)->sector;
|
||||||
|
fixed_t ceilingz = P_GetSectorCeilingZAt(sec, x, y);
|
||||||
|
|
||||||
|
if (sec->ffloors)
|
||||||
|
{
|
||||||
|
ffloor_t *rover;
|
||||||
|
fixed_t delta1, delta2, thingtop = z + height;
|
||||||
|
|
||||||
|
for (rover = sec->ffloors; rover; rover = rover->next)
|
||||||
|
{
|
||||||
|
fixed_t topheight, bottomheight;
|
||||||
|
if (!(rover->flags & FF_EXISTS))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if ((!(rover->flags & FF_SOLID || rover->flags & FF_QUICKSAND) || (rover->flags & FF_SWIMMABLE)))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
topheight = P_GetFFloorTopZAt (rover, x, y);
|
||||||
|
bottomheight = P_GetFFloorBottomZAt(rover, x, y);
|
||||||
|
|
||||||
|
if (rover->flags & FF_QUICKSAND)
|
||||||
|
{
|
||||||
|
if (z < topheight && bottomheight < thingtop)
|
||||||
|
{
|
||||||
|
if (ceilingz < z)
|
||||||
|
ceilingz = z;
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
delta1 = z - (bottomheight + ((topheight - bottomheight)/2));
|
||||||
|
delta2 = thingtop - (bottomheight + ((topheight - bottomheight)/2));
|
||||||
|
if (bottomheight > ceilingz && abs(delta1) < abs(delta2))
|
||||||
|
ceilingz = bottomheight;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ceilingz;
|
||||||
|
}
|
Loading…
Reference in a new issue