Make pulled mobs not collide with other mobs (#2406)

This commit is contained in:
DrSmugleaf
2020-10-28 10:12:46 +01:00
committed by GitHub
parent 18572ed3f3
commit 10dc201704

View File

@@ -1,21 +1,26 @@
#nullable enable #nullable enable
using System; using System;
using Content.Shared.GameObjects.Components.Mobs; using Content.Shared.GameObjects.Components.Mobs;
using Content.Shared.Physics;
using Content.Shared.Physics.Pull; using Content.Shared.Physics.Pull;
using Robust.Shared.Containers; using Robust.Shared.Containers;
using Robust.Shared.GameObjects; using Robust.Shared.GameObjects;
using Robust.Shared.GameObjects.ComponentDependencies;
using Robust.Shared.GameObjects.Components; using Robust.Shared.GameObjects.Components;
using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.GameObjects;
using Robust.Shared.Map; using Robust.Shared.Map;
using Robust.Shared.Physics;
using Robust.Shared.Serialization; using Robust.Shared.Serialization;
namespace Content.Shared.GameObjects.Components.Pulling namespace Content.Shared.GameObjects.Components.Pulling
{ {
public abstract class SharedPullableComponent : Component public abstract class SharedPullableComponent : Component, ICollideSpecial
{ {
public override string Name => "Pullable"; public override string Name => "Pullable";
public override uint? NetID => ContentNetIDs.PULLABLE; public override uint? NetID => ContentNetIDs.PULLABLE;
[ComponentDependency] private IPhysicsComponent? _physics = default!;
private IEntity? _puller; private IEntity? _puller;
public virtual IEntity? Puller public virtual IEntity? Puller
@@ -231,6 +236,16 @@ namespace Content.Shared.GameObjects.Components.Pulling
base.OnRemove(); base.OnRemove();
} }
public bool PreventCollide(IPhysBody collidedWith)
{
if (_puller == null || _physics == null)
{
return false;
}
return (_physics.CollisionLayer & collidedWith.CollisionMask) == (int) CollisionGroup.MobImpassable;
}
} }
[Serializable, NetSerializable] [Serializable, NetSerializable]