extends Path2D signal completed var is_mouse_in_path_follow_area: bool = false var is_incantation_started: bool = false var incantation_progress: float = 0.0 var is_incantation_completed: bool = false @onready var area: Area2D = $Area2D @onready var incantation_text: IncantationText = $IncantationText func _ready(): area.mouse_entered.connect(func(): is_mouse_in_path_follow_area = true) area.mouse_exited.connect(func(): is_mouse_in_path_follow_area = false reset_incantation() ) func _draw(): # Draws debug line accross the path in game #var points = curve.get_baked_points() #for i in points.size(): # if i == 0: continue # draw_line(points[i-1], points[i], Color.BLACK, 2.0) pass var previous_offset: float: set(new_value): previous_offset = new_value incantation_text.colored_offset = previous_offset func _unhandled_input(event): if is_incantation_completed: return if event is InputEventMouseButton: if event.is_pressed() and is_mouse_in_path_follow_area and not is_incantation_started: is_incantation_started = true if event is InputEventMouseMotion and is_incantation_started: var motion_event = event as InputEventMouseMotion var next_point = curve.get_closest_point(to_local(motion_event.global_position)) var next_offset = curve.get_closest_offset(next_point) if previous_offset <= 0.0: previous_offset = next_offset elif next_offset - previous_offset <= 0: return previous_offset = next_offset area.position = next_point if next_point == curve.get_point_position(curve.point_count - 1): completed.emit() is_incantation_completed = true func reset_incantation(): if is_incantation_completed: return is_incantation_started = false area.position = curve.get_point_position(0) previous_offset = 0.0