HandsSystem Refactor (#38438)
* checkpoint * pt 2 * pt... i forgot * pt 4 * patch * More test fixes * optimization!!! * the REAL hand system * fix RetractableItemActionSystem.cs oversight * the review * test * remove test usage of body prototype * Update Content.IntegrationTests/Tests/Interaction/InteractionTest.cs Co-authored-by: Tayrtahn <tayrtahn@gmail.com> * hellcode * hellcode 2 * Minor cleanup * test * Chasing the last of the bugs * changes --------- Co-authored-by: Tayrtahn <tayrtahn@gmail.com>
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
using System.Linq;
|
||||
using System.Numerics;
|
||||
using Content.Client.Examine;
|
||||
using Content.Client.Hands.Systems;
|
||||
using Content.Client.Strip;
|
||||
using Content.Client.Stylesheets;
|
||||
using Content.Client.UserInterface.Controls;
|
||||
@@ -34,6 +35,7 @@ namespace Content.Client.Inventory
|
||||
[Dependency] private readonly IUserInterfaceManager _ui = default!;
|
||||
|
||||
private readonly ExamineSystem _examine;
|
||||
private readonly HandsSystem _hands;
|
||||
private readonly InventorySystem _inv;
|
||||
private readonly SharedCuffableSystem _cuffable;
|
||||
private readonly StrippableSystem _strippable;
|
||||
@@ -65,6 +67,7 @@ namespace Content.Client.Inventory
|
||||
public StrippableBoundUserInterface(EntityUid owner, Enum uiKey) : base(owner, uiKey)
|
||||
{
|
||||
_examine = EntMan.System<ExamineSystem>();
|
||||
_hands = EntMan.System<HandsSystem>();
|
||||
_inv = EntMan.System<InventorySystem>();
|
||||
_cuffable = EntMan.System<SharedCuffableSystem>();
|
||||
_strippable = EntMan.System<StrippableSystem>();
|
||||
@@ -120,28 +123,28 @@ namespace Content.Client.Inventory
|
||||
{
|
||||
// good ol hands shit code. there is a GuiHands comparer that does the same thing... but these are hands
|
||||
// and not gui hands... which are different...
|
||||
foreach (var hand in handsComp.Hands.Values)
|
||||
foreach (var (id, hand) in handsComp.Hands)
|
||||
{
|
||||
if (hand.Location != HandLocation.Right)
|
||||
continue;
|
||||
|
||||
AddHandButton(hand);
|
||||
AddHandButton((Owner, handsComp), id, hand);
|
||||
}
|
||||
|
||||
foreach (var hand in handsComp.Hands.Values)
|
||||
foreach (var (id, hand) in handsComp.Hands)
|
||||
{
|
||||
if (hand.Location != HandLocation.Middle)
|
||||
continue;
|
||||
|
||||
AddHandButton(hand);
|
||||
AddHandButton((Owner, handsComp), id, hand);
|
||||
}
|
||||
|
||||
foreach (var hand in handsComp.Hands.Values)
|
||||
foreach (var (id, hand) in handsComp.Hands)
|
||||
{
|
||||
if (hand.Location != HandLocation.Left)
|
||||
continue;
|
||||
|
||||
AddHandButton(hand);
|
||||
AddHandButton((Owner, handsComp), id, hand);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -177,20 +180,21 @@ namespace Content.Client.Inventory
|
||||
_strippingMenu.SetSize = new Vector2(horizontalMenuSize, verticalMenuSize);
|
||||
}
|
||||
|
||||
private void AddHandButton(Hand hand)
|
||||
private void AddHandButton(Entity<HandsComponent> ent, string handId, Hand hand)
|
||||
{
|
||||
var button = new HandButton(hand.Name, hand.Location);
|
||||
var button = new HandButton(handId, hand.Location);
|
||||
|
||||
button.Pressed += SlotPressed;
|
||||
|
||||
if (EntMan.TryGetComponent<VirtualItemComponent>(hand.HeldEntity, out var virt))
|
||||
var heldEntity = _hands.GetHeldItem(ent.AsNullable(), handId);
|
||||
if (EntMan.TryGetComponent<VirtualItemComponent>(heldEntity, out var virt))
|
||||
{
|
||||
button.Blocked = true;
|
||||
if (EntMan.TryGetComponent<CuffableComponent>(Owner, out var cuff) && _cuffable.GetAllCuffs(cuff).Contains(virt.BlockingEntity))
|
||||
button.BlockedRect.MouseFilter = MouseFilterMode.Ignore;
|
||||
}
|
||||
|
||||
UpdateEntityIcon(button, hand.HeldEntity);
|
||||
UpdateEntityIcon(button, heldEntity);
|
||||
_strippingMenu!.HandsContainer.AddChild(button);
|
||||
LayoutContainer.SetPosition(button, new Vector2i(_handCount, 0) * (SlotControl.DefaultButtonSize + ButtonSeparation));
|
||||
_handCount++;
|
||||
|
||||
Reference in New Issue
Block a user