Discs no longer blast players with collision disabled

This commit is contained in:
Boondorl 2024-11-08 21:58:45 -05:00 committed by Ricardo Luís Vaz Silva
parent 3ea5be1ea7
commit 268dad18f7
3 changed files with 14 additions and 1 deletions

View file

@ -121,13 +121,20 @@ TArray<spechit_t> portalhit;
//
//==========================================================================
bool P_ShouldPassThroughPlayer(AActor *self, AActor *other)
static int P_ShouldPassThroughPlayer(AActor *self, AActor *other)
{
return (dmflags3 & DF3_NO_PLAYER_CLIP) &&
other->player && other->player->mo == other &&
self->IsFriend(other);
}
DEFINE_ACTION_FUNCTION_NATIVE(AActor, ShouldPassThroughPlayer, P_ShouldPassThroughPlayer)
{
PARAM_SELF_PROLOGUE(AActor);
PARAM_OBJECT_NOT_NULL(other, AActor);
ACTION_RETURN_BOOL(P_ShouldPassThroughPlayer(self, other));
}
//==========================================================================
//
// CanCollideWith

View file

@ -844,6 +844,7 @@ class Actor : Thinker native
native void Thrust(double speed = 1e37, double angle = 1e37);
native clearscope bool isFriend(Actor other) const;
native clearscope bool isHostile(Actor other) const;
native clearscope bool ShouldPassThroughPlayer(Actor other) const;
native void AdjustFloorClip();
native clearscope DropItem GetDropItems() const;
native void CopyFriendliness (Actor other, bool changeTarget, bool resetHealth = true);

View file

@ -139,6 +139,11 @@ extend class Actor
{ // Must be monster, player, missile, touchy or vulnerable
continue;
}
if (player && ShouldPassThroughPlayer(mo))
{
// Don't blast friendly players if collision is disabled.
continue;
}
if (Distance2D(mo) > radius)
{ // Out of range
continue;