diff options
author | tpart <tpart120@proton.me> | 2025-06-16 21:23:55 +0200 |
---|---|---|
committer | tpart <tpart120@proton.me> | 2025-06-16 21:24:00 +0200 |
commit | 06732a583a5dd1c4309d1eaecb31b58dcc618fca (patch) | |
tree | af0e8cb6d31c4f03c53dc677c93061a1b2e0fd96 /client | |
parent | d07c805a41a7c83480833dea336ef9b6c88d0e47 (diff) | |
download | hurrycurry-06732a583a5dd1c4309d1eaecb31b58dcc618fca.tar hurrycurry-06732a583a5dd1c4309d1eaecb31b58dcc618fca.tar.bz2 hurrycurry-06732a583a5dd1c4309d1eaecb31b58dcc618fca.tar.zst |
Fix on screen control setting not working; Add support for two-handed on screen buttons. Fixes #238
Diffstat (limited to 'client')
-rw-r--r-- | client/game.gd | 4 | ||||
-rw-r--r-- | client/global.gd | 3 | ||||
-rw-r--r-- | client/player/onscreen_controls/controls.gd | 44 | ||||
-rw-r--r-- | client/player/onscreen_controls/controls.tscn | 13 | ||||
-rw-r--r-- | client/player/player.gd | 2 | ||||
-rw-r--r-- | client/settings.gd | 6 |
6 files changed, 48 insertions, 24 deletions
diff --git a/client/game.gd b/client/game.gd index a5c3242c..d4e3d852 100644 --- a/client/game.gd +++ b/client/game.gd @@ -53,7 +53,6 @@ var tile_collide: Array = [] var tile_interact: Array = [] var maps: Array = [] var bot_algos: Array -var hand_count = 0 var text_message_history: Array[TextMessage] = [] var join_state: JoinState = JoinState.SPECTATING @@ -96,7 +95,8 @@ func handle_packet(p): tile_interact = p["data"]["tile_interact"] maps = p["data"]["maps"] bot_algos = p["data"]["bot_algos"] - hand_count = p["data"]["hand_count"] + Global.hand_count = p["data"]["hand_count"] + Global.hand_count_change.emit(Global.hand_count) tile_index_by_name.clear() for id in tile_names.size(): diff --git a/client/global.gd b/client/global.gd index f9682cbf..389bfd54 100644 --- a/client/global.gd +++ b/client/global.gd @@ -21,6 +21,8 @@ extends Node signal using_joypad_change(using: bool) signal using_touch_change(using: bool) +@warning_ignore("UNUSED_SIGNAL") +signal hand_count_change(count: bool) const VERSION := "2.3.1" @@ -56,6 +58,7 @@ var settings: Dictionary var settings_tree: GameSetting var game_paused := false +var hand_count := 0 var server_url = "" var error_message = "" diff --git a/client/player/onscreen_controls/controls.gd b/client/player/onscreen_controls/controls.gd index 06efb82e..df60d1fd 100644 --- a/client/player/onscreen_controls/controls.gd +++ b/client/player/onscreen_controls/controls.gd @@ -16,19 +16,25 @@ extends CanvasLayer @onready var boost = $Buttons/Boost -@onready var interact = $Buttons/Interact +@onready var interact_right = $Buttons/InteractR +@onready var interact_left = $Buttons/InteractL @onready var pause = $Buttons2/Pause @onready var modulate_color = $MovementStick.pressed_color var touch_enabled := false func _ready(): - apply_touch(Global.using_touch) - Global.using_touch_change.connect(apply_touch) + Settings.hook_changed_init("ui.touch_controls", false, apply_touch) + Global.using_touch_change.connect(func f(_x): apply_touch(Global.get_setting("ui.touch_controls"))) # throw away useless argument + Global.hand_count_change.connect(apply_hand_count) + apply_hand_count(Global.hand_count) -func apply_touch(touch): - visible = touch - touch_enabled = touch +func apply_touch(touch_controls: String): + touch_enabled = Global.using_touch or touch_controls == "enabled" and touch_controls != "disabled" + visible = touch_enabled + +func apply_hand_count(count: int): + interact_left.visible = count >= 2 func in_lobby_updated(in_lobby: bool): $Buttons.visible = not in_lobby @@ -41,13 +47,19 @@ func _on_boost_released(): Input.action_release("boost") boost.modulate = Color.WHITE -func _on_interact_pressed(): - Input.action_press("interact_left") - interact.modulate = modulate_color +func _on_interact_r_pressed(): + if Global.hand_count == 1: + Input.action_press("interact_left") + else: + Input.action_press("interact_right") + interact_right.modulate = modulate_color -func _on_interact_released(): - Input.action_release("interact_left") - interact.modulate = Color.WHITE +func _on_interact_r_released(): + if Global.hand_count == 1: + Input.action_release("interact_left") + else: + Input.action_release("interact_right") + interact_right.modulate = Color.WHITE func _on_pause_pressed(): Input.action_press("ui_menu") @@ -56,3 +68,11 @@ func _on_pause_pressed(): func _on_pause_released(): Input.action_release("ui_menu") pause.modulate = Color.WHITE + +func _on_interact_l_pressed() -> void: + Input.action_press("interact_left") + interact_left.modulate = modulate_color + +func _on_interact_l_released() -> void: + Input.action_release("interact_left") + interact_left.modulate = Color.WHITE diff --git a/client/player/onscreen_controls/controls.tscn b/client/player/onscreen_controls/controls.tscn index 2966f0d4..25dfdad9 100644 --- a/client/player/onscreen_controls/controls.tscn +++ b/client/player/onscreen_controls/controls.tscn @@ -31,7 +31,12 @@ position = Vector2(150, 25) scale = Vector2(0.5, 0.5) texture_normal = ExtResource("2_i4ife") -[node name="Interact" type="TouchScreenButton" parent="Buttons"] +[node name="InteractL" type="TouchScreenButton" parent="Buttons"] +position = Vector2(25, 150) +scale = Vector2(0.5, 0.5) +texture_normal = ExtResource("3_37rne") + +[node name="InteractR" type="TouchScreenButton" parent="Buttons"] position = Vector2(150, 150) scale = Vector2(0.5, 0.5) texture_normal = ExtResource("3_37rne") @@ -50,7 +55,9 @@ texture_normal = ExtResource("5_4bttq") [connection signal="pressed" from="Buttons/Boost" to="." method="_on_boost_pressed"] [connection signal="released" from="Buttons/Boost" to="." method="_on_boost_released"] -[connection signal="pressed" from="Buttons/Interact" to="." method="_on_interact_pressed"] -[connection signal="released" from="Buttons/Interact" to="." method="_on_interact_released"] +[connection signal="pressed" from="Buttons/InteractL" to="." method="_on_interact_l_pressed"] +[connection signal="released" from="Buttons/InteractL" to="." method="_on_interact_l_released"] +[connection signal="pressed" from="Buttons/InteractR" to="." method="_on_interact_r_pressed"] +[connection signal="released" from="Buttons/InteractR" to="." method="_on_interact_r_released"] [connection signal="pressed" from="Buttons2/Pause" to="." method="_on_pause_pressed"] [connection signal="released" from="Buttons2/Pause" to="." method="_on_pause_released"] diff --git a/client/player/player.gd b/client/player/player.gd index 5650c52e..cf8d3b78 100644 --- a/client/player/player.gd +++ b/client/player/player.gd @@ -68,7 +68,7 @@ func _init(_id: int, name_: String, pos: Vector2, character_style_: Dictionary, position_ = pos position_anim = pos - if game.hand_count == 1: + if Global.hand_count == 1: var center = Node3D.new() center.name = "HandBaseCenter" center.position = DEFAULT_HAND_BASE_POSITION_CENTER diff --git a/client/settings.gd b/client/settings.gd index 57568670..35bdf02d 100644 --- a/client/settings.gd +++ b/client/settings.gd @@ -144,12 +144,6 @@ static func h_volume_master(value: float): Sound.set_volume(0, value) static func h_volume_music(value: float): Sound.set_volume(1, value) static func h_volume_sfx(value: float): Sound.set_volume(2, value) -static func h_touch(mode: String): - match mode: - "enabled": Global.using_touch = true - "disabled": Global.using_touch = false - Global.using_touch_change.emit() - static func h_language(language: String): if language == "system": language = OS.get_locale_language() TranslationServer.set_locale(language) |