generated from SGDA/GodotExampleProject
27 lines
959 B
GDScript3
27 lines
959 B
GDScript3
|
## Tracker that tracks input for a window and injects it into GUIDE.
|
||
|
## Will automatically keep track of sub-windows.
|
||
|
extends Node
|
||
|
|
||
|
## Instruments a sub-window so it forwards input events to GUIDE.
|
||
|
static func _instrument(viewport:Viewport):
|
||
|
if viewport.has_meta("x-guide-instrumented"):
|
||
|
return
|
||
|
|
||
|
var tracker = preload("guide_input_tracker.gd").new()
|
||
|
tracker.process_mode = Node.PROCESS_MODE_ALWAYS
|
||
|
viewport.add_child(tracker, false, Node.INTERNAL_MODE_BACK)
|
||
|
viewport.gui_focus_changed.connect(tracker._control_focused)
|
||
|
|
||
|
## Catches unhandled input and forwards it to GUIDE
|
||
|
func _unhandled_input(event:InputEvent):
|
||
|
GUIDE.inject_input(event)
|
||
|
|
||
|
## Some ... creative code ... to catch events from popup windows
|
||
|
## that are spawned by Godot's control nodes.
|
||
|
func _control_focused(control:Control):
|
||
|
if control is OptionButton or control is ColorPickerButton \
|
||
|
or control is MenuButton or control is TabContainer:
|
||
|
_instrument(control.get_popup())
|
||
|
|
||
|
|