thegates/app/scripts/sandbox/input_sync.gd
2024-12-03 11:10:50 +04:00

51 lines
1.2 KiB
GDScript

extends Node
@export var gate_events: GateEvents
@export var ui_events: UiEvents
@export var render_result: RenderResult
var scale: float
var offset: Vector2
var input_sync: InputSync
var should_send := false
func _ready() -> void:
gate_events.gate_entered.connect(start_server)
ui_events.ui_mode_changed.connect(on_ui_mode_changed)
func start_server() -> void:
input_sync = InputSync.new()
input_sync.bind()
scale = DisplayServer.screen_get_scale()
offset = render_result.global_position
Debug.logclr("Mouse position scale: %.2f. Offset: %.2f" % [scale, offset.y], Color.DIM_GRAY)
func on_ui_mode_changed(mode: UiEvents.UiMode) -> void:
should_send = mode == UiEvents.UiMode.FOCUSED
func _input(_event: InputEvent) -> void:
if input_sync == null or not should_send: return
var event = _event
if event is InputEventMouse:
event = _event.duplicate()
event.position = get_scaled_mouse_pos(event.position)
event.global_position = get_scaled_mouse_pos(event.global_position)
input_sync.send_input_event(event)
func get_scaled_mouse_pos(position : Vector2) -> Vector2:
return (position - offset) * scale
func _exit_tree() -> void:
if input_sync != null:
input_sync.close()
input_sync = null