stick-the-quick/ui/OptionsMenu/InputMapMenu.gd

65 lines
1.9 KiB
GDScript

class_name InputMapMenu extends AbstractConfigMenu
@onready var _actual_menu := (
$'OuterMargin/Content/ActualMenu'
)
@onready var _content := _actual_menu.get_node(
^'./ContentScrollContainer/ContentInnerMargin/Content'
)
var _hlists := {}
var _originals := {}
func _connect_signals() -> void:
_button_apply.visible = false
for action in InputMap.get_actions():
if not action.begins_with('ui_'):
var label := Label.new()
var hlist := (
preload('res://ui/EditableHorizontalList.tscn').instantiate()
) as EditableHorizontalList
_hlists[action] = hlist
_content.add_child(label)
_content.add_child(hlist)
label.text = action.capitalize()
func _pull_settings() -> void:
for action in _hlists:
var hlist := _hlists[action] as EditableHorizontalList
hlist.clear()
_originals[action] = []
for event in InputMap.action_get_events(action):
var item := hlist.insert()
var picker := (preload(
'res://ui/OptionsMenu/InputEventPicker.tscn'
).instantiate()) as InputEventPicker
item.content.add_child(picker)
picker.event = event
picker.update_label()
_originals[action].push_back(event)
func _push_settings() -> void:
for action in _hlists:
InputMap.action_erase_events(action)
var hlist := _hlists[action] as EditableHorizontalList
for item in hlist.item_array:
var picker := item.content.get_child(0) as InputEventPicker
if picker.event:
InputMap.action_add_event(action, picker.event)
func _revert_changes() -> void:
for action in _hlists:
var hlist := _hlists[action] as EditableHorizontalList
hlist.clear()
for event in _originals[action]:
var item := hlist.insert()
var picker := (preload(
'res://ui/OptionsMenu/InputEventPicker.tscn'
).instantiate()) as InputEventPicker
item.content.add_child(picker)
picker.event = event
picker.update_label()
func _restore_defaults() -> void:
InputMap.load_from_project_settings()
_pull_settings()