diff options
Diffstat (limited to 'client/gui')
-rw-r--r-- | client/gui/menus/settings/input/input_manager.gd | 59 | ||||
-rw-r--r-- | client/gui/menus/settings/input/input_setting.gd | 2 | ||||
-rw-r--r-- | client/gui/overlays/popup_message/popup_message.gd | 4 |
3 files changed, 11 insertions, 54 deletions
diff --git a/client/gui/menus/settings/input/input_manager.gd b/client/gui/menus/settings/input/input_manager.gd index da148e8d..b0b80a39 100644 --- a/client/gui/menus/settings/input/input_manager.gd +++ b/client/gui/menus/settings/input/input_manager.gd @@ -22,64 +22,21 @@ enum EventType { OTHER } -var default_input_map = {} -var input_map: Dictionary +func action_list() -> Array: # Array[String] + return InputMap.get_actions().filter(func isBuiltIn(k: String): return !k.begins_with("ui_")).map(func (x): return str(x)) -func _init(): - default_input_map = get_input_map() - input_map = default_input_map.duplicate(true) - -func get_input_map() -> Dictionary: - var actions = InputMap.get_actions().filter(func isBuiltIn(k: String): return !k.begins_with("ui_")) - var kb = {} - for a in actions: - var input_events: Array[InputEvent] = InputMap.action_get_events(a).duplicate(true) - kb[a] = input_events - return kb - -func get_events(action_name: String) -> Array: - if not input_map.has(action_name): - push_error("Tried to get action %s in input map which does not exist" % action_name) - return [] - return input_map[action_name] +func update_input_map(action: String): + if not action in action_list(): return + InputMap.action_erase_events(action) + for event in Settings.read("input.%s" % action): + InputMap.action_add_event(action, event) func settings(extra) -> Array: # Array[GameSetting] var entries := [] - for k in input_map.keys(): entries.append(InputSetting.new(k)) + for k in action_list(): entries.append(InputSetting.new(k)) entries.append_array(extra) return entries -func change_input_map_action(action_name: String, events: Array, save: bool = true): - if !InputMap.has_action(action_name): - push_error("Action %s does not exist" % action_name, false) - return - # Erase previous keybindings - InputMap.action_erase_events(action_name) - # Add new keybindings - for e in events: - InputMap.action_add_event(action_name, e) - - if save: - # Update input map dictionary - input_map = get_input_map() - # Save settings - Settings.write("input_map", input_map.duplicate(true)) - -func apply_input_map(new_input_map: Dictionary): - # Load into input map dictionary - for k in new_input_map.keys(): - input_map[k] = [] - for a in new_input_map[k]: - input_map[k].append(a) - - # Apply keybindings - for k in input_map.keys(): - change_input_map_action(k, input_map[k], false) - -func reset_input_map(): - Settings.write("input_map", default_input_map.duplicate()) - apply_input_map(Settings.read("input_map")) - func get_event_type(input_event: InputEvent) -> EventType: if input_event is InputEventKey or input_event is InputEventMouseButton: return EventType.KEYBOARD diff --git a/client/gui/menus/settings/input/input_setting.gd b/client/gui/menus/settings/input/input_setting.gd index 3367ac8e..3533cddf 100644 --- a/client/gui/menus/settings/input/input_setting.gd +++ b/client/gui/menus/settings/input/input_setting.gd @@ -20,7 +20,7 @@ const INPUT_VALUE_NODE_SCENE = preload("res://gui/menus/settings/input/input_val func _init(new_id: String): super(new_id) - default = InputManager.default_input_map[new_id] + default = InputMap.action_get_events(new_id).duplicate(true) func create_row(): var row = super() diff --git a/client/gui/overlays/popup_message/popup_message.gd b/client/gui/overlays/popup_message/popup_message.gd index 6a3d8273..74268958 100644 --- a/client/gui/overlays/popup_message/popup_message.gd +++ b/client/gui/overlays/popup_message/popup_message.gd @@ -178,8 +178,8 @@ func _on_zoom_timeout(): )])) func display_keybind(action_name: String) -> String: - var events := InputManager.get_events(action_name) - + var events = Settings.read("input.%s" % action_name) + if events.size() == 0: # There are no events which match the action return tr("c.settings.input.unknown_event") |