54 lines
1.3 KiB
GDScript
54 lines
1.3 KiB
GDScript
@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()
|
|
|
|
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()
|