Add tabs button to show task and item inventory

This commit is contained in:
HungDK
2026-04-06 11:25:28 +07:00
parent 2060f92f2c
commit d8e7c87365
2 changed files with 79 additions and 32 deletions
@@ -22,10 +22,15 @@ namespace BrewMonster.Scripts.Managers
{
[Header("Pack Buttons (assign in Inspector)")]
[SerializeField] private List<Button> inventoryPackButtons = new List<Button>(); // byPackage: 0
[Tooltip("Main slot grid: shows IVTRTYPE_PACK (0) on Item tab and IVTRTYPE_TASKPACK (2) on Task tab.")]
[SerializeField] private List<Button> inventoryPackButtons = new List<Button>();
[SerializeField] private List<Button> equipmentPackButtons = new List<Button>(); // byPackage: 1
[SerializeField] private List<Button> fashionPackButtons = new List<Button>(); // byPackage: 3
[Header("Inventory tabs — Item vs Task (original PW)")]
[SerializeField] private Button tabItemButton;
[SerializeField] private Button tabTaskButton;
[Header("Detail Panel (assign in Inspector)")]
[SerializeField] private ItemInfo detailPanelRoot;
[SerializeField] private Vector2 detailPanelOffset = new Vector2(20f, 0f);
@@ -89,14 +94,24 @@ namespace BrewMonster.Scripts.Managers
private EC_IvtrItem currentSelectedItem;
private EC_IvtrItem currentSelectedEquipment;
private const byte PKG_INVENTORY = 0;
private const byte PKG_EQUIPMENT = 1;
private const byte PKG_FASHION = 3; // Note: byPackage 3 used for Fashion
private const byte PKG_INVENTORY = InventoryConst.IVTRTYPE_PACK;
private const byte PKG_EQUIPMENT = InventoryConst.IVTRTYPE_EQUIPPACK;
private const byte PKG_TASK = InventoryConst.IVTRTYPE_TASKPACK;
private const byte PKG_FASHION = 3; // Trash / fashion box slot in legacy client (GetInventory may not resolve; see host)
public enum InventoryBagTab
{
Item,
Task,
}
private InventoryBagTab _bagTab = InventoryBagTab.Item;
private void Awake()
{
model = new InventoryModel();
view = new InventoryView();
WireBagTabButtons();
//if (currentDragImage == null)
//{
@@ -115,7 +130,7 @@ namespace BrewMonster.Scripts.Managers
private void Start()
{
RefreshAll();
SetBagTab(InventoryBagTab.Item);
if (hideDetailOnStart)
{
ShowDetailPanel(false);
@@ -130,6 +145,29 @@ namespace BrewMonster.Scripts.Managers
ApplyPendingCurrency();
UpdateCharacterInfo();
ShowDetailPanel(false);
RefreshAll();
}
private void WireBagTabButtons()
{
if (tabItemButton != null)
{
tabItemButton.onClick.RemoveAllListeners();
tabItemButton.onClick.AddListener(() => SetBagTab(InventoryBagTab.Item));
}
if (tabTaskButton != null)
{
tabTaskButton.onClick.RemoveAllListeners();
tabTaskButton.onClick.AddListener(() => SetBagTab(InventoryBagTab.Task));
}
}
/// <summary>Switches main bag view between normal items (tab 1) and task / quest bag (tab 2), like legacy PW.</summary>
public void SetBagTab(InventoryBagTab tab)
{
_bagTab = tab;
ShowDetailPanel(false);
RefreshAll();
}
private void Update()
@@ -149,9 +187,10 @@ namespace BrewMonster.Scripts.Managers
/// </summary>
public void UpdateCooldownOverlays()
{
// Update inventory pack cooldowns
// Main grid shows either normal pack or task pack depending on tab
// 更新背包冷却
UpdatePackageCooldowns(inventoryPackButtons, PKG_INVENTORY);
byte mainPack = _bagTab == InventoryBagTab.Item ? PKG_INVENTORY : PKG_TASK;
UpdatePackageCooldowns(inventoryPackButtons, mainPack);
}
/// <summary>
@@ -204,8 +243,16 @@ namespace BrewMonster.Scripts.Managers
var invItems = model.GetInventoryData(PKG_INVENTORY);
var eqpItems = model.GetInventoryData(PKG_EQUIPMENT);
var fshItems = model.GetInventoryData(PKG_FASHION);
var taskItems = model.GetInventoryData(PKG_TASK);
view.RenderPackage(inventoryPackButtons, invItems, PKG_INVENTORY, OnInventoryButtonClicked, GetDisplayTextForItem);
if (_bagTab == InventoryBagTab.Item)
{
view.RenderPackage(inventoryPackButtons, invItems, PKG_INVENTORY, OnInventoryButtonClicked, GetDisplayTextForItem);
}
else
{
view.RenderPackage(inventoryPackButtons, taskItems, PKG_TASK, OnInventoryButtonClicked, GetDisplayTextForItem);
}
view.RenderPackage(equipmentPackButtons, eqpItems, PKG_EQUIPMENT, OnInventoryButtonClicked, GetDisplayTextForItem);
view.RenderPackage(fashionPackButtons, fshItems, PKG_FASHION, OnInventoryButtonClicked, GetDisplayTextForItem);
UpdateCharacterInfo();
@@ -378,7 +425,7 @@ namespace BrewMonster.Scripts.Managers
return;
}
if (currentSelectedPackage == PKG_INVENTORY)
if (currentSelectedPackage == PKG_INVENTORY || currentSelectedPackage == PKG_TASK)
{
// Check if item is equipment
if (currentSelectedItem.IsEquipment())
@@ -415,9 +462,9 @@ namespace BrewMonster.Scripts.Managers
return;
}
if (currentSelectedPackage != PKG_INVENTORY)
if (currentSelectedPackage != PKG_INVENTORY && currentSelectedPackage != PKG_TASK)
{
Debug.LogWarning("[InventoryUI] Can only use items from inventory package");
Debug.LogWarning("[InventoryUI] Can only use items from inventory or task package");
return;
}
@@ -964,6 +1011,7 @@ namespace BrewMonster.Scripts.Managers
switch (package)
{
case PKG_INVENTORY:
case PKG_TASK:
list = inventoryPackButtons;
break;
case PKG_EQUIPMENT:
@@ -1075,7 +1123,7 @@ namespace BrewMonster.Scripts.Managers
var tmpText = equipButton.GetComponentInChildren<TMPro.TextMeshProUGUI>();
if (tmpText != null)
{
if (package == PKG_INVENTORY)
if (package == PKG_INVENTORY || package == PKG_TASK)
{
//if item is @EC_IvtrEquip and is not equipped, show equip button
if(item is EC_IvtrEquip)
@@ -1102,7 +1150,7 @@ namespace BrewMonster.Scripts.Managers
}
else
{
if (package == PKG_INVENTORY)
if (package == PKG_INVENTORY || package == PKG_TASK)
{
if(item is EC_IvtrEquip)
{