Fix inventory containers (#11944)
This commit is contained in:
@@ -172,7 +172,8 @@ public sealed class ClothingVisualsSystem : EntitySystem
|
|||||||
|
|
||||||
public void InitClothing(EntityUid uid, ClientInventoryComponent? component = null, SpriteComponent? sprite = null)
|
public void InitClothing(EntityUid uid, ClientInventoryComponent? component = null, SpriteComponent? sprite = null)
|
||||||
{
|
{
|
||||||
if (!_inventorySystem.TryGetSlots(uid, out var slots, component) || !Resolve(uid, ref sprite, ref component)) return;
|
if (!Resolve(uid, ref sprite, ref component) || !_inventorySystem.TryGetSlots(uid, out var slots, component))
|
||||||
|
return;
|
||||||
|
|
||||||
foreach (var slot in slots)
|
foreach (var slot in slots)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -43,7 +43,6 @@ namespace Content.Client.Inventory
|
|||||||
SubscribeLocalEvent<ClientInventoryComponent, PlayerAttachedEvent>(OnPlayerAttached);
|
SubscribeLocalEvent<ClientInventoryComponent, PlayerAttachedEvent>(OnPlayerAttached);
|
||||||
SubscribeLocalEvent<ClientInventoryComponent, PlayerDetachedEvent>(OnPlayerDetached);
|
SubscribeLocalEvent<ClientInventoryComponent, PlayerDetachedEvent>(OnPlayerDetached);
|
||||||
|
|
||||||
SubscribeLocalEvent<ClientInventoryComponent, ComponentInit>(OnInit);
|
|
||||||
SubscribeLocalEvent<ClientInventoryComponent, ComponentShutdown>(OnShutdown);
|
SubscribeLocalEvent<ClientInventoryComponent, ComponentShutdown>(OnShutdown);
|
||||||
|
|
||||||
SubscribeLocalEvent<ClientInventoryComponent, DidEquipEvent>((_, comp, args) =>
|
SubscribeLocalEvent<ClientInventoryComponent, DidEquipEvent>((_, comp, args) =>
|
||||||
@@ -145,16 +144,17 @@ namespace Content.Client.Inventory
|
|||||||
base.Shutdown();
|
base.Shutdown();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnInit(EntityUid uid, ClientInventoryComponent component, ComponentInit args)
|
protected override void OnInit(EntityUid uid, InventoryComponent component, ComponentInit args)
|
||||||
{
|
{
|
||||||
_clothingVisualsSystem.InitClothing(uid, component);
|
base.OnInit(uid, component, args);
|
||||||
|
_clothingVisualsSystem.InitClothing(uid, (ClientInventoryComponent) component);
|
||||||
|
|
||||||
if (!_prototypeManager.TryIndex(component.TemplateId, out InventoryTemplatePrototype? invTemplate))
|
if (!_prototypeManager.TryIndex(component.TemplateId, out InventoryTemplatePrototype? invTemplate))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
foreach (var slot in invTemplate.Slots)
|
foreach (var slot in invTemplate.Slots)
|
||||||
{
|
{
|
||||||
TryAddSlotDef(uid, component, slot);
|
TryAddSlotDef(uid, (ClientInventoryComponent)component, slot);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -191,7 +191,6 @@ namespace Content.Client.Inventory
|
|||||||
if (!component.SlotData.TryAdd(newSlotDef.Name, newSlotData))
|
if (!component.SlotData.TryAdd(newSlotDef.Name, newSlotData))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
|
||||||
if (owner == _playerManager.LocalPlayer?.ControlledEntity)
|
if (owner == _playerManager.LocalPlayer?.ControlledEntity)
|
||||||
OnSlotAdded?.Invoke(newSlotData);
|
OnSlotAdded?.Invoke(newSlotData);
|
||||||
return true;
|
return true;
|
||||||
@@ -283,6 +282,8 @@ namespace Content.Client.Inventory
|
|||||||
public EntityUid? HeldEntity => Container?.ContainedEntity;
|
public EntityUid? HeldEntity => Container?.ContainedEntity;
|
||||||
public bool Blocked;
|
public bool Blocked;
|
||||||
public bool Highlighted;
|
public bool Highlighted;
|
||||||
|
|
||||||
|
[ViewVariables]
|
||||||
public ContainerSlot? Container;
|
public ContainerSlot? Container;
|
||||||
public bool HasSlotGroup => SlotDef.SlotGroup != "Default";
|
public bool HasSlotGroup => SlotDef.SlotGroup != "Default";
|
||||||
public Vector2i ButtonOffset => SlotDef.UIWindowPosition;
|
public Vector2i ButtonOffset => SlotDef.UIWindowPosition;
|
||||||
|
|||||||
@@ -33,11 +33,11 @@ namespace Content.IntegrationTests.Tests
|
|||||||
|
|
||||||
var entMgr = IoCManager.Resolve<IEntityManager>();
|
var entMgr = IoCManager.Resolve<IEntityManager>();
|
||||||
var container = entMgr.SpawnEntity(null, MapCoordinates.Nullspace);
|
var container = entMgr.SpawnEntity(null, MapCoordinates.Nullspace);
|
||||||
entMgr.AddComponent<ServerInventoryComponent>(container);
|
entMgr.EnsureComponent<ServerInventoryComponent>(container);
|
||||||
entMgr.AddComponent<ContainerManagerComponent>(container);
|
entMgr.EnsureComponent<ContainerManagerComponent>(container);
|
||||||
|
|
||||||
var child = entMgr.SpawnEntity(null, MapCoordinates.Nullspace);
|
var child = entMgr.SpawnEntity(null, MapCoordinates.Nullspace);
|
||||||
var item = entMgr.AddComponent<ClothingComponent>(child);
|
var item = entMgr.EnsureComponent<ClothingComponent>(child);
|
||||||
|
|
||||||
IoCManager.Resolve<IEntitySystemManager>().GetEntitySystem<ClothingSystem>().SetSlots(item.Owner, SlotFlags.HEAD, item);
|
IoCManager.Resolve<IEntitySystemManager>().GetEntitySystem<ClothingSystem>().SetSlots(item.Owner, SlotFlags.HEAD, item);
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
using System.Diagnostics.CodeAnalysis;
|
using System.Diagnostics.CodeAnalysis;
|
||||||
using Robust.Shared.Containers;
|
using Robust.Shared.Containers;
|
||||||
using Robust.Shared.Prototypes;
|
using Robust.Shared.Prototypes;
|
||||||
|
|
||||||
@@ -8,6 +8,22 @@ public partial class InventorySystem : EntitySystem
|
|||||||
{
|
{
|
||||||
[Dependency] private readonly IPrototypeManager _prototypeManager = default!;
|
[Dependency] private readonly IPrototypeManager _prototypeManager = default!;
|
||||||
|
|
||||||
|
private void InitializeSlots()
|
||||||
|
{
|
||||||
|
SubscribeLocalEvent<InventoryComponent, ComponentInit>(OnInit);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected virtual void OnInit(EntityUid uid, InventoryComponent component, ComponentInit args)
|
||||||
|
{
|
||||||
|
if (!_prototypeManager.TryIndex(component.TemplateId, out InventoryTemplatePrototype? invTemplate))
|
||||||
|
return;
|
||||||
|
|
||||||
|
foreach (var slot in invTemplate.Slots)
|
||||||
|
{
|
||||||
|
_containerSystem.EnsureContainer<ContainerSlot>(uid, slot.Name).OccludesLight = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
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)
|
||||||
{
|
{
|
||||||
@@ -21,9 +37,9 @@ public partial class InventorySystem : EntitySystem
|
|||||||
|
|
||||||
if (!containerComp.TryGetContainer(slotDefinition.Name, out var container))
|
if (!containerComp.TryGetContainer(slotDefinition.Name, out var container))
|
||||||
{
|
{
|
||||||
containerSlot = containerComp.MakeContainer<ContainerSlot>(slotDefinition.Name);
|
if (inventory.LifeStage >= ComponentLifeStage.Initialized)
|
||||||
containerSlot.OccludesLight = false;
|
Logger.Error($"Missing inventory container {slot} on entity {ToPrettyString(uid)}");
|
||||||
return true;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (container is not ContainerSlot containerSlotChecked) return false;
|
if (container is not ContainerSlot containerSlotChecked) return false;
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
namespace Content.Shared.Inventory;
|
namespace Content.Shared.Inventory;
|
||||||
|
|
||||||
public partial class InventorySystem
|
public partial class InventorySystem
|
||||||
{
|
{
|
||||||
@@ -8,5 +8,6 @@ public partial class InventorySystem
|
|||||||
base.Initialize();
|
base.Initialize();
|
||||||
InitializeEquip();
|
InitializeEquip();
|
||||||
InitializeRelay();
|
InitializeRelay();
|
||||||
|
InitializeSlots();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user