Improve Android controller and chat support

This commit is contained in:
Alexander Sellite 2026-08-03 20:49:19 -04:00
parent 3dc8ced5d2
commit ceef03eba5
24 changed files with 2485 additions and 128 deletions

View file

@ -16,6 +16,9 @@ const PlayerSettingsManagerType = preload(
"res://settings/player_settings_manager.gd"
)
const PlayerSettingsType = preload("res://settings/player_settings.gd")
const ControllerMappingManagerType = preload(
"res://settings/controller_mapping_manager.gd"
)
const TitleScreenType = preload("res://ui/title_screen.gd")
const PauseMenuType = preload("res://ui/pause_menu.gd")
const ItemCatalogType = preload("res://items/item_catalog.gd")
@ -111,6 +114,9 @@ const SHOP_PATTERN_SCALE: float = 1.75
@onready var _water_recovery: WaterRecoveryControllerType = %WaterRecovery
@onready var _save_manager: PlayerSaveManagerType = %PlayerSaveManager
@onready var _settings_manager: PlayerSettingsManagerType = %PlayerSettingsManager
@onready var _controller_mapping_manager: ControllerMappingManagerType = (
%ControllerMappingManager
)
@onready var _interface_fonts: InterfaceFontController = %InterfaceFontController
@onready var _title_music: AudioStreamPlayer = %TitleMusic
@onready var _ui_pixelation: UIPixelationPresenterType = %UIPresentation
@ -534,6 +540,7 @@ func _initialize_after_data_root() -> void:
_network_session,
_interface_fonts,
)
_game_ui.setup_controller_mapping(_controller_mapping_manager)
_data_root.conflict_detected.connect(_on_portable_conflict)
_data_root.status_changed.connect(_on_data_root_status)
if (
@ -927,6 +934,8 @@ func _on_peer_identity_observed(_peer_id: int, status: String) -> void:
func _input(event: InputEvent) -> void:
if _game_ui.is_controller_mapping_capturing():
return
if (
not (
event.is_action_pressed("ui_cancel")
@ -935,6 +944,7 @@ func _input(event: InputEvent) -> void:
or (event is InputEventKey and event.echo)
):
return
var pause_open_requested: bool = _is_pause_open_request(event)
var title_screen: TitleScreenType = _game_ui.get_title_screen()
if title_screen.visible or not _gameplay_started:
return
@ -953,7 +963,8 @@ func _input(event: InputEvent) -> void:
get_viewport().set_input_as_handled()
return
if (
not _water_recovery.is_recovery_active()
pause_open_requested
and not _water_recovery.is_recovery_active()
and _fishing_spot.can_open_system_menu()
):
_game_ui.close_player_menu_for_game_menu()
@ -961,6 +972,13 @@ func _input(event: InputEvent) -> void:
get_viewport().set_input_as_handled()
func _is_pause_open_request(event: InputEvent) -> bool:
return (
event.is_action_pressed("open_system_menu")
or event is InputEventKey
)
func _unhandled_input(event: InputEvent) -> void:
if (
not _gameplay_started
@ -1002,6 +1020,7 @@ func _apply_runtime_settings(settings: PlayerSettingsType) -> void:
_game_ui.set_edge_docks(
settings.chat_dock_right,
settings.paint_dock_right,
settings.chat_mobile_mode,
)

View file

@ -55,6 +55,7 @@
[ext_resource type="Script" path="res://network/network_job_service.gd" id="53_network_jobs"]
[ext_resource type="Script" path="res://world/shoreline_ambience.gd" id="54_shoreline_ambience"]
[ext_resource type="AudioStream" path="res://audio/ambience/waves.wav" id="55_waves"]
[ext_resource type="Script" path="res://settings/controller_mapping_manager.gd" id="56_controller_mapping"]
[sub_resource type="ShaderMaterial" id="ShaderMaterial_title_water_native"]
shader = ExtResource("40_title_water")
@ -273,6 +274,10 @@ script = ExtResource("9_save")
unique_name_in_owner = true
script = ExtResource("10_settings")
[node name="ControllerMappingManager" type="Node" parent="."]
unique_name_in_owner = true
script = ExtResource("56_controller_mapping")
[node name="TitleMusic" type="AudioStreamPlayer" parent="." unique_id=1292939956]
unique_name_in_owner = true
stream = ExtResource("13_title_music")