Harden controller device handling
This commit is contained in:
parent
c95bcd7aa0
commit
1f731a6354
10 changed files with 286 additions and 66 deletions
|
|
@ -58,6 +58,7 @@ func open_panel() -> void:
|
|||
if _mapping_manager == null:
|
||||
return
|
||||
_cancel_capture()
|
||||
_mapping_manager.recalibrate_active_device()
|
||||
show()
|
||||
_refresh_bindings()
|
||||
_auto_map_button.grab_focus()
|
||||
|
|
@ -140,8 +141,6 @@ func _on_controller_input_observed(event: InputEvent) -> void:
|
|||
if _capturing_role.is_empty():
|
||||
return
|
||||
get_viewport().set_input_as_handled()
|
||||
if _waiting_for_neutral:
|
||||
return
|
||||
var button_event := event as InputEventJoypadButton
|
||||
var motion_event := event as InputEventJoypadMotion
|
||||
var event_device: int = -1
|
||||
|
|
@ -153,6 +152,20 @@ func _on_controller_input_observed(event: InputEvent) -> void:
|
|||
return
|
||||
if event_device != _capture_device_id:
|
||||
return
|
||||
if (
|
||||
button_event != null
|
||||
and button_event.pressed
|
||||
and _capturing_role != ControllerMappingManagerType.ROLE_B
|
||||
and _mapping_manager.event_matches_role(
|
||||
event,
|
||||
ControllerMappingManagerType.ROLE_B,
|
||||
)
|
||||
):
|
||||
_cancel_capture()
|
||||
_progress_label.text = "controller mapping cancelled"
|
||||
return
|
||||
if _waiting_for_neutral:
|
||||
return
|
||||
_try_capture_event(event)
|
||||
|
||||
|
||||
|
|
@ -224,8 +237,9 @@ func _build_interface() -> void:
|
|||
|
||||
_instruction_label = Label.new()
|
||||
_instruction_label.text = (
|
||||
"auto-map walks through a standard xbox-style controller. "
|
||||
+ "select any row afterward to override it."
|
||||
"auto-map walks through NETfishing's controller actions. "
|
||||
+ "select any row afterward to override it; the mapped back "
|
||||
+ "control cancels capture."
|
||||
)
|
||||
_instruction_label.autowrap_mode = TextServer.AUTOWRAP_WORD_SMART
|
||||
_instruction_label.add_theme_font_size_override("font_size", 15)
|
||||
|
|
|
|||
|
|
@ -112,10 +112,7 @@ func _update_selection() -> void:
|
|||
|
||||
|
||||
func _get_selection_stick() -> Vector2:
|
||||
if (
|
||||
_controller_mapping_manager != null
|
||||
and _controller_mapping_manager.has_custom_mapping()
|
||||
):
|
||||
if _controller_mapping_manager != null:
|
||||
return Vector2(
|
||||
_controller_mapping_manager.get_role_axis(
|
||||
ControllerMappingManagerType.ROLE_RIGHT_STICK_X
|
||||
|
|
|
|||
|
|
@ -187,6 +187,10 @@ func _ready() -> void:
|
|||
_pause_settings_panel.crisp_reset_focus_requested.connect(
|
||||
crisp_reset_focus_requested.emit
|
||||
)
|
||||
if not Input.joy_connection_changed.is_connected(
|
||||
_on_controller_connection_changed
|
||||
):
|
||||
Input.joy_connection_changed.connect(_on_controller_connection_changed)
|
||||
|
||||
|
||||
func setup(
|
||||
|
|
@ -404,7 +408,6 @@ func _handle_controller_chat_controls(event: InputEvent) -> bool:
|
|||
return false
|
||||
var use_mapping: bool = (
|
||||
_controller_mapping_manager != null
|
||||
and _controller_mapping_manager.has_custom_mapping()
|
||||
)
|
||||
var select_pressed: bool = (
|
||||
_controller_mapping_manager.event_matches_role(
|
||||
|
|
@ -541,13 +544,13 @@ func _handle_virtual_mouse_input(event: InputEvent) -> bool:
|
|||
func _handle_mapped_virtual_mouse_input(event: InputEvent) -> bool:
|
||||
var uses_activation: bool = _controller_mapping_manager.event_uses_role(
|
||||
event,
|
||||
ControllerMappingManagerType.ROLE_LT,
|
||||
ControllerMappingManagerType.ROLE_POINTER_MODIFIER,
|
||||
)
|
||||
if uses_activation:
|
||||
var was_active: bool = _virtual_mouse_active
|
||||
_virtual_mouse_trigger_strength = (
|
||||
_controller_mapping_manager.get_role_strength(
|
||||
ControllerMappingManagerType.ROLE_LT
|
||||
ControllerMappingManagerType.ROLE_POINTER_MODIFIER
|
||||
)
|
||||
)
|
||||
if (
|
||||
|
|
@ -589,12 +592,12 @@ func _handle_mapped_virtual_mouse_input(event: InputEvent) -> bool:
|
|||
return true
|
||||
if _controller_mapping_manager.event_uses_role(
|
||||
event,
|
||||
ControllerMappingManagerType.ROLE_RT,
|
||||
ControllerMappingManagerType.ROLE_CAMERA_ZOOM,
|
||||
):
|
||||
_set_virtual_mouse_button(
|
||||
MOUSE_BUTTON_RIGHT,
|
||||
_controller_mapping_manager.get_role_strength(
|
||||
ControllerMappingManagerType.ROLE_RT
|
||||
ControllerMappingManagerType.ROLE_CAMERA_ZOOM
|
||||
) >= VIRTUAL_MOUSE_TRIGGER_THRESHOLD,
|
||||
)
|
||||
return true
|
||||
|
|
@ -776,7 +779,7 @@ func _poll_virtual_mouse_controller_state() -> void:
|
|||
|
||||
func _poll_mapped_virtual_mouse_controller_state() -> void:
|
||||
var trigger_strength: float = _controller_mapping_manager.get_role_strength(
|
||||
ControllerMappingManagerType.ROLE_LT
|
||||
ControllerMappingManagerType.ROLE_POINTER_MODIFIER
|
||||
)
|
||||
if _virtual_mouse_active:
|
||||
_virtual_mouse_trigger_strength = trigger_strength
|
||||
|
|
@ -787,7 +790,7 @@ func _poll_mapped_virtual_mouse_controller_state() -> void:
|
|||
_set_virtual_mouse_button(
|
||||
MOUSE_BUTTON_RIGHT,
|
||||
_controller_mapping_manager.get_role_strength(
|
||||
ControllerMappingManagerType.ROLE_RT
|
||||
ControllerMappingManagerType.ROLE_CAMERA_ZOOM
|
||||
) >= VIRTUAL_MOUSE_TRIGGER_THRESHOLD,
|
||||
)
|
||||
return
|
||||
|
|
@ -1098,16 +1101,26 @@ func _controller_scroll_container_is_available(
|
|||
|
||||
|
||||
func _controller_menu_scroll_axis() -> float:
|
||||
if _controller_mapping_manager.has_custom_mapping():
|
||||
if _controller_mapping_manager != null:
|
||||
return _controller_mapping_manager.get_role_axis(
|
||||
ControllerMappingManagerType.ROLE_RIGHT_STICK_Y
|
||||
)
|
||||
return Input.get_joy_axis(
|
||||
_controller_mapping_manager.get_active_device_id(),
|
||||
0,
|
||||
JOY_AXIS_RIGHT_Y,
|
||||
)
|
||||
|
||||
|
||||
func _on_controller_connection_changed(
|
||||
device_id: int,
|
||||
connected: bool,
|
||||
) -> void:
|
||||
_virtual_mouse_trigger_rest_by_device.erase(device_id)
|
||||
_shared_trigger_rest_by_device.erase(device_id)
|
||||
if not connected and _virtual_mouse_device_id == device_id:
|
||||
_end_virtual_mouse()
|
||||
|
||||
|
||||
func close_player_menu() -> void:
|
||||
_player_menu.close_menu()
|
||||
|
||||
|
|
|
|||
|
|
@ -603,7 +603,6 @@ func _handle_controller_page_switch(event: InputEvent) -> bool:
|
|||
var button_event: InputEventJoypadButton = event as InputEventJoypadButton
|
||||
var use_mapping: bool = (
|
||||
_controller_mapping_manager != null
|
||||
and _controller_mapping_manager.has_custom_mapping()
|
||||
)
|
||||
var uses_left_bumper: bool = (
|
||||
_controller_mapping_manager.event_uses_role(
|
||||
|
|
|
|||
|
|
@ -51,10 +51,7 @@ func _process(delta: float) -> void:
|
|||
_controller_mapping_manager.get_role_axis(
|
||||
ControllerMappingManagerType.ROLE_RIGHT_STICK_X
|
||||
)
|
||||
if (
|
||||
_controller_mapping_manager != null
|
||||
and _controller_mapping_manager.has_custom_mapping()
|
||||
)
|
||||
if _controller_mapping_manager != null
|
||||
else Input.get_joy_axis(0, JOY_AXIS_RIGHT_X)
|
||||
)
|
||||
if absf(right_stick) > 0.2:
|
||||
|
|
|
|||
|
|
@ -134,10 +134,7 @@ func _update_selection() -> void:
|
|||
|
||||
|
||||
func _get_selection_stick() -> Vector2:
|
||||
if (
|
||||
_controller_mapping_manager != null
|
||||
and _controller_mapping_manager.has_custom_mapping()
|
||||
):
|
||||
if _controller_mapping_manager != null:
|
||||
return Vector2(
|
||||
_controller_mapping_manager.get_role_axis(
|
||||
ControllerMappingManagerType.ROLE_RIGHT_STICK_X
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue