Fix use-in-hand interactions (#7085)

This commit is contained in:
Leon Friedrich
2022-03-13 04:05:11 +13:00
committed by GitHub
parent b1e719c70d
commit 865c9630bd
6 changed files with 30 additions and 12 deletions

View File

@@ -1,9 +1,6 @@
using Content.Client.Items.Components; using Content.Client.Items.Components;
using Content.Shared.Item; using Content.Shared.Item;
using Robust.Shared.GameObjects;
using Robust.Shared.GameStates; using Robust.Shared.GameStates;
using Robust.Shared.Serialization.Manager.Attributes;
using Robust.Shared.ViewVariables;
namespace Content.Client.Clothing namespace Content.Client.Clothing
{ {
@@ -17,6 +14,9 @@ namespace Content.Client.Clothing
[DataField("femaleMask")] [DataField("femaleMask")]
public FemaleClothingMask FemaleMask { get; } = FemaleClothingMask.UniformFull; public FemaleClothingMask FemaleMask { get; } = FemaleClothingMask.UniformFull;
[DataField("quickEquip")]
public bool QuickEquip = true;
public string? InSlot; public string? InSlot;
} }

View File

@@ -25,6 +25,7 @@ using Robust.Shared.IoC;
using Robust.Shared.Localization; using Robust.Shared.Localization;
using Robust.Shared.Maths; using Robust.Shared.Maths;
using Robust.Shared.Prototypes; using Robust.Shared.Prototypes;
using Content.Shared.Interaction.Events;
namespace Content.Client.Inventory namespace Content.Client.Inventory
{ {
@@ -67,9 +68,19 @@ namespace Content.Client.Inventory
SubscribeLocalEvent<ClientInventoryComponent, DidEquipEvent>(OnDidEquip); SubscribeLocalEvent<ClientInventoryComponent, DidEquipEvent>(OnDidEquip);
SubscribeLocalEvent<ClientInventoryComponent, DidUnequipEvent>(OnDidUnequip); SubscribeLocalEvent<ClientInventoryComponent, DidUnequipEvent>(OnDidUnequip);
SubscribeLocalEvent<ClothingComponent, UseInHandEvent>(OnUseInHand);
_config.OnValueChanged(CCVars.HudTheme, UpdateHudTheme); _config.OnValueChanged(CCVars.HudTheme, UpdateHudTheme);
} }
private void OnUseInHand(EntityUid uid, ClothingComponent component, UseInHandEvent args)
{
if (args.Handled || !component.QuickEquip)
return;
QuickEquip(uid, component, args);
}
private void OnDidUnequip(EntityUid uid, ClientInventoryComponent component, DidUnequipEvent args) private void OnDidUnequip(EntityUid uid, ClientInventoryComponent component, DidUnequipEvent args)
{ {
UpdateComponentUISlot(uid, args.Slot, null, component); UpdateComponentUISlot(uid, args.Slot, null, component);

View File

@@ -16,6 +16,9 @@ namespace Content.Server.Clothing.Components
[DataField("HeatResistance")] [DataField("HeatResistance")]
private int _heatResistance = 323; private int _heatResistance = 323;
[DataField("quickEquip")]
public bool QuickEquip = true;
[ViewVariables(VVAccess.ReadWrite)] [ViewVariables(VVAccess.ReadWrite)]
public int HeatResistance => _heatResistance; public int HeatResistance => _heatResistance;
} }

View File

@@ -1,6 +1,8 @@
using Content.Server.Atmos; using Content.Server.Atmos;
using Content.Server.Clothing.Components;
using Content.Server.Storage.Components; using Content.Server.Storage.Components;
using Content.Server.Temperature.Systems; using Content.Server.Temperature.Systems;
using Content.Shared.Interaction.Events;
using Content.Shared.Inventory; using Content.Shared.Inventory;
using Content.Shared.Inventory.Events; using Content.Shared.Inventory.Events;
using InventoryComponent = Content.Shared.Inventory.InventoryComponent; using InventoryComponent = Content.Shared.Inventory.InventoryComponent;
@@ -17,9 +19,19 @@ namespace Content.Server.Inventory
SubscribeLocalEvent<InventoryComponent, LowPressureEvent>(RelayInventoryEvent); SubscribeLocalEvent<InventoryComponent, LowPressureEvent>(RelayInventoryEvent);
SubscribeLocalEvent<InventoryComponent, ModifyChangedTemperatureEvent>(RelayInventoryEvent); SubscribeLocalEvent<InventoryComponent, ModifyChangedTemperatureEvent>(RelayInventoryEvent);
SubscribeLocalEvent<ClothingComponent, UseInHandEvent>(OnUseInHand);
SubscribeNetworkEvent<OpenSlotStorageNetworkMessage>(OnOpenSlotStorage); SubscribeNetworkEvent<OpenSlotStorageNetworkMessage>(OnOpenSlotStorage);
} }
private void OnUseInHand(EntityUid uid, ClothingComponent component, UseInHandEvent args)
{
if (args.Handled || !component.QuickEquip)
return;
QuickEquip(uid, component, args);
}
private void OnOpenSlotStorage(OpenSlotStorageNetworkMessage ev, EntitySessionEventArgs args) private void OnOpenSlotStorage(OpenSlotStorageNetworkMessage ev, EntitySessionEventArgs args)
{ {
if (args.SenderSession.AttachedEntity is not EntityUid { Valid: true } uid) if (args.SenderSession.AttachedEntity is not EntityUid { Valid: true } uid)

View File

@@ -29,16 +29,11 @@ public abstract partial class InventorySystem
SubscribeLocalEvent<InventoryComponent, EntInsertedIntoContainerMessage>(OnEntInserted); SubscribeLocalEvent<InventoryComponent, EntInsertedIntoContainerMessage>(OnEntInserted);
SubscribeLocalEvent<InventoryComponent, EntRemovedFromContainerMessage>(OnEntRemoved); SubscribeLocalEvent<InventoryComponent, EntRemovedFromContainerMessage>(OnEntRemoved);
SubscribeLocalEvent<SharedItemComponent, UseInHandEvent>(OnUseInHand);
SubscribeAllEvent<UseSlotNetworkMessage>(OnUseSlot); SubscribeAllEvent<UseSlotNetworkMessage>(OnUseSlot);
} }
private void OnUseInHand(EntityUid uid, SharedItemComponent component, UseInHandEvent args) protected void QuickEquip(EntityUid uid, SharedItemComponent component, UseInHandEvent args)
{ {
if (args.Handled || !component.QuickEquip)
return;
if (!TryComp(args.User, out InventoryComponent? inv) if (!TryComp(args.User, out InventoryComponent? inv)
|| !TryComp(args.User, out SharedHandsComponent? hands) || !TryComp(args.User, out SharedHandsComponent? hands)
|| !_prototypeManager.TryIndex<InventoryTemplatePrototype>(inv.TemplateId, out var prototype)) || !_prototypeManager.TryIndex<InventoryTemplatePrototype>(inv.TemplateId, out var prototype))

View File

@@ -15,9 +15,6 @@ namespace Content.Shared.Item
{ {
[Dependency] private readonly IEntityManager _entMan = default!; [Dependency] private readonly IEntityManager _entMan = default!;
[DataField("quickEquip")]
public bool QuickEquip = true;
/// <summary> /// <summary>
/// How much big this item is. /// How much big this item is.
/// </summary> /// </summary>