Interior Maps #13
BIN
map_editor.scn (Stored with Git LFS)
BIN
map_editor.scn (Stored with Git LFS)
Binary file not shown.
Binary file not shown.
|
@ -1,86 +0,0 @@
|
||||||
@tool
|
|
||||||
class_name ItemSelection extends HFlowContainer
|
|
||||||
|
|
||||||
##
|
|
||||||
## An item has been selected via GUI selection or [method select_item].
|
|
||||||
##
|
|
||||||
signal item_selected(index: int)
|
|
||||||
|
|
||||||
var _button_group := ButtonGroup.new()
|
|
||||||
|
|
||||||
##
|
|
||||||
## Number of items in the selection.
|
|
||||||
##
|
|
||||||
var item_count: int:
|
|
||||||
get:
|
|
||||||
return _button_group.get_buttons().size()
|
|
||||||
|
|
||||||
func _get_configuration_warnings() -> PackedStringArray:
|
|
||||||
var warnings := PackedStringArray()
|
|
||||||
var children := get_children()
|
|
||||||
|
|
||||||
if not(children.is_empty()):
|
|
||||||
var self_class_name := get_class()
|
|
||||||
|
|
||||||
for child in get_children():
|
|
||||||
warnings.append(
|
|
||||||
"{0} can only have Button children, but {1} is of type {2}".format(
|
|
||||||
[self_class_name, child.name, child.get_class()]))
|
|
||||||
|
|
||||||
return warnings
|
|
||||||
|
|
||||||
##
|
|
||||||
## Adds a new item with no text and only [code]icon[/code] as the icon to the selection.
|
|
||||||
##
|
|
||||||
func add_icon_item(icon: Texture2D) -> void:
|
|
||||||
var child_count := get_child_count()
|
|
||||||
var button := Button.new()
|
|
||||||
|
|
||||||
button.icon = icon
|
|
||||||
button.icon_alignment = HORIZONTAL_ALIGNMENT_CENTER
|
|
||||||
button.toggle_mode = true
|
|
||||||
button.button_group = _button_group
|
|
||||||
button.button_pressed = child_count == 0
|
|
||||||
|
|
||||||
button.pressed.connect(func () -> void: select_item(child_count))
|
|
||||||
add_child(button)
|
|
||||||
|
|
||||||
##
|
|
||||||
## Returns the icon used by the item at [code]index[/code].
|
|
||||||
##
|
|
||||||
## An assertion is raised if [code]index[/code] is out of bounds from the item count.
|
|
||||||
##
|
|
||||||
func get_item_icon(index: int) -> Texture2D:
|
|
||||||
var buttons := _button_group.get_buttons()
|
|
||||||
|
|
||||||
assert(index < buttons.size(), "index out of range")
|
|
||||||
|
|
||||||
var button := buttons[index] as Button
|
|
||||||
|
|
||||||
return null if (button == null) else button.icon
|
|
||||||
|
|
||||||
##
|
|
||||||
## Returns the currently selected item index or [code]-1[/code] if no item is selected.
|
|
||||||
##
|
|
||||||
func get_selected_item() -> int:
|
|
||||||
var pressed_button := _button_group.get_pressed_button()
|
|
||||||
|
|
||||||
return -1 if (pressed_button == null) else pressed_button.get_index()
|
|
||||||
|
|
||||||
##
|
|
||||||
## Selects the item at [code]index[/code], emitting [signal item_selected] at the end.
|
|
||||||
##
|
|
||||||
## An assertion is raised if [code]index[/code] is out of bounds from the item count.
|
|
||||||
##
|
|
||||||
func select_item(index: int) -> void:
|
|
||||||
var buttons := _button_group.get_buttons()
|
|
||||||
|
|
||||||
assert(index < buttons.size(), "index out of range")
|
|
||||||
|
|
||||||
var pressed_button := _button_group.get_pressed_button()
|
|
||||||
|
|
||||||
if pressed_button != null:
|
|
||||||
pressed_button.set_pressed_no_signal(false)
|
|
||||||
|
|
||||||
buttons[index].set_pressed_no_signal(true)
|
|
||||||
item_selected.emit(index)
|
|
Loading…
Reference in New Issue