Godot Version
4.2.2
Question
at _test_binding
#here I do not know how to from key code example 70 make it an InputEvent
so that I would than set it to the InputMap
any other solution how to permanently save in to InputMap would be appreciate
thanks
#region binding
var change_input_map = ""
@onready var forward = $bindings/HBoxContainer/MarginContainer/VBoxContainer/Button
func _test_binding():
change_input_map = "forward"
finished = _test_finish_binding
var keycode = DataBase.select(false, g_man.dbms, "bindings", "forward", 1)
#here I do not know how to from key code example 70 make it an InputEvent
var e = InputEvent
e.device = keycode
func _test_finish_binding(event):
forward.text = String("{e}").format({e = event.as_text()})
DataBase.insert(false, g_man.dbms, "bindings", "forward", 1, event.keycode)
var finished:Callable
func _input(event):
if change_input_map:
if event is InputEventKey:
if event.is_released():
InputMap.action_erase_events(change_input_map)
InputMap.action_add_event(change_input_map, event)
change_input_map = ""
finished.call(event)
#endregion binding
Anyone has any idea?
How to set input map with raw number?
managed to make a solution thanks to the @Locher from post:
How do I rebind keybinds from a string
#region binding
var change_input_map := ""
var binding_node_string
enum keys{
forward = 1,
back = 2,
left = 3,
right = 4,
jump = 5
}
## from g_man
func load_keys():
for i in keys:
load_key(i)
func load_key(key_string):
var table = DataBase.Table.new("bindings")
table.create_column(false, g_man.dbms, DataBase.DataType.INT, 1, key_string)
var keycode = DataBase.select(false, g_man.dbms, "bindings", key_string, 1)
if keycode > 5:
var event_key:InputEventKey = InputEventKey.new()
event_key.keycode = keycode
InputMap.action_erase_events(key_string)
InputMap.action_add_event(key_string, event_key)
else:
var event_key:InputEventMouseButton = InputEventMouseButton.new()
event_key.button_index = keycode
InputMap.action_erase_events(key_string)
InputMap.action_add_event(key_string, event_key)
func _change_binding(index:int):
binding_node_string = str(index)
finished = _finish_binding
change_input_map = keys.find_key(index)
pass
func _finish_binding(event):
var node = get_node("bindings/HBoxContainer/MarginContainer/VBoxContainer/binding container" + binding_node_string + "/change binding")
node.text = str(event.as_text())
if event is InputEventKey:
DataBase.insert(false, g_man.dbms, "bindings", change_input_map, 1, event.keycode)
elif event is InputEventMouseButton:
DataBase.insert(false, g_man.dbms, "bindings", change_input_map, 1, event.button_index)
var finished:Callable
func _input(event):
if change_input_map:
if event is InputEventKey or event is InputEventMouseButton:
if event.is_released():
InputMap.action_erase_events(change_input_map)
InputMap.action_add_event(change_input_map, event)
finished.call(event)
change_input_map = ""
#endregion binding
thanks Locher for mentioning me it notified me.
now I know how to do it for others.