diff --git a/entities/items/item.gd b/entities/items/item.gd index 640a474..c82518a 100644 --- a/entities/items/item.gd +++ b/entities/items/item.gd @@ -2,6 +2,7 @@ extends Area2D @export var item_id : String = "engrenage" @export var item_name : String = "Engrenage" +@export var prompt_text : String = "[E] Take" func interact() -> void: GameState.add_item(item_id) diff --git a/entities/player/player.gd b/entities/player/player.gd index 4d05c5d..2eaf4eb 100644 --- a/entities/player/player.gd +++ b/entities/player/player.gd @@ -5,6 +5,8 @@ const SPEED := 120 @onready var sprite := $AnimatedSprite2D @onready var interaction_area := $InteractionArea +@onready var hud : HUD = get_tree().get_first_node_in_group("hud") + var last_direction := Vector2.DOWN var interactable : Node = null @@ -41,10 +43,14 @@ func _dir_name(dir: Vector2) -> String: # --- Interaction --- func _on_interaction_area_area_entered(area: Area2D) -> void: - print("Area détectée : ", area.name) + print("Area détectée : ", area.name, " | has interact: ", area.has_method("interact")) if area.has_method("interact"): interactable = area + if hud: + hud.show_prompt(area.prompt_text if "prompt_text" in area else "[E] Interagir") func _on_interaction_area_area_exited(area: Area2D) -> void: if area == interactable: interactable = null + if hud: + hud.hide_prompt() diff --git a/levels/repair_zone.gd b/levels/repair_zone.gd index 6effd07..06d9183 100644 --- a/levels/repair_zone.gd +++ b/levels/repair_zone.gd @@ -2,6 +2,7 @@ class_name RepairZone extends Area2D @export var npc_id : String = "vrac7" +@export var prompt_text : String = "[E] Repair" signal repair_requested(npc_id: String) diff --git a/ui/hud.gd b/ui/hud.gd index c691719..05a0757 100644 --- a/ui/hud.gd +++ b/ui/hud.gd @@ -1,16 +1,25 @@ +class_name HUD extends CanvasLayer -# Slots : dictionnaire item_id → Label du compteur @onready var slots := { "engrenage": $InventoryBar/ItemRow/EngrenageSlot/Count, "cable": $InventoryBar/ItemRow/CableSlot/Count, "circuit": $InventoryBar/ItemRow/CircuitSlot/Count, } +@onready var interact_prompt := $InteractPrompt +@onready var prompt_label := $InteractPrompt/PromptLabel func _ready() -> void: GameState.inventory_changed.connect(_refresh) _refresh() +func show_prompt(text: String) -> void: + prompt_label.text = text + interact_prompt.visible = true + +func hide_prompt() -> void: + interact_prompt.visible = false + func _refresh() -> void: for item_id in slots: var count : int = GameState.inventory.get(item_id, 0) diff --git a/ui/hud.tscn b/ui/hud.tscn index eb2bdfb..0ada65d 100644 --- a/ui/hud.tscn +++ b/ui/hud.tscn @@ -8,9 +8,12 @@ border_width_top = 1 border_color = Color(0.33333334, 0.33333334, 0.33333334, 1) border_blend = true +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_276te"] +bg_color = Color(0, 0, 0, 0.003921569) + [node name="Hud" type="Node2D" unique_id=1774402684] -[node name="HUD" type="CanvasLayer" parent="." unique_id=1046780358] +[node name="HUD" type="CanvasLayer" parent="." unique_id=1046780358 groups=["hud"]] script = ExtResource("1_rbyyf") [node name="InventoryBar" type="PanelContainer" parent="HUD" unique_id=255970268] @@ -36,7 +39,7 @@ layout_mode = 2 [node name="Count" type="Label" parent="HUD/InventoryBar/ItemRow/EngrenageSlot" unique_id=1082443403] layout_mode = 2 -theme_override_font_sizes/font_size = 8 +theme_override_font_sizes/font_size = 6 [node name="CableSlot" type="HBoxContainer" parent="HUD/InventoryBar/ItemRow" unique_id=1777823230] layout_mode = 2 @@ -46,7 +49,7 @@ layout_mode = 2 [node name="Count" type="Label" parent="HUD/InventoryBar/ItemRow/CableSlot" unique_id=241891402] layout_mode = 2 -theme_override_font_sizes/font_size = 8 +theme_override_font_sizes/font_size = 6 [node name="CircuitSlot" type="HBoxContainer" parent="HUD/InventoryBar/ItemRow" unique_id=707078098] layout_mode = 2 @@ -56,4 +59,28 @@ layout_mode = 2 [node name="Count" type="Label" parent="HUD/InventoryBar/ItemRow/CircuitSlot" unique_id=766125092] layout_mode = 2 -theme_override_font_sizes/font_size = 8 +theme_override_font_sizes/font_size = 6 + +[node name="InteractPrompt" type="PanelContainer" parent="HUD" unique_id=1666962404] +visible = false +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -20.0 +offset_top = -20.0 +offset_right = 10.0 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_styles/panel = SubResource("StyleBoxFlat_276te") + +[node name="PromptLabel" type="Label" parent="HUD/InteractPrompt" unique_id=1518438846] +layout_mode = 2 +theme_override_colors/font_shadow_color = Color(0, 0, 0, 0.39215687) +theme_override_constants/shadow_offset_x = 0 +theme_override_constants/shadow_offset_y = 0 +theme_override_constants/shadow_outline_size = 2 +theme_override_font_sizes/font_size = 6 +horizontal_alignment = 1 +vertical_alignment = 1