Fixes Relay and Practice room and implements Hivemind boss

This commit is contained in:
2026-03-09 11:37:06 -04:00
parent b7715172c2
commit 171a40a4a8
5 changed files with 643 additions and 27 deletions
+27 -26
View File
@@ -50,9 +50,8 @@ var _visual : Node2D
var _contact_area : Area2D
var _teleport_timer : float = 3.0 # initial delay before first teleport
var _in_transit : bool = false
var _transit_timer : float = 0.0
var _fade_out : bool = false
var _fade_timer : float = 0.0
var _teleport_count : int = 0
var _next_drifter_threshold : int = 0
@@ -94,35 +93,37 @@ func _physics_process(delta: float) -> void:
move_and_slide()
# ---------------------------------------------------------------------------
# Teleport cycle
# Teleport cycle (fully timer-based, no tween callbacks)
# ---------------------------------------------------------------------------
enum TeleportState { IDLE, FADING_OUT, IN_TRANSIT }
var _tp_state: int = TeleportState.IDLE
func _tick_teleport(delta: float) -> void:
if _in_transit:
_transit_timer -= delta
if _transit_timer <= 0.0:
_reappear()
return
match _tp_state:
TeleportState.IDLE:
_teleport_timer -= delta
if _teleport_timer <= 0.0:
_start_fade_out()
TeleportState.FADING_OUT:
_fade_timer -= delta
_visual.modulate.a = _fade_timer / FADE_OUT_TIME
if _fade_timer <= 0.0:
_enter_transit()
TeleportState.IN_TRANSIT:
_transit_timer -= delta
if _transit_timer <= 0.0:
_reappear()
_teleport_timer -= delta
if _teleport_timer <= 0.0:
_start_teleport()
func _start_fade_out() -> void:
_tp_state = TeleportState.FADING_OUT
_fade_timer = FADE_OUT_TIME
func _start_teleport() -> void:
_in_transit = true
_fade_out = true
# Quick fade out
var tw := create_tween()
tw.tween_property(_visual, "modulate:a", 0.0, FADE_OUT_TIME)
tw.finished.connect(_on_fade_finished)
func _on_fade_finished() -> void:
if not _fade_out:
return
_fade_out = false
func _enter_transit() -> void:
_tp_state = TeleportState.IN_TRANSIT
_contact_area.monitoring = false
_contact_area.monitorable = false
_visual.visible = false
_visual.modulate.a = 0.0
_transit_timer = TRANSIT_TIME
func _reappear() -> void:
@@ -147,7 +148,7 @@ func _reappear() -> void:
var base_color := Color(0.3, 0.8, 1.0) if _phase == Phase.TWO else Color(1, 1, 1, 1)
tw.tween_property(_visual, "modulate", base_color, 0.15)
_in_transit = false
_tp_state = TeleportState.IDLE
_teleport_count += 1
# Fire burst
@@ -255,7 +256,7 @@ func _spawn_drifters() -> void:
# Damage / Phase
# ---------------------------------------------------------------------------
func take_damage(amount: float) -> void:
if _in_transit or _phase == Phase.CLIMAX:
if _tp_state != TeleportState.IDLE or _phase == Phase.CLIMAX:
return
current_health -= amount