Lista de inventário

Um ItemList com seleção múltipla, removendo as linhas selecionadas e devolvendo elas.

O editor acima está rodando este projeto. Mude uma linha e ele recarrega.

Classes do Godot usadas

ItemListButton

O código

scripts/main.gd
extends Node

const ITEMS: Array = ['iron sword', 'wooden shield', 'health potion', 'mana potion', 'rope', 'torch', 'old map', 'silver key']

var list: ItemList
var status: Label


func _ready() -> void:
	var column: VBoxContainer = _root()

	var title: Label = Label.new()
	title.text = 'ItemList inventory'
	title.add_theme_font_size_override('font_size', 26)
	column.add_child(title)

	list = ItemList.new()
	list.select_mode = ItemList.SELECT_MULTI
	list.custom_minimum_size = Vector2(420, 320)
	list.multi_selected.connect(func(_index: int, _selected: bool): _update())
	column.add_child(list)

	for item in ITEMS:
		list.add_item(item)

	var row: HBoxContainer = HBoxContainer.new()
	row.add_theme_constant_override('separation', 12)
	column.add_child(row)

	var drop: Button = Button.new()
	drop.text = 'drop selected'
	drop.pressed.connect(_drop_selected)
	row.add_child(drop)

	var restore: Button = Button.new()
	restore.text = 'restore'
	restore.pressed.connect(_restore)
	row.add_child(restore)

	status = Label.new()
	status.add_theme_color_override('font_color', Color('#999999'))
	column.add_child(status)

	_update()


func _drop_selected() -> void:
	var selected: PackedInt32Array = list.get_selected_items()

	for i in range(selected.size() - 1, -1, -1):
		list.remove_item(selected[i])

	_update()


func _restore() -> void:
	list.clear()

	for item in ITEMS:
		list.add_item(item)

	_update()


func _update() -> void:
	status.text = '%d items, %d selected (ctrl click for more)' % [list.item_count, list.get_selected_items().size()]


func _root() -> VBoxContainer:
	var background: ColorRect = ColorRect.new()
	background.color = Color('#12141a')
	add_child(background)
	background.set_anchors_and_offsets_preset(Control.PRESET_FULL_RECT)

	var center: CenterContainer = CenterContainer.new()
	add_child(center)
	center.set_anchors_and_offsets_preset(Control.PRESET_FULL_RECT)

	var column: VBoxContainer = VBoxContainer.new()
	column.add_theme_constant_override('separation', 16)
	center.add_child(column)

	return column

Mais exemplos de Interface