cirnogodot/Scripts/UI/ItemsMenu.cs

90 lines
2.4 KiB
C#
Raw Normal View History

2025-02-25 18:11:57 +01:00
using Godot;
using System;
2025-05-02 10:25:25 +02:00
using System.Linq;
2025-02-25 18:11:57 +01:00
using Cirno.Scripts;
2025-03-13 13:29:13 +01:00
using Cirno.Scripts.UI;
2025-02-25 18:11:57 +01:00
using Godot.Collections;
public partial class ItemsMenu : ItemList
{
private Dictionary<long, string> _itemsDic = new();
2025-03-01 20:50:47 +01:00
2025-03-13 13:29:13 +01:00
[Export] public Array<ItemTypes> ItemsFilter { get; private set; } = [];
private InventoryMenu _parent;
2025-02-25 18:11:57 +01:00
2025-03-13 13:29:13 +01:00
public void Init(InventoryMenu parent)
2025-02-25 18:11:57 +01:00
{
2025-03-13 13:29:13 +01:00
_parent = parent;
Empty();
ItemActivated += OnItemSelected;
2025-02-25 18:11:57 +01:00
}
2025-03-13 13:29:13 +01:00
public void Fill()
2025-02-25 18:11:57 +01:00
{
2025-05-02 10:25:25 +02:00
var sortedItems = InventoryManager.Instance.Items.OrderBy(x => x.Item.ItemKey.ToString()).ToList();
foreach (var item in sortedItems)
2025-02-25 18:11:57 +01:00
{
2025-03-13 13:29:13 +01:00
if (item.Count <= 0) continue;
if (!ItemsFilter.Contains(item.Item.Item)) continue;
var index = this.AddItem($"{item.Item.ItemName} x{item.Count}", item.Item.InventorySprite,
true);
//this.SetItemTooltip(index, item.Item.ItemDescription);
_itemsDic.Add(index, item.Item.ItemKey);
2025-02-25 18:11:57 +01:00
}
}
2025-03-13 13:29:13 +01:00
public void Empty()
2025-02-25 18:11:57 +01:00
{
Clear();
2025-03-13 13:29:13 +01:00
_itemsDic.Clear();
2025-02-25 18:11:57 +01:00
}
private void OnItemSelected(long index)
{
var item = _itemsDic[index];
GD.Print("Item: " + item);
2025-03-13 13:29:13 +01:00
InventoryManager.Instance.TryGetItem(item, out var lootItem);
if (!lootItem.Item.Selectable) return;
2025-02-25 18:11:57 +01:00
2025-03-01 20:50:47 +01:00
GameManager.Instance.ChangeState(GameState.Playing);
2025-03-13 13:29:13 +01:00
InventoryManager.Instance.UseItem(item);
2025-02-25 18:11:57 +01:00
}
2025-03-13 13:29:13 +01:00
// private void HideInventory()
// {
// if (!Visible) return;
// GD.Print("Hiding inventory");
// this.Hide();
// Clear();
// _itemsDic.Clear();
//
// GameManager.Instance.ChangeState(GameState.Playing);
// }
// private void ShowInventory()
// {
// if (Visible) return;
// this.Show();
// GrabFocus();
// foreach (var item in _inventoryManager.Items)
// {
// if (item.Count <= 0) continue;
// if (!ItemsFilter.Contains(item.Item.Item)) continue;
//
// var index = this.AddItem($"{item.Item.ItemName} x{item.Count}", item.Item.InventorySprite,
// true);
//
// this.SetItemTooltip(index, item.Item.ItemDescription);
//
// _itemsDic.Add(index, item.Item.ItemKey);
//
// }
// }
2025-02-25 18:11:57 +01:00
}