Fix use-in-hand interactions (#7085)
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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))
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
Reference in New Issue
Block a user