clean up and comment eel.gd
This commit is contained in:
parent
99a9595413
commit
ef41940949
1 changed files with 27 additions and 21 deletions
|
@ -1,61 +1,67 @@
|
||||||
extends "res://objects/enemy/enemy.gd"
|
extends "res://objects/enemy/enemy.gd"
|
||||||
|
|
||||||
|
# distance between segments
|
||||||
const SEGMENT_LENGTH: float = 4.0
|
const SEGMENT_LENGTH: float = 4.0
|
||||||
const SEGMENT_OFFSET: float = 8.0
|
|
||||||
|
|
||||||
|
|
||||||
|
# number of segments
|
||||||
export var segments: int = 8
|
export var segments: int = 8
|
||||||
|
# speed eel travels
|
||||||
export var speed: float = 32.0
|
export var speed: float = 32.0
|
||||||
export var wave_length: float = 8.0
|
|
||||||
export var wave_amplitude: float = 4.0
|
|
||||||
|
|
||||||
|
|
||||||
var _segments: Array
|
var _segments: Array
|
||||||
|
|
||||||
|
|
||||||
onready var head: PathFollow2D = $Head
|
onready var head: PathFollow2D = $Head
|
||||||
onready var tail: PathFollow2D = $Tail
|
onready var tail: PathFollow2D = $Tail
|
||||||
|
|
||||||
|
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
|
# get nodes
|
||||||
var first_segment: PathFollow2D = $Segment
|
var first_segment: PathFollow2D = $Segment
|
||||||
var first_segment_shape: CollisionShape2D = $"%SegmentShape"
|
var first_segment_shape: CollisionShape2D = $"%SegmentShape"
|
||||||
|
# initialize segments array
|
||||||
_segments = []
|
_segments = []
|
||||||
_segments.resize(segments)
|
_segments.resize(segments)
|
||||||
|
# loop for number of segments needed
|
||||||
for i in segments:
|
for i in segments:
|
||||||
|
# create and add new segment instance
|
||||||
var new_segment = first_segment.duplicate()
|
var new_segment = first_segment.duplicate()
|
||||||
add_child(new_segment)
|
add_child(new_segment)
|
||||||
_segments[i] = new_segment
|
_segments[i] = new_segment
|
||||||
|
# add new shape to hitbox
|
||||||
var new_segment_shape = first_segment_shape.duplicate()
|
var new_segment_shape = first_segment_shape.duplicate()
|
||||||
$Hitbox.add_child(new_segment_shape)
|
$Hitbox.add_child(new_segment_shape)
|
||||||
|
# link segment's remote transform to its collision shape
|
||||||
var new_shape_transform = new_segment.get_node("ShapeTransform")
|
var new_shape_transform = new_segment.get_node("ShapeTransform")
|
||||||
new_shape_transform.remote_path = new_shape_transform.get_path_to(new_segment_shape)
|
new_shape_transform.remote_path = new_shape_transform.get_path_to(new_segment_shape)
|
||||||
|
# free template segment
|
||||||
first_segment.queue_free()
|
first_segment.queue_free()
|
||||||
first_segment_shape.queue_free()
|
first_segment_shape.queue_free()
|
||||||
|
|
||||||
func _physics_process(delta: float) -> void:
|
func _physics_process(delta: float) -> void:
|
||||||
|
# move along path
|
||||||
head.offset += speed * delta
|
head.offset += speed * delta
|
||||||
|
# position segments accordingly
|
||||||
_offset_segments()
|
_offset_segments()
|
||||||
# _wave_segments()
|
|
||||||
|
|
||||||
func _offset_segments() -> void:
|
func _offset_segments() -> void:
|
||||||
|
# put tail at end
|
||||||
tail.offset = head.offset - SEGMENT_LENGTH * float(segments + 1)
|
tail.offset = head.offset - SEGMENT_LENGTH * float(segments + 1)
|
||||||
|
# loop through segments
|
||||||
for i in _segments.size():
|
for i in _segments.size():
|
||||||
|
# set segment position based on index and length
|
||||||
_segments[i].offset = head.offset - SEGMENT_LENGTH * float(i + 1)
|
_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:
|
func die() -> void:
|
||||||
|
# instance death particles for every segment
|
||||||
for segment in _segments:
|
for segment in _segments:
|
||||||
if segment is Node2D:
|
# instance particles for this segment
|
||||||
var death_particles = DeathParticles.instance()
|
var death_particles = DeathParticles.instance()
|
||||||
death_particles.global_position = segment.global_position
|
# 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
|
death_particles.emitting = true
|
||||||
|
# detach from self
|
||||||
get_parent().add_child(death_particles)
|
get_parent().add_child(death_particles)
|
||||||
.die()
|
.die()
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue