using ColdMint.scripts.inventory; using ColdMint.scripts.utils; using Godot; namespace ColdMint.scripts.loader.uiLoader; /// <summary> /// <para>Backpack UI</para> /// <para>背包UI</para> /// </summary> public partial class PacksackUi : UiLoaderTemplate { private IItemContainer? _itemContainer; private PackedScene? _packedScene; private HFlowContainer? _hFlowContainer; private Label? _titleLabel; private string? _title; private Button? _exitButton; /// <summary> /// <para>title</para> /// <para>标题</para> /// </summary> public string? Title { get => _title; set { _title = value; SetTile(value); } } /// <summary> /// <para>Packsack</para> /// <para>背包</para> /// </summary> public IItemContainer? ItemContainer { get => _itemContainer; set { _itemContainer = value; PlaceItemSlot(value); } } /// <summary> /// <para>Place item slots according to item information</para> /// <para>根据物品信息放置物品槽</para> /// </summary> /// <param name="itemContainer"></param> private void PlaceItemSlot(IItemContainer? itemContainer) { if (_hFlowContainer == null || itemContainer == null) { return; } NodeUtils.DeleteAllChild(_hFlowContainer); foreach (var itemSlotNode in itemContainer) { itemSlotNode.Reparent(_hFlowContainer); itemSlotNode.Show(); } } /// <summary> /// <para>SetTile</para> /// <para>设置标题</para> /// </summary> /// <param name="title"></param> private void SetTile(string? title) { if (_titleLabel == null) { return; } _titleLabel.Text = title; } public override void InitializeData() { _packedScene = GD.Load<PackedScene>("res://prefab/ui/ItemSlot.tscn"); } public override void InitializeUi() { _hFlowContainer = GetNode<HFlowContainer>("HFlowContainer"); _titleLabel = GetNode<Label>("TitleLabel"); _exitButton = GetNode<Button>("ExitButton"); //If the item container was set before this node was placed in the node tree, load it here. //若物品容器在此节点放置到节点树之前被设置了,那么在这里加载。 PlaceItemSlot(_itemContainer); SetTile(_title); } public override void LoadUiActions() { if (_exitButton != null) { _exitButton.Pressed += () => { GameSceneNodeHolder.BackpackUiContainer?.Hide(); Hide(); }; } } }