mirror of
https://github.com/ZDoom/gzdoom.git
synced 2024-11-26 14:01:45 +00:00
- 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:
parent
26967bd0ee
commit
abcc6049b9
4 changed files with 20 additions and 6 deletions
|
@ -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)
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -220,7 +220,7 @@ public:
|
|||
struct CheckResult
|
||||
{
|
||||
line_t *line;
|
||||
fixedvec2 position;
|
||||
fixedvec3 position;
|
||||
int portalflags;
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in a new issue