@tool class_name BallSnake extends Node2D @export var texture: Texture2D @export var target: Node2D @export var segments: int = 1 @export var head_segment: bool = true @export var tail_segment: bool = true @export var auto_density: bool = false: set(value): auto_density = value if auto_density: pixels_per_segment = pixels_per_segment @export_range(1,2,1,"or_greater") var pixels_per_segment: float = 1.0: set(value): pixels_per_segment = value if auto_density and target: segments = int(global_position.distance_to(target.global_position) / pixels_per_segment) - 1 func _process(delta: float) -> void: if auto_density: pixels_per_segment = pixels_per_segment queue_redraw() func _draw() -> void: if not target: return if tail_segment: draw_texture(texture, -texture.get_size() * 0.5) var end_pos = to_local(target.global_position) for i in segments: var weight = 1.0 / float(segments + 1) * float(i + 1) draw_texture( texture, lerp(Vector2.ZERO, end_pos, weight) - texture.get_size() * 0.5 ) if head_segment: draw_texture(texture, end_pos - texture.get_size() * 0.5)