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

View File

@@ -25,6 +25,7 @@ using Robust.Shared.IoC;
using Robust.Shared.Localization;
using Robust.Shared.Maths;
using Robust.Shared.Prototypes;
using Content.Shared.Interaction.Events;
namespace Content.Client.Inventory
{
@@ -67,9 +68,19 @@ namespace Content.Client.Inventory
SubscribeLocalEvent<ClientInventoryComponent, DidEquipEvent>(OnDidEquip);
SubscribeLocalEvent<ClientInventoryComponent, DidUnequipEvent>(OnDidUnequip);
SubscribeLocalEvent<ClothingComponent, UseInHandEvent>(OnUseInHand);
_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)
{
UpdateComponentUISlot(uid, args.Slot, null, component);

View File

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

View File

@@ -1,6 +1,8 @@
using Content.Server.Atmos;
using Content.Server.Clothing.Components;
using Content.Server.Storage.Components;
using Content.Server.Temperature.Systems;
using Content.Shared.Interaction.Events;
using Content.Shared.Inventory;
using Content.Shared.Inventory.Events;
using InventoryComponent = Content.Shared.Inventory.InventoryComponent;
@@ -17,9 +19,19 @@ namespace Content.Server.Inventory
SubscribeLocalEvent<InventoryComponent, LowPressureEvent>(RelayInventoryEvent);
SubscribeLocalEvent<InventoryComponent, ModifyChangedTemperatureEvent>(RelayInventoryEvent);
SubscribeLocalEvent<ClothingComponent, UseInHandEvent>(OnUseInHand);
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)
{
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, EntRemovedFromContainerMessage>(OnEntRemoved);
SubscribeLocalEvent<SharedItemComponent, UseInHandEvent>(OnUseInHand);
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)
|| !TryComp(args.User, out SharedHandsComponent? hands)
|| !_prototypeManager.TryIndex<InventoryTemplatePrototype>(inv.TemplateId, out var prototype))

View File

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