@tool 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 func _ready(): queue_redraw() func _on_area_2d_mouse_entered(): hover_dot.show() 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() get_viewport().set_input_as_handled() func _draw(): if not is_shown_on_map: return for p in connected_map_points: 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()