Files
mmcghen e11eddf1b4 Fix critical bugs from code review
- room.gd: Add signal tracking and explicit cleanup in _exit_tree
- room.gd: Guard _on_enemy_died against race condition after room freed
- player.gd: Set _shield_ready = false on shield activation
- player.gd: Fix coolant zone lambda syntax error
- player.gd: Add apply_knockback() method for Hivemind pulse
- player.gd: Fix coolant zone memory leak (use Timer child)
- hud.gd: Remove deprecated boss bar code
2026-03-11 09:47:37 -04:00

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 *= get_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