using System; using ColdMint.scripts.map.events; using ColdMint.scripts.utils; using Godot; namespace ColdMint.scripts.inventory; /// /// HotBar /// 快捷物品栏 /// public partial class HotBar : HBoxContainer { private IItemContainer? _itemContainer; Action? SelectedItemSlotChangeEvent { get; set; } public override void _Ready() { base._Ready(); _itemContainer = new UniversalItemContainer(); _itemContainer.SupportSelect = true; _itemContainer.SelectedItemSlotChangeEvent += SelectedItemSlotChangeEvent; NodeUtils.DeleteAllChild(this); for (var i = 0; i < Config.HotBarSize; i++) { _itemContainer.AddItemSlot(this); } } public override void _Process(double delta) { base._Process(delta); if (Input.IsActionJustPressed("hotbar_next")) { //Mouse wheel down //鼠标滚轮向下 _itemContainer?.SelectTheNextItemSlot(); } if (Input.IsActionJustPressed("hotbar_previous")) { //Mouse wheel up //鼠标滚轮向上 _itemContainer?.SelectThePreviousItemSlot(); } if (Input.IsActionJustPressed("hotbar_1")) { SelectItemSlotByHotBarShortcutKey(0); } if (Input.IsActionJustPressed("hotbar_2")) { SelectItemSlotByHotBarShortcutKey(1); } if (Input.IsActionJustPressed("hotbar_3")) { SelectItemSlotByHotBarShortcutKey(2); } if (Input.IsActionJustPressed("hotbar_4")) { SelectItemSlotByHotBarShortcutKey(3); } if (Input.IsActionJustPressed("hotbar_5")) { SelectItemSlotByHotBarShortcutKey(4); } if (Input.IsActionJustPressed("hotbar_6")) { SelectItemSlotByHotBarShortcutKey(5); } if (Input.IsActionJustPressed("hotbar_7")) { SelectItemSlotByHotBarShortcutKey(6); } if (Input.IsActionJustPressed("hotbar_8")) { SelectItemSlotByHotBarShortcutKey(7); } if (Input.IsActionJustPressed("hotbar_9")) { SelectItemSlotByHotBarShortcutKey(8); } } /// /// Select the HotBar project using the shortcut keys /// 通过快捷键选择HotBar项目 /// /// The Pc version of the shortcut key index is 0-9 /// Pc版本的快捷键索引为0-9 /// private void SelectItemSlotByHotBarShortcutKey(int shortcutKeyIndex) { if (_itemContainer == null) { return; } _itemContainer.SelectItemSlot(shortcutKeyIndex); } public IItemContainer? GetItemContainer() { return _itemContainer; } public override void _ExitTree() { base._ExitTree(); if (_itemContainer != null) { _itemContainer.SelectedItemSlotChangeEvent -= SelectedItemSlotChangeEvent; } } }