Move storage binds and slot click handling to shared (#27135)

This commit is contained in:
DrSmugleaf
2024-04-19 23:23:45 -07:00
committed by GitHub
parent 812abd33a0
commit 3c6722bd6f
5 changed files with 52 additions and 54 deletions

View File

@@ -199,7 +199,7 @@ namespace Content.Client.Inventory
public void UIInventoryStorageActivate(string slot) public void UIInventoryStorageActivate(string slot)
{ {
EntityManager.EntityNetManager?.SendSystemNetworkMessage(new OpenSlotStorageNetworkMessage(slot)); EntityManager.RaisePredictiveEvent(new OpenSlotStorageNetworkMessage(slot));
} }
public void UIInventoryExamine(string slot, EntityUid uid) public void UIInventoryExamine(string slot, EntityUid uid)

View File

@@ -1,21 +1,15 @@
using Content.Server.Storage.EntitySystems;
using Content.Shared.Explosion; using Content.Shared.Explosion;
using Content.Shared.Inventory; using Content.Shared.Inventory;
using Content.Shared.Inventory.Events;
using Content.Shared.Storage;
namespace Content.Server.Inventory namespace Content.Server.Inventory
{ {
public sealed class ServerInventorySystem : InventorySystem public sealed class ServerInventorySystem : InventorySystem
{ {
[Dependency] private readonly StorageSystem _storageSystem = default!;
public override void Initialize() public override void Initialize()
{ {
base.Initialize(); base.Initialize();
SubscribeLocalEvent<InventoryComponent, BeforeExplodeEvent>(OnExploded); SubscribeLocalEvent<InventoryComponent, BeforeExplodeEvent>(OnExploded);
SubscribeNetworkEvent<OpenSlotStorageNetworkMessage>(OnOpenSlotStorage);
} }
private void OnExploded(Entity<InventoryComponent> ent, ref BeforeExplodeEvent args) private void OnExploded(Entity<InventoryComponent> ent, ref BeforeExplodeEvent args)
@@ -29,17 +23,6 @@ namespace Content.Server.Inventory
} }
} }
private void OnOpenSlotStorage(OpenSlotStorageNetworkMessage ev, EntitySessionEventArgs args)
{
if (args.SenderSession.AttachedEntity is not { Valid: true } uid)
return;
if (TryGetSlotEntity(uid, ev.Slot, out var entityUid) && TryComp<StorageComponent>(entityUid, out var storageComponent))
{
_storageSystem.OpenStorageUI(entityUid.Value, uid, storageComponent);
}
}
public void TransferEntityInventories(Entity<InventoryComponent?> source, Entity<InventoryComponent?> target) public void TransferEntityInventories(Entity<InventoryComponent?> source, Entity<InventoryComponent?> target)
{ {
if (!Resolve(source.Owner, ref source.Comp) || !Resolve(target.Owner, ref target.Comp)) if (!Resolve(source.Owner, ref source.Comp) || !Resolve(target.Owner, ref target.Comp))

View File

@@ -3,8 +3,6 @@ using Content.Shared.Administration;
using Content.Shared.Explosion; using Content.Shared.Explosion;
using Content.Shared.Ghost; using Content.Shared.Ghost;
using Content.Shared.Hands; using Content.Shared.Hands;
using Content.Shared.Input;
using Content.Shared.Inventory;
using Content.Shared.Lock; using Content.Shared.Lock;
using Content.Shared.Storage; using Content.Shared.Storage;
using Content.Shared.Storage.Components; using Content.Shared.Storage.Components;
@@ -13,7 +11,6 @@ using Content.Shared.Timing;
using Content.Shared.Verbs; using Content.Shared.Verbs;
using Robust.Server.GameObjects; using Robust.Server.GameObjects;
using Robust.Shared.Audio.Systems; using Robust.Shared.Audio.Systems;
using Robust.Shared.Input.Binding;
using Robust.Shared.Map; using Robust.Shared.Map;
using Robust.Shared.Player; using Robust.Shared.Player;
using Robust.Shared.Prototypes; using Robust.Shared.Prototypes;
@@ -25,7 +22,6 @@ public sealed partial class StorageSystem : SharedStorageSystem
{ {
[Dependency] private readonly IAdminManager _admin = default!; [Dependency] private readonly IAdminManager _admin = default!;
[Dependency] private readonly IPrototypeManager _prototype = default!; [Dependency] private readonly IPrototypeManager _prototype = default!;
[Dependency] private readonly InventorySystem _inventory = default!;
[Dependency] private readonly UserInterfaceSystem _uiSystem = default!; [Dependency] private readonly UserInterfaceSystem _uiSystem = default!;
[Dependency] private readonly SharedAudioSystem _audio = default!; [Dependency] private readonly SharedAudioSystem _audio = default!;
[Dependency] private readonly UseDelaySystem _useDelay = default!; [Dependency] private readonly UseDelaySystem _useDelay = default!;
@@ -41,11 +37,6 @@ public sealed partial class StorageSystem : SharedStorageSystem
SubscribeLocalEvent<StorageComponent, BeforeExplodeEvent>(OnExploded); SubscribeLocalEvent<StorageComponent, BeforeExplodeEvent>(OnExploded);
SubscribeLocalEvent<StorageFillComponent, MapInitEvent>(OnStorageFillMapInit); SubscribeLocalEvent<StorageFillComponent, MapInitEvent>(OnStorageFillMapInit);
CommandBinds.Builder
.Bind(ContentKeyFunctions.OpenBackpack, InputCmdHandler.FromDelegate(HandleOpenBackpack))
.Bind(ContentKeyFunctions.OpenBelt, InputCmdHandler.FromDelegate(HandleOpenBelt))
.Register<StorageSystem>();
} }
private void AddUiVerb(EntityUid uid, StorageComponent component, GetVerbsEvent<ActivationVerb> args) private void AddUiVerb(EntityUid uid, StorageComponent component, GetVerbsEvent<ActivationVerb> args)
@@ -180,31 +171,4 @@ public sealed partial class StorageSystem : SharedStorageSystem
} }
} }
} }
private void HandleOpenBackpack(ICommonSession? session)
{
HandleOpenSlotUI(session, "back");
}
private void HandleOpenBelt(ICommonSession? session)
{
HandleOpenSlotUI(session, "belt");
}
private void HandleOpenSlotUI(ICommonSession? session, string slot)
{
if (session is not { } playerSession)
return;
if (playerSession.AttachedEntity is not {Valid: true} playerEnt || !Exists(playerEnt))
return;
if (!_inventory.TryGetSlotEntity(playerEnt, slot, out var storageEnt))
return;
if (!ActionBlocker.CanInteract(playerEnt, storageEnt))
return;
OpenStorageUI(storageEnt.Value, playerEnt);
}
} }

