Get any mouse button press

:information_source: Attention Topic was automatically imported from the old Question2Answer platform.
:bust_in_silhouette: Asked By colonelkurtz

I coded a controls menu that allows users to press a button, which triggers the following code

func _unhandled_input(event):
 if !event.is_action_pressed("ui_cancel"):
  match keyInput:
    (...)
    3:
	  if event is InputEventKey and event.pressed:
	    var interact = InputMap.get_action_list("interact")
	    InputMap.action_erase_event("interact",interact[0])
	    InputMap.action_add_event("interact", event)
	    get_node("Node2D/Node2D/Button3").text = InputMap.get_action_list("interact")[0].as_text()
	  keyInput = 0

This works great. I press, say, the move up button, press a key, and that key is my new move up input command.

The issue is for assigning mouse button inputs. The below code, which executes when match keyInput == 1 or 2, only picks up scroll wheel movement, and even that not always:

if event is InputEventMouseButton and event.pressed:
  var fire = InputMap.get_action_list("fire")
  InputMap.action_erase_event("fire",fire[0])
  InputMap.action_add_event("fire", event)
  get_node("Node2D/Node2D/Button").text = buttonNames[event.button_index]
keyInput = 0

I tried moving the mouse input section to _input(event), but then it doesn’t even pick up scroll wheel movement, which makes me think the issue resides in this executing in the event loop. What am I missing here?

:bust_in_silhouette: Reply From: colonelkurtz

Solved! After two days of staring at this, it seems to be working. Here’s the current code:

(in func _input(event))
...
	if event is InputEventMouseButton and event.button_index != 4 and event.button_index != 5:
		match keyInput:
			1:
				get_tree().set_input_as_handled()
				if event.pressed:
					var fire = InputMap.get_action_list("fire")
					InputMap.action_erase_event("fire",fire[0])
					InputMap.action_add_event("fire", event)
					get_node("Node2D/Node2D/Button").text = buttonNames[event.button_index]
				keyInput = 0

Upon button pressed, keyInput is set to the appropriate variable and waits for new button press. set_input_as_handled() stops LMB from registering as another button push and takes LMB simple as the new Input to be mapped. I’ll probably add something so it won’t accept scroll wheel movement, but the basic thing works.