-
-
Notifications
You must be signed in to change notification settings - Fork 1.7k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #739 from voylin/FixGuiInputMappingPersistenceKeyM…
…aps3.x [3.x] GUI Input Mapping Demo Persistent Key Mapping- Fixes #629
- Loading branch information
Showing
3 changed files
with
53 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
# 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(): | ||
keymaps[action] = InputMap.get_action_list(action)[0] | ||
load_keymap() | ||
|
||
|
||
func load_keymap() -> void: | ||
var file := File.new() | ||
if not file.file_exists(keymaps_path): | ||
save_keymap() # There is no save file yet, so let's create one. | ||
return | ||
#warning-ignore:return_value_discarded | ||
file.open(keymaps_path, File.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 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 := File.new() | ||
#warning-ignore:return_value_discarded | ||
file.open(keymaps_path, File.WRITE) | ||
file.store_var(keymaps, true) | ||
file.close() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters