From 2200085897b9c5c3da851260ef5edad25a7818c1 Mon Sep 17 00:00:00 2001 From: Antonio Dell'Annunziata Date: Tue, 11 Mar 2025 20:29:15 +0100 Subject: [PATCH] Make map points reveal on click --- map_point.gd | 30 +++++++++++++++++++++++++++++- map_point.tscn | 1 + prototype_map.gd | 18 ++++++++++++++++++ prototype_map.tscn | 9 +++++++++ 4 files changed, 57 insertions(+), 1 deletion(-) diff --git a/map_point.gd b/map_point.gd index 0acbc8f..6d03ec4 100644 --- a/map_point.gd +++ b/map_point.gd @@ -3,11 +3,24 @@ class_name MapPoint extends Node2D +signal clicked + + @export_tool_button("Update lines", "Callable") var update_lines = queue_redraw @export var connected_map_points: Array[MapPoint] = []: set(new_value): + for p in connected_map_points: + p.draw.disconnect(queue_redraw) + p.hidden.disconnect(queue_redraw) connected_map_points = new_value + for p in connected_map_points: + p.draw.connect(queue_redraw) + p.hidden.connect(queue_redraw) queue_redraw() +@export var is_shown_on_map: bool = false: + set(new_value): + is_shown_on_map = new_value + _set_point_shown_on_map.call_deferred() @onready var hover_dot: Sprite2D = $HoverDot @@ -21,6 +34,21 @@ func _on_area_2d_mouse_entered(): func _on_area_2d_mouse_exited(): hover_dot.hide() +func _on_area_2d_input_event(viewport, event, shape_idx): + if event is InputEventMouseButton and event.pressed: + clicked.emit() + func _draw(): + if not is_shown_on_map: return + for p in connected_map_points: - draw_dashed_line(Vector2.ZERO, to_local(p.global_position), Color.BLACK) + if p.is_shown_on_map: + draw_dashed_line(Vector2.ZERO, to_local(p.global_position), Color.BLACK) + +func _set_point_shown_on_map(): + visible = is_shown_on_map + if not $Area2D: return + $Area2D.monitorable = is_shown_on_map + $Area2D.monitoring = is_shown_on_map + $Area2D.input_pickable = is_shown_on_map + queue_redraw() diff --git a/map_point.tscn b/map_point.tscn index 33183d9..044b440 100644 --- a/map_point.tscn +++ b/map_point.tscn @@ -44,5 +44,6 @@ collision_mask = 1024 [node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D"] shape = SubResource("CircleShape2D_01fxh") +[connection signal="input_event" from="Area2D" to="." method="_on_area_2d_input_event"] [connection signal="mouse_entered" from="Area2D" to="." method="_on_area_2d_mouse_entered"] [connection signal="mouse_exited" from="Area2D" to="." method="_on_area_2d_mouse_exited"] diff --git a/prototype_map.gd b/prototype_map.gd index e251cf8..484f617 100644 --- a/prototype_map.gd +++ b/prototype_map.gd @@ -1 +1,19 @@ extends Node2D + + +func _on_map_point_clicked(): + if not $MapPoint2.is_shown_on_map: + $MapPoint2.is_shown_on_map = true + +func _on_map_point_2_clicked(): + if not $MapPoint3.is_shown_on_map: + $MapPoint3.is_shown_on_map = true + elif not $MapPoint4.is_shown_on_map: + $MapPoint4.is_shown_on_map = true + +func _on_map_point_3_clicked(): + pass # Replace with function body. + + +func _on_map_point_4_clicked(): + pass # Replace with function body. diff --git a/prototype_map.tscn b/prototype_map.tscn index 3ff0e55..8cd3e97 100644 --- a/prototype_map.tscn +++ b/prototype_map.tscn @@ -24,13 +24,22 @@ texture = SubResource("GradientTexture2D_fjiih") [node name="MapPoint" parent="." node_paths=PackedStringArray("connected_map_points") instance=ExtResource("2_mj08v")] position = Vector2(199, 332) connected_map_points = [NodePath("../MapPoint2")] +is_shown_on_map = true [node name="MapPoint2" parent="." node_paths=PackedStringArray("connected_map_points") instance=ExtResource("2_mj08v")] +visible = false position = Vector2(256, 299) connected_map_points = [NodePath("../MapPoint3"), NodePath("../MapPoint4")] [node name="MapPoint3" parent="." instance=ExtResource("2_mj08v")] +visible = false position = Vector2(315, 278) [node name="MapPoint4" parent="." instance=ExtResource("2_mj08v")] +visible = false position = Vector2(320, 330) + +[connection signal="clicked" from="MapPoint" to="." method="_on_map_point_clicked"] +[connection signal="clicked" from="MapPoint2" to="." method="_on_map_point_2_clicked"] +[connection signal="clicked" from="MapPoint3" to="." method="_on_map_point_3_clicked"] +[connection signal="clicked" from="MapPoint4" to="." method="_on_map_point_4_clicked"]