Files
Station-0/scripts/enemies/drifter.gd
T

42 lines
1.4 KiB
GDScript

extends EnemyBase
# ---------------------------------------------------------------------------
# DRIFTER — Locomotion corruption
# Moves in slow arcs and wide curves. Never charges straight. Contact only.
# ---------------------------------------------------------------------------
var _wobble_time: float = 0.0
var _wobble_phase: float = 0.0 # random start so groups don't sync
func _ready() -> void:
max_health = 24.0
current_health = 24.0
speed = 100.0
contact_damage = 1.0
super._ready()
_wobble_phase = randf() * TAU
func _physics_process(delta: float) -> void:
_tick_spawn_delay(delta)
_find_player()
_tick_contact(delta)
_tick_flash(delta)
_tick_slow(delta)
if not is_active():
return
_do_arc_chase(delta)
velocity *= _slow_factor
move_and_slide()
# ---------------------------------------------------------------------------
# Arcing movement — sinusoidal perpendicular drift applied to toward-player dir
# ---------------------------------------------------------------------------
func _do_arc_chase(delta: float) -> void:
if _player == null:
velocity = Vector2.ZERO
return
var toward := (_player.global_position - global_position).normalized()
var perp := toward.rotated(PI * 0.5)
_wobble_time += delta
var wobble := sin(_wobble_time * 1.8 + _wobble_phase) * 0.75
velocity = (toward + perp * wobble).normalized() * speed