diff --git a/objects/enemy/eel.gd b/objects/enemy/eel.gd index 30f00e8..5e8f8da 100644 --- a/objects/enemy/eel.gd +++ b/objects/enemy/eel.gd @@ -1,61 +1,67 @@ extends "res://objects/enemy/enemy.gd" - +# distance between segments const SEGMENT_LENGTH: float = 4.0 -const SEGMENT_OFFSET: float = 8.0 - +# number of segments export var segments: int = 8 +# speed eel travels 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: + # get nodes var first_segment: PathFollow2D = $Segment var first_segment_shape: CollisionShape2D = $"%SegmentShape" - + # initialize segments array _segments = [] _segments.resize(segments) + # loop for number of segments needed for i in segments: + # create and add new segment instance var new_segment = first_segment.duplicate() add_child(new_segment) _segments[i] = new_segment + # add new shape to hitbox var new_segment_shape = first_segment_shape.duplicate() $Hitbox.add_child(new_segment_shape) + # link segment's remote transform to its collision shape var new_shape_transform = new_segment.get_node("ShapeTransform") new_shape_transform.remote_path = new_shape_transform.get_path_to(new_segment_shape) - + # free template segment first_segment.queue_free() first_segment_shape.queue_free() func _physics_process(delta: float) -> void: + # move along path head.offset += speed * delta + # position segments accordingly _offset_segments() -# _wave_segments() func _offset_segments() -> void: + # put tail at end tail.offset = head.offset - SEGMENT_LENGTH * float(segments + 1) + # loop through segments for i in _segments.size(): + # set segment position based on index and length _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: + # instance death particles for every segment 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) + # instance particles for this segment + var death_particles = DeathParticles.instance() + # TODO: something is wrong here, particles to not show up in correct position + death_particles.global_transform = segment.global_transform + # tone them down a little per-segment + death_particles.amount /= 4 + death_particles.initial_velocity /= 2.0 + # emit + death_particles.emitting = true + # detach from self + get_parent().add_child(death_particles) .die()