View File

@@ -1,4 +1,6 @@
using System.Diagnostics.CodeAnalysis; using System.Diagnostics.CodeAnalysis;
using Content.Shared.Inventory.Events;
using Content.Shared.Storage;
using Robust.Shared.Containers; using Robust.Shared.Containers;
using Robust.Shared.Prototypes; using Robust.Shared.Prototypes;
using Robust.Shared.Utility; using Robust.Shared.Utility;
@@ -13,6 +15,7 @@ public partial class InventorySystem : EntitySystem
private void InitializeSlots() private void InitializeSlots()
{ {
SubscribeLocalEvent<InventoryComponent, ComponentInit>(OnInit); SubscribeLocalEvent<InventoryComponent, ComponentInit>(OnInit);
SubscribeNetworkEvent<OpenSlotStorageNetworkMessage>(OnOpenSlotStorage);
_vvm.GetTypeHandler<InventoryComponent>() _vvm.GetTypeHandler<InventoryComponent>()
.AddHandler(HandleViewVariablesSlots, ListViewVariablesSlots); .AddHandler(HandleViewVariablesSlots, ListViewVariablesSlots);
@@ -40,6 +43,17 @@ public partial class InventorySystem : EntitySystem
} }
} }
private void OnOpenSlotStorage(OpenSlotStorageNetworkMessage ev, EntitySessionEventArgs args)
{
if (args.SenderSession.AttachedEntity is not { Valid: true } uid)
return;
if (TryGetSlotEntity(uid, ev.Slot, out var entityUid) && TryComp<StorageComponent>(entityUid, out var storageComponent))
{
_storageSystem.OpenStorageUI(entityUid.Value, uid, storageComponent);
}
}
public bool TryGetSlotContainer(EntityUid uid, string slot, [NotNullWhen(true)] out ContainerSlot? containerSlot, [NotNullWhen(true)] out SlotDefinition? slotDefinition, public bool TryGetSlotContainer(EntityUid uid, string slot, [NotNullWhen(true)] out ContainerSlot? containerSlot, [NotNullWhen(true)] out SlotDefinition? slotDefinition,
InventoryComponent? inventory = null, ContainerManagerComponent? containerComp = null) InventoryComponent? inventory = null, ContainerManagerComponent? containerComp = null)
{ {

View File

@@ -8,7 +8,9 @@ using Content.Shared.DoAfter;
using Content.Shared.Hands.Components; using Content.Shared.Hands.Components;
using Content.Shared.Hands.EntitySystems; using Content.Shared.Hands.EntitySystems;
using Content.Shared.Implants.Components; using Content.Shared.Implants.Components;
using Content.Shared.Input;
using Content.Shared.Interaction; using Content.Shared.Interaction;
using Content.Shared.Inventory;
using Content.Shared.Item; using Content.Shared.Item;
using Content.Shared.Lock; using Content.Shared.Lock;
using Content.Shared.Materials; using Content.Shared.Materials;
@@ -21,7 +23,9 @@ using Content.Shared.Verbs;
using Robust.Shared.Audio.Systems; using Robust.Shared.Audio.Systems;
using Robust.Shared.Containers; using Robust.Shared.Containers;
using Robust.Shared.GameStates; using Robust.Shared.GameStates;
using Robust.Shared.Input.Binding;
using Robust.Shared.Map; using Robust.Shared.Map;
using Robust.Shared.Player;
using Robust.Shared.Prototypes; using Robust.Shared.Prototypes;
using Robust.Shared.Random; using Robust.Shared.Random;
using Robust.Shared.Serialization; using Robust.Shared.Serialization;
@@ -40,6 +44,7 @@ public abstract class SharedStorageSystem : EntitySystem
[Dependency] private readonly SharedDoAfterSystem _doAfterSystem = default!; [Dependency] private readonly SharedDoAfterSystem _doAfterSystem = default!;
[Dependency] protected readonly SharedEntityStorageSystem EntityStorage = default!; [Dependency] protected readonly SharedEntityStorageSystem EntityStorage = default!;
[Dependency] private readonly SharedInteractionSystem _interactionSystem = default!; [Dependency] private readonly SharedInteractionSystem _interactionSystem = default!;
[Dependency] private readonly InventorySystem _inventory = default!;
[Dependency] protected readonly SharedItemSystem ItemSystem = default!; [Dependency] protected readonly SharedItemSystem ItemSystem = default!;
[Dependency] private readonly SharedPopupSystem _popupSystem = default!; [Dependency] private readonly SharedPopupSystem _popupSystem = default!;
[Dependency] private readonly SharedHandsSystem _sharedHandsSystem = default!; [Dependency] private readonly SharedHandsSystem _sharedHandsSystem = default!;
@@ -105,6 +110,11 @@ public abstract class SharedStorageSystem : EntitySystem
SubscribeLocalEvent<StorageComponent, GotReclaimedEvent>(OnReclaimed); SubscribeLocalEvent<StorageComponent, GotReclaimedEvent>(OnReclaimed);
CommandBinds.Builder
.Bind(ContentKeyFunctions.OpenBackpack, InputCmdHandler.FromDelegate(HandleOpenBackpack))
.Bind(ContentKeyFunctions.OpenBelt, InputCmdHandler.FromDelegate(HandleOpenBelt))
.Register<SharedStorageSystem>();
UpdatePrototypeCache(); UpdatePrototypeCache();
} }
@@ -1281,6 +1291,33 @@ public abstract class SharedStorageSystem : EntitySystem
} }
} }
private void HandleOpenBackpack(ICommonSession? session)
{
HandleOpenSlotUI(session, "back");
}
private void HandleOpenBelt(ICommonSession? session)
{
HandleOpenSlotUI(session, "belt");
}
private void HandleOpenSlotUI(ICommonSession? session, string slot)
{
if (session is not { } playerSession)
return;
if (playerSession.AttachedEntity is not {Valid: true} playerEnt || !Exists(playerEnt))
return;
if (!_inventory.TryGetSlotEntity(playerEnt, slot, out var storageEnt))
return;
if (!ActionBlocker.CanInteract(playerEnt, storageEnt))
return;
OpenStorageUI(storageEnt.Value, playerEnt);
}
protected void ClearCantFillReasons() protected void ClearCantFillReasons()
{ {
#if DEBUG #if DEBUG