necra-prototypes/map_point.gd
Antonio Dell'Annunziata 2200085897
All checks were successful
/ test (push) Successful in 2s
Make map points reveal on click
2025-03-11 20:29:15 +01:00

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()