100 lines
2.1 KiB
GDScript
100 lines
2.1 KiB
GDScript
extends Node
|
|
|
|
const CONFIG_PATH := "user://layout.cfg"
|
|
const SECTION_INFO := "info"
|
|
const SECTION_KEYS := "keys"
|
|
const PARAM_TYPE := "type"
|
|
|
|
var layout_name: String
|
|
var layout_rows: Array[Array]
|
|
var is_configuring: bool = false
|
|
|
|
|
|
func _ready() -> void:
|
|
var err := load_config()
|
|
if err != OK:
|
|
print("config not loaded.....")
|
|
set_defaults()
|
|
is_configuring = true
|
|
# set_defaults()
|
|
|
|
|
|
func _unhandled_input(event: InputEvent) -> void:
|
|
if event.is_action_pressed("save_config"):
|
|
save_config()
|
|
print("config saved!")
|
|
|
|
|
|
func set_defaults() -> void:
|
|
layout_name = LayoutANSI.NAME
|
|
layout_rows = LayoutANSI.rows()
|
|
# layout_name = LayoutISO.NAME
|
|
# layout_rows = LayoutISO.rows()
|
|
|
|
|
|
func load_config() -> Error:
|
|
var config := ConfigFile.new()
|
|
var err := config.load(CONFIG_PATH)
|
|
|
|
if err == ERR_FILE_NOT_FOUND:
|
|
return FAILED
|
|
|
|
if err != OK:
|
|
printerr("failed to load layout config file: %s" % err)
|
|
return FAILED
|
|
|
|
if not config.has_section_key(SECTION_INFO, PARAM_TYPE):
|
|
return FAILED
|
|
|
|
layout_name = config.get_value(SECTION_INFO, PARAM_TYPE)
|
|
|
|
var rows: Array[Array] = []
|
|
|
|
if layout_name == LayoutANSI.NAME:
|
|
rows = LayoutANSI.rows()
|
|
elif layout_name == LayoutISO.NAME:
|
|
rows = LayoutISO.rows()
|
|
else:
|
|
return FAILED
|
|
|
|
for row: Array[KeyProps] in rows:
|
|
for key_props: KeyProps in row:
|
|
var param_key := str(key_props.physical_keycode)
|
|
if (
|
|
not key_props.is_char()
|
|
or not config.has_section_key(SECTION_KEYS, param_key)
|
|
):
|
|
continue
|
|
|
|
var dictionary := config.get_value(SECTION_KEYS, param_key) as Dictionary
|
|
key_props.from_dictionary(dictionary)
|
|
|
|
layout_rows = rows
|
|
|
|
print("config loaded!")
|
|
|
|
return OK
|
|
|
|
|
|
func save_config() -> Error:
|
|
var config := ConfigFile.new()
|
|
|
|
config.set_value(SECTION_INFO, PARAM_TYPE, layout_name)
|
|
|
|
for row: Array[KeyProps] in layout_rows:
|
|
for key_props: KeyProps in row:
|
|
if not key_props.is_char():
|
|
continue
|
|
|
|
config.set_value(
|
|
SECTION_KEYS, str(key_props.physical_keycode), key_props.to_dictionary()
|
|
)
|
|
|
|
var err := config.save(CONFIG_PATH)
|
|
|
|
if err != OK:
|
|
printerr("failed to save config file: %s" % err)
|
|
return err
|
|
|
|
return OK
|