Add alt click to hands (#12330)

This commit is contained in:
Jacob Tong
2022-11-03 18:36:45 -07:00
committed by GitHub
parent 88a4ee0ce1
commit 74b63e83fd
4 changed files with 43 additions and 4 deletions

View File

@@ -242,6 +242,16 @@ namespace Content.Client.Hands.Systems
_verbs.VerbMenu.OpenVerbMenu(entity);
}
public void UIHandAltActivateItem(string handName)
{
if (!TryGetPlayerHands(out var hands)
|| !hands.Hands.TryGetValue(handName, out var hand)
|| hand.HeldEntity is not { Valid: true } entity)
return;
EntityManager.RaisePredictiveEvent(new RequestHandAltInteractEvent(entity));
}
#region visuals

View File

@@ -69,17 +69,25 @@ public sealed class HandsUIController : UIController, IOnStateEntered<GameplaySt
return;
}
if (args.Function == ContentKeyFunctions.ExamineEntity)
if (args.Function == EngineKeyFunctions.UIClick)
{
_handsSystem.UIInventoryExamine(hand.SlotName);
_handsSystem.UIHandClick(_playerHandsComponent, hand.SlotName);
}
else if (args.Function == EngineKeyFunctions.UseSecondary)
{
_handsSystem.UIHandOpenContextMenu(hand.SlotName);
}
else if (args.Function == EngineKeyFunctions.UIClick)
else if (args.Function == ContentKeyFunctions.ActivateItemInWorld)
{
_handsSystem.UIHandClick(_playerHandsComponent, hand.SlotName);
_handsSystem.UIHandActivate(hand.SlotName);
}
else if (args.Function == ContentKeyFunctions.AltActivateItemInWorld)
{
_handsSystem.UIHandAltActivateItem(hand.SlotName);
}
else if (args.Function == ContentKeyFunctions.ExamineEntity)
{
_handsSystem.UIInventoryExamine(hand.SlotName);
}
}

View File

@@ -17,6 +17,7 @@ public abstract partial class SharedHandsSystem : EntitySystem
SubscribeAllEvent<RequestHandInteractUsingEvent>(HandleInteractUsingInHand);
SubscribeAllEvent<RequestUseInHandEvent>(HandleUseInHand);
SubscribeAllEvent<RequestMoveHandItemEvent>(HandleMoveItemFromHand);
SubscribeAllEvent<RequestHandAltInteractEvent>(HandleHandAltInteract);
SubscribeLocalEvent<SharedHandsComponent, ExaminedEvent>(HandleExamined);
@@ -65,6 +66,12 @@ public abstract partial class SharedHandsSystem : EntitySystem
TryInteractHandWithActiveHand(args.SenderSession.AttachedEntity.Value, msg.HandName);
}
private void HandleHandAltInteract(RequestHandAltInteractEvent msg, EntitySessionEventArgs args)
{
if (args.SenderSession.AttachedEntity != null)
TryUseItemInHand(args.SenderSession.AttachedEntity.Value, true);
}
private void SwapHandsPressed(ICommonSession? session)
{
if (!TryComp(session?.AttachedEntity, out SharedHandsComponent? component))

View File

@@ -267,6 +267,20 @@ namespace Content.Shared.Hands
}
}
/// <summary>
/// Event raised by a client when they want to alt interact with the item currently in their hands.
/// </summary>
[Serializable, NetSerializable]
public sealed class RequestHandAltInteractEvent : EntityEventArgs
{
public EntityUid Entity { get; }
public RequestHandAltInteractEvent(EntityUid entity)
{
Entity = entity;
}
}
public sealed class HandCountChangedEvent : EntityEventArgs
{
public HandCountChangedEvent(EntityUid sender)