Files
Cielonos/Assets/Scripts/MainGame/UI/PlayerUI/MainGamePages/LogisticsCenter/LogisticsCenterSelector.cs
SoulliesOfficial 649b7a5ddc 更新
2026-05-23 08:27:50 -04:00

126 lines
3.7 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using Cielonos.MainGame.Inventory;
using Cielonos.MainGame.Interactions;
using SLSUtilities.General;
using SLSUtilities.UI;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
namespace Cielonos.MainGame.UI
{
/// <summary>
/// 物流中心(商店)列表中的单个商品选择器条目。
/// 显示物品图标、名称、价格,点击后选中该商品并通知 LogisticCenterUIPage 更新详情面板。
/// 价格以 RareMaterial 数量为单位。
/// </summary>
public class LogisticsCenterSelector : UIElementBase
{
private LogisticsCenterUIPage Page => PlayerCanvas.MainGamePages.logisticsCenterPage;
public ItemBase item;
public int price;
[Header("UI References")]
public Button button;
public Image background;
public Image itemIcon;
public Image rarityFrame;
public Image selectorHint;
public TMP_Text itemName;
public TMP_Text priceText;
public RectTransform tagContainer;
[Header("Visual Settings")]
public Color normalColor = new Color(0.2f, 0.2f, 0.2f, 0.8f);
public Color selectedColor = new Color(0.4f, 0.6f, 0.9f, 0.9f);
public Color affordableColor = new Color(1f, 1f, 1f, 1f);
public Color unaffordableColor = new Color(1f, 0.3f, 0.3f, 1f);
private bool isSelected;
/// <summary>
/// 用给定的商品数据配置此选择器的显示内容。
/// </summary>
/// <param name="itemRef">物品组件引用。</param>
/// <param name="itemPrice">售价RareMaterial 数量)。</param>
public void Setup(ItemBase itemRef, int itemPrice)
{
item = itemRef;
price = itemPrice;
if (item == null || item.contentData == null)
{
Hide();
return;
}
ContentData data = item.contentData;
// 图标
Sprite icon = data.itemType == ItemType.MainWeapon ? data.rectIcon : data.squareIcon;
if (itemIcon != null)
{
itemIcon.sprite = icon;
itemIcon.enabled = icon != null;
}
// 名称(本地化)
if (itemName != null)
{
itemName.text = data.displayNameKey.Localize();
}
// 价格
RefreshPriceDisplay();
// 默认取消选中状态
SetSelected(false);
// 绑定按钮事件
if (button != null)
{
button.onClick.RemoveAllListeners();
button.onClick.AddListener(OnClicked);
}
Show();
}
/// <summary>
/// 设置选中/取消选中的视觉状态。
/// </summary>
public void SetSelected(bool selected)
{
isSelected = selected;
if (background != null)
{
background.color = isSelected ? selectedColor : normalColor;
}
if (selectorHint != null)
{
selectorHint.enabled = isSelected;
}
}
/// <summary>
/// 刷新价格文本颜色(根据玩家当前 RareMaterial 持有量)。
/// </summary>
public void RefreshPriceDisplay()
{
if (priceText == null) return;
priceText.text = price.ToString();
int playerCurrency = MainGameManager.Player.inventorySc.GetRareMaterialAmount();
priceText.color = playerCurrency >= price ? affordableColor : unaffordableColor;
}
private void OnClicked()
{
Page?.SelectItem(this);
}
}
}