From 1da7f4909000f456a1ac84a3285f19f6e071390f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20Qui=C3=B1ones?= Date: Thu, 2 Apr 2026 10:44:36 -0300 Subject: [PATCH 1/3] InputHud: Allow custom built player Consider that a player is no more than a CharacterBody2D, that is the first node in group "player". An thus may or may not have features like PlayerInteraction, PlayerRepel, or PlayerHook. This fixes the gym_area_test scene, which has a custom built player. --- .../input_hints/components/input_hud.gd | 29 ++++++++++++++----- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/scenes/ui_elements/input_hints/components/input_hud.gd b/scenes/ui_elements/input_hints/components/input_hud.gd index b96481ba3..cab111125 100644 --- a/scenes/ui_elements/input_hints/components/input_hud.gd +++ b/scenes/ui_elements/input_hints/components/input_hud.gd @@ -2,7 +2,11 @@ # SPDX-License-Identifier: MPL-2.0 extends CanvasLayer -var player: Player +var player: CharacterBody2D +var player_interaction: PlayerInteraction +var player_repel: PlayerRepel +var player_hook: PlayerHook + var sokoban_ruleset: RuleEngine @onready var normal_controls := %NormalControls @@ -39,9 +43,18 @@ func _on_scene_changed() -> void: if player: normal_controls.visible = true - player.player_interaction.can_interact_changed.connect(_update_player_state) - player.player_repel.visibility_changed.connect(_update_player_state) - player.player_hook.visibility_changed.connect(_update_player_state) + if "player_interaction" in player: + player_interaction = player.player_interaction as PlayerInteraction + if player_interaction: + player_interaction.can_interact_changed.connect(_update_player_state) + + if "player_repel" in player: + player_repel = player.player_repel as PlayerRepel + player_repel.visibility_changed.connect(_update_player_state) + + if "player_hook" in player: + player_hook = player.player_hook as PlayerHook + player_hook.visibility_changed.connect(_update_player_state) _update_player_state() elif sokoban_ruleset: @@ -61,12 +74,12 @@ func _notification(what: int) -> void: func _update_player_state() -> void: - interact_input_hint.visible = player.player_interaction.can_interact() + interact_input_hint.visible = player_interaction and player_interaction.can_interact() - repel_input_hint.visible = player.player_repel.visible + repel_input_hint.visible = player_repel and player_repel.visible - throw_input_hint.visible = player.player_hook.visible - aim_input_hint.visible = player.player_hook.visible + throw_input_hint.visible = player_hook and player_hook.visible + aim_input_hint.visible = player_hook and player_hook.visible func _display_skip() -> void: From 5481bb52c5d00c137704a4d26e3875a85ae33474 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20Qui=C3=B1ones?= Date: Thu, 2 Apr 2026 10:53:47 -0300 Subject: [PATCH 2/3] fixup! InputHud: Allow custom built player --- scenes/ui_elements/input_hints/components/input_hud.gd | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/scenes/ui_elements/input_hints/components/input_hud.gd b/scenes/ui_elements/input_hints/components/input_hud.gd index cab111125..020776bda 100644 --- a/scenes/ui_elements/input_hints/components/input_hud.gd +++ b/scenes/ui_elements/input_hints/components/input_hud.gd @@ -50,11 +50,13 @@ func _on_scene_changed() -> void: if "player_repel" in player: player_repel = player.player_repel as PlayerRepel - player_repel.visibility_changed.connect(_update_player_state) + if player_repel: + player_repel.visibility_changed.connect(_update_player_state) if "player_hook" in player: player_hook = player.player_hook as PlayerHook - player_hook.visibility_changed.connect(_update_player_state) + if player_hook: + player_hook.visibility_changed.connect(_update_player_state) _update_player_state() elif sokoban_ruleset: From 5af79015d2c5fd4696ed7e0d1ef84e3ca72791be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20Qui=C3=B1ones?= Date: Thu, 2 Apr 2026 11:26:23 -0300 Subject: [PATCH 3/3] fixup! InputHud: Allow custom built player --- .../input_hints/components/input_hud.gd | 25 ++++++++----------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/scenes/ui_elements/input_hints/components/input_hud.gd b/scenes/ui_elements/input_hints/components/input_hud.gd index 020776bda..203f648af 100644 --- a/scenes/ui_elements/input_hints/components/input_hud.gd +++ b/scenes/ui_elements/input_hints/components/input_hud.gd @@ -43,20 +43,17 @@ func _on_scene_changed() -> void: if player: normal_controls.visible = true - if "player_interaction" in player: - player_interaction = player.player_interaction as PlayerInteraction - if player_interaction: - player_interaction.can_interact_changed.connect(_update_player_state) - - if "player_repel" in player: - player_repel = player.player_repel as PlayerRepel - if player_repel: - player_repel.visibility_changed.connect(_update_player_state) - - if "player_hook" in player: - player_hook = player.player_hook as PlayerHook - if player_hook: - player_hook.visibility_changed.connect(_update_player_state) + player_interaction = player.get("player_interaction") as PlayerInteraction + if player_interaction: + player_interaction.can_interact_changed.connect(_update_player_state) + + player_repel = player.get("player_repel") as PlayerRepel + if player_repel: + player_repel.visibility_changed.connect(_update_player_state) + + player_hook = player.get("player_hook") as PlayerHook + if player_hook: + player_hook.visibility_changed.connect(_update_player_state) _update_player_state() elif sokoban_ruleset: