Godot Version
4.3
Question
I have a basic ImGui displayed on toggle and I want to disable my FPS controller mouse input when the Gui is open. I have a FPS controller (mouse is “attached” to the center of the screen like typical FPS) and when I toggle the Gui I set MOUSE_MODE_VISIBLE but the mouse still controls the camera movement as well as the cursor.
Does anyone know if there is a simple way to disable the mouse inputs (including mouse buttons) when the Gui is toggled on? All I can come up with is some jank by referencing the camera and set_process_input but I haven’t gotten it to work either.
Here is my gui script for reference. Thanks for any help you can provide. Cheers!
extends Node
var ai_driver_on := true
var gui_visible := false
func _ready() -> void:
Engine.max_fps = 120
var io := ImGui.GetIO()
io.ConfigFlags |= ImGui.ConfigFlags_ViewportsEnable
# Capture the mouse cursor initially
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
func _input(event: InputEvent) -> void:
if event.is_action_pressed("toggle_gui"):
gui_visible = not gui_visible
if gui_visible:
Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
else:
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
func _process(_delta: float) -> void:
if not gui_visible:
return
if ImGui.Begin("AI Driver Control"):
if ImGui.Checkbox("Turn AI Driver Off", [not ai_driver_on]):
ai_driver_on = not ai_driver_on
ImGui.Text("AI Driver is currently: %s" % ("On" if ai_driver_on else "Off"))
ImGui.End()
# Add this function to handle game input when GUI is not visible
func _unhandled_input(event: InputEvent) -> void:
if not gui_visible:
# Handle your game input here
pass
else:
# Consume input events when GUI is visible to prevent them from affecting the game
get_viewport().set_input_as_handled()