fix(ui): unify target-mode primary clicks

This commit is contained in:
Erik 2026-07-11 01:36:43 +02:00
parent b7e7ca9ee2
commit eb6229394a
12 changed files with 176 additions and 25 deletions

View file

@ -295,7 +295,8 @@ public sealed class InventoryController : IItemListDragHandler, IRetainedPanelCo
main.DragAcceptSprite = 0x060011F7u; main.DragRejectSprite = 0x060011F8u;
main.Clicked = () =>
{
if (_itemInteraction?.AcquireSelfTarget() == true) return;
if (_itemInteraction?.OfferSelfPrimaryClick()
is not null and not ItemPrimaryClickResult.NotActive) return;
OpenContainer(p);
};
main.DoubleClicked = () => _itemInteraction?.ActivateItem(p);
@ -332,11 +333,26 @@ public sealed class InventoryController : IItemListDragHandler, IRetainedPanelCo
cell.DragAcceptSprite = 0x060011F7u; // green insert arrow (export-confirmed)
cell.DragRejectSprite = 0x060011F8u; // red circle
cell.DoubleClicked = () => _itemInteraction?.ActivateItem(guid);
if (isContainer) { cell.Clicked = () => OpenContainer(guid); SetCapacityBar(cell, guid); }
else cell.Clicked = () => SelectItem(guid);
if (isContainer)
{
cell.Clicked = () => HandlePrimaryClick(guid, () => OpenContainer(guid));
SetCapacityBar(cell, guid);
}
else
{
cell.Clicked = () => HandlePrimaryClick(guid, () => SelectItem(guid));
}
list.AddItem(cell);
}
private void HandlePrimaryClick(uint guid, Action fallback)
{
if (_itemInteraction?.OfferPrimaryClick(guid)
is not null and not ItemPrimaryClickResult.NotActive)
return;
fallback();
}
private static void AddEmptyCell(UiItemList list)
{
var cell = new UiItemSlot { SpriteResolve = list.SpriteResolve, SlotIndex = list.GetNumUIItems() };

View file

@ -106,13 +106,12 @@ public sealed class PaperdollController : IItemListDragHandler, IRetainedPanelCo
list.Cell.EmptySprite = emptySlotSprite; // visible empty-slot frame so every position is seen + usable. The live
list.Cell.Clicked = () =>
{
if (_itemInteraction?.IsTargetModeActive == true)
{
_itemInteraction.AcquireSelfTarget();
uint itemId = list.Cell.ItemId;
if (itemId != 0 && _itemInteraction?.OfferPrimaryClick(itemId)
is not null and not ItemPrimaryClickResult.NotActive)
return;
}
if (list.Cell.ItemId != 0)
_selection.Select(list.Cell.ItemId, SelectionChangeSource.Paperdoll);
if (itemId != 0)
_selection.Select(itemId, SelectionChangeSource.Paperdoll);
};
list.Cell.DoubleClicked = () =>
{
@ -144,7 +143,7 @@ public sealed class PaperdollController : IItemListDragHandler, IRetainedPanelCo
// four-arrows — retail resolves target cursors off the SmartBox world
// object only; UI hover is always pending. 2026-07-03 visual gate.)
if (_dollViewport is UiViewport doll)
doll.Clicked = () => { _itemInteraction?.AcquireSelfTarget(); };
doll.Clicked = () => { _itemInteraction?.OfferSelfPrimaryClick(); };
var slotsBtnEl = layout.FindElement(0x100005BEu);
if (slotsBtnEl is UiButton slotsBtn)