Fix pull (#285)
This commit is contained in:
@@ -1,3 +1,4 @@
|
|||||||
|
using System.Linq;
|
||||||
using Content.Shared.ActionBlocker;
|
using Content.Shared.ActionBlocker;
|
||||||
using Content.Shared.Administration.Logs;
|
using Content.Shared.Administration.Logs;
|
||||||
using Content.Shared.Buckle.Components;
|
using Content.Shared.Buckle.Components;
|
||||||
@@ -26,6 +27,7 @@ namespace Content.Shared.Pulling
|
|||||||
[Dependency] private readonly SharedPhysicsSystem _physics = default!;
|
[Dependency] private readonly SharedPhysicsSystem _physics = default!;
|
||||||
[Dependency] private readonly ISharedAdminLogManager _adminLogger = default!;
|
[Dependency] private readonly ISharedAdminLogManager _adminLogger = default!;
|
||||||
[Dependency] private readonly IGameTiming _timing = default!;
|
[Dependency] private readonly IGameTiming _timing = default!;
|
||||||
|
[Dependency] private readonly SharedJointSystem _jointSystem = default!; // WD
|
||||||
|
|
||||||
public bool CanPull(EntityUid puller, EntityUid pulled)
|
public bool CanPull(EntityUid puller, EntityUid pulled)
|
||||||
{
|
{
|
||||||
@@ -98,6 +100,7 @@ namespace Content.Shared.Pulling
|
|||||||
|
|
||||||
if (!pullable.BeingPulled)
|
if (!pullable.BeingPulled)
|
||||||
{
|
{
|
||||||
|
ClearPullJoints(pullable); // WD
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -117,6 +120,31 @@ namespace Content.Shared.Pulling
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// WD START
|
||||||
|
private void ClearPullJoints(SharedPullableComponent pullable)
|
||||||
|
{
|
||||||
|
var uid = pullable.Owner;
|
||||||
|
|
||||||
|
if (_timing.ApplyingState || !TryComp(uid, out JointComponent? jointComp))
|
||||||
|
return;
|
||||||
|
|
||||||
|
TryComp(uid, out SharedPullerComponent? puller);
|
||||||
|
|
||||||
|
foreach (var joint in jointComp.GetJoints.Where(j => j.Key.StartsWith("pull-joint")))
|
||||||
|
{
|
||||||
|
if (pullable.PullJointId == joint.Key)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (puller is {Pulling: not null} &&
|
||||||
|
EntityManager.GetComponent<SharedPullableComponent>(puller.Pulling.Value).PullJointId == joint.Key)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
_jointSystem.RemoveJoint(joint.Value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// WD END
|
||||||
|
|
||||||
public bool TryStartPull(EntityUid puller, EntityUid pullable)
|
public bool TryStartPull(EntityUid puller, EntityUid pullable)
|
||||||
{
|
{
|
||||||
if (!EntityManager.TryGetComponent(puller, out SharedPullerComponent? pullerComp))
|
if (!EntityManager.TryGetComponent(puller, out SharedPullerComponent? pullerComp))
|
||||||
|
|||||||
Reference in New Issue
Block a user