12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- # This is an autoload (singleton) which will save
- # the key maps in a simple way through a dictionary.
- extends Node
- const keymaps_path := "user://keymaps.dat"
- var keymaps: Dictionary
- func _ready() -> void:
- # First we create the keymap dictionary on startup with all
- # the keymap actions we have.
- for action in InputMap.get_actions():
- if not InputMap.action_get_events(action).is_empty():
- keymaps[action] = InputMap.action_get_events(action)[0]
- load_keymap()
- func load_keymap() -> void:
- if not FileAccess.file_exists(keymaps_path):
- # There is no save file yet, so let's create one.
- save_keymap()
- return
- var file := FileAccess.open(keymaps_path, FileAccess.READ)
- var temp_keymap: Dictionary = file.get_var(true)
- file.close()
- # We don't just replace the keymaps dictionary, because if you
- # updated your game and removed/added keymaps, the data of this
- # save file may have invalid actions. So we check one by one to
- # make sure that the keymap dictionary really has all current actions.
- for action: StringName in keymaps.keys():
- if temp_keymap.has(action):
- keymaps[action] = temp_keymap[action]
- # Whilst setting the keymap dictionary, we also set the
- # correct InputMap event.
- InputMap.action_erase_events(action)
- InputMap.action_add_event(action, keymaps[action])
- func save_keymap() -> void:
- # For saving the keymap, we just save the entire dictionary as a var.
- var file := FileAccess.open(keymaps_path, FileAccess.WRITE)
- file.store_var(keymaps, true)
- file.close()
|