Migrate pulling logic into SharedPullableComponent from PullController (#2627)

* Pulling: Migrate critical pull state from PullController to SharedPullableComponent, fixing two bugs in the process

Bug 1: PullController can be just summoned for no reason when the verb is queried
Bug 2: PullController keeps it's own independent pull state which can (and will) go out of sync (See https://github.com/space-wizards/space-station-14/issues/2619 )

* Pulling: Fix issues with previous commit (or possibly in general?) causing transferring a pull to cause alerts to go wrong

The primary problem is that there is one "pulling slot" for a puller, so SharedPullableComponent needs to stop the existing pull.

* Pulling: Remove debug logs (whoops)
This commit is contained in:
20kdc
2020-11-26 13:48:10 +00:00
committed by GitHub
parent 06b1939a60
commit 380d76f4cd
5 changed files with 163 additions and 146 deletions

View File

@@ -1,9 +1,14 @@
#nullable enable
using Content.Shared.Alert;
using Content.Shared.GameObjects.Components.Mobs;
using Content.Shared.GameObjects.Components.Movement;
using Content.Shared.GameObjects.EntitySystems;
using Content.Shared.Physics.Pull;
using Robust.Shared.GameObjects;
using Robust.Shared.GameObjects.Systems;
using Robust.Shared.Interfaces.GameObjects;
using Component = Robust.Shared.GameObjects.Component;
using Robust.Shared.Log;
namespace Content.Shared.GameObjects.Components.Pulling
{
@@ -58,15 +63,34 @@ namespace Content.Shared.GameObjects.Components.Pulling
return;
}
SharedAlertsComponent? ownerStatus = Owner.GetComponentOrNull<SharedAlertsComponent>();
switch (message)
{
case PullStartedMessage msg:
Pulling = msg.Pulled.Owner;
if (ownerStatus != null)
{
ownerStatus.ShowAlert(AlertType.Pulling, onClickAlert: OnClickAlert);
}
break;
case PullStoppedMessage _:
Pulling = null;
if (ownerStatus != null)
{
ownerStatus.ClearAlert(AlertType.Pulling);
}
break;
}
}
private void OnClickAlert(ClickAlertEventArgs args)
{
EntitySystem
.Get<SharedPullingSystem>()
.GetPulled(args.Player)?
.GetComponentOrNull<SharedPullableComponent>()?
.TryStopPull();
}
}
}