- made the z coordinate part of the CheckResults for the MultiBlock iterators and use these for all height checks in the iterator loops. This will later make it easier to support arbitrary portals with height displacements.

This commit is contained in:
Christoph Oelckers 2016-02-21 12:04:52 +01:00
parent 26967bd0ee
commit abcc6049b9
4 changed files with 20 additions and 6 deletions

View file

@ -112,6 +112,12 @@ struct fixedvec3
return *this;
}
operator fixedvec2()
{
fixedvec2 ret = { x, y };
return ret;
}
};
inline fixedvec2 operator +(const fixedvec2 &v1, const fixedvec2 &v2)

View file

@ -462,8 +462,8 @@ bool P_TeleportMove(AActor *thing, fixed_t x, fixed_t y, fixed_t z, bool telefra
{
if (!(th->flags3 & thing->flags3 & MF3_DONTOVERLAP))
{
if (z > th->Top() || // overhead
z + thing->height < th->Z()) // underneath
if (z > cres.position.z + th->height || // overhead
z + thing->height < cres.position.z) // underneath
continue;
}
}
@ -557,9 +557,9 @@ void P_PlayerStartStomp(AActor *actor, bool mononly)
if (th->player != NULL && mononly)
continue;
if (actor->Z() > th->Top())
if (actor->Z() > cres.position.z + th->height)
continue; // overhead
if (actor->Top() < th->Z())
if (actor->Top() < cres.position.z)
continue; // underneath
P_DamageMobj(th, actor, actor, TELEFRAG_DAMAGE, NAME_Telefrag);

View file

@ -534,6 +534,12 @@ void AActor::SetOrigin (fixed_t ix, fixed_t iy, fixed_t iz, bool moving)
P_FindFloorCeiling(this, FFCF_ONLYSPAWNPOS);
}
//===========================================================================
//
// FBlockNode - allows to link actors into multiple blocks in the blockmap
//
//===========================================================================
FBlockNode *FBlockNode::FreeBlocks = NULL;
FBlockNode *FBlockNode::Create (AActor *who, int x, int y, int group)
@ -789,7 +795,9 @@ bool FMultiBlockLinesIterator::Next(FMultiBlockLinesIterator::CheckResult *item)
if (line != NULL)
{
item->line = line;
item->position = offset;
item->position.x = offset.x;
item->position.y = offset.y;
item->position.z = checkpoint.z;
item->portalflags = portalflags;
return true;
}

View file

@ -220,7 +220,7 @@ public:
struct CheckResult
{
line_t *line;
fixedvec2 position;
fixedvec3 position;
int portalflags;
};