extends "res://objects/enemy/enemy.gd" const SEGMENT_LENGTH: float = 4.0 const SEGMENT_OFFSET: float = 8.0 export var segments: int = 8 export var speed: float = 32.0 export var wave_length: float = 8.0 export var wave_amplitude: float = 4.0 var _segments: Array onready var head: PathFollow2D = $Head onready var tail: PathFollow2D = $Tail func _ready() -> void: var first_segment: PathFollow2D = $Segment var first_segment_shape: CollisionShape2D = $"%SegmentShape" _segments = [] _segments.resize(segments) for i in segments: var new_segment = first_segment.duplicate() add_child(new_segment) _segments[i] = new_segment var new_segment_shape = first_segment_shape.duplicate() $Hitbox.add_child(new_segment_shape) var new_shape_transform = new_segment.get_node("ShapeTransform") new_shape_transform.remote_path = new_shape_transform.get_path_to(new_segment_shape) first_segment.queue_free() first_segment_shape.queue_free() func _physics_process(delta: float) -> void: head.offset += speed * delta _offset_segments() # _wave_segments() func _offset_segments() -> void: tail.offset = head.offset - SEGMENT_LENGTH * float(segments + 1) for i in _segments.size(): _segments[i].offset = head.offset - SEGMENT_LENGTH * float(i + 1) func _wave_segments() -> void: for segment in get_children(): if segment is PathFollow2D: segment.v_offset = sin(segment.offset / wave_length) * wave_amplitude func die() -> void: for segment in _segments: if segment is Node2D: var death_particles = DeathParticles.instance() death_particles.global_position = segment.global_position death_particles.emitting = true get_parent().add_child(death_particles) .die()