E to interact with disposal bins. (#2045)

* iactivate for server disposalunitcomponent

* attempt 2.
This commit is contained in:
derek
2020-09-13 05:06:46 -07:00
committed by GitHub
parent d9f965a49b
commit 59a31f3c8b

View File

@@ -40,8 +40,9 @@ namespace Content.Server.GameObjects.Components.Disposal
{
[RegisterComponent]
[ComponentReference(typeof(SharedDisposalUnitComponent))]
[ComponentReference(typeof(IActivate))]
[ComponentReference(typeof(IInteractUsing))]
public class DisposalUnitComponent : SharedDisposalUnitComponent, IInteractHand, IInteractUsing, IDragDropOn
public class DisposalUnitComponent : SharedDisposalUnitComponent, IInteractHand, IActivate, IInteractUsing, IDragDropOn
{
[Dependency] private readonly IGameTiming _gameTiming = default!;
@@ -610,8 +611,8 @@ namespace Content.Server.GameObjects.Components.Disposal
break;
}
}
bool IInteractHand.InteractHand(InteractHandEventArgs eventArgs)
bool IsValidInteraction(ITargetedInteractEventArgs eventArgs)
{
if (!ActionBlockerSystem.CanInteract(eventArgs.User))
{
@@ -624,11 +625,7 @@ namespace Content.Server.GameObjects.Components.Disposal
Owner.PopupMessage(eventArgs.User, Loc.GetString("You can't reach there!"));
return false;
}
if (!eventArgs.User.TryGetComponent(out IActorComponent? actor))
{
return false;
}
// This popup message doesn't appear on clicks, even when code was seperate. Unsure why.
if (!eventArgs.User.HasComponent<IHandsComponent>())
{
@@ -636,10 +633,43 @@ namespace Content.Server.GameObjects.Components.Disposal
return false;
}
UserInterface?.Open(actor.playerSession);
return true;
}
bool IInteractHand.InteractHand(InteractHandEventArgs eventArgs)
{
if (!eventArgs.User.TryGetComponent(out IActorComponent? actor))
{
return false;
}
// Duplicated code here, not sure how else to get actor inside to make UserInterface happy.
if (IsValidInteraction(eventArgs))
{
UserInterface?.Open(actor.playerSession);
return true;
}
return false;
}
void IActivate.Activate(ActivateEventArgs eventArgs)
{
if (!eventArgs.User.TryGetComponent(out IActorComponent? actor))
{
return;
}
if (IsValidInteraction(eventArgs))
{
UserInterface?.Open(actor.playerSession);
}
return;
}
async Task<bool> IInteractUsing.InteractUsing(InteractUsingEventArgs eventArgs)
{
return TryDrop(eventArgs.User, eventArgs.Using);