51 lines
1.1 KiB
GDScript
51 lines
1.1 KiB
GDScript
class_name Passage
|
|
extends Node2D
|
|
|
|
|
|
signal player_died
|
|
signal completed
|
|
|
|
|
|
@export var data : PassageData:
|
|
set = _set_data
|
|
|
|
|
|
var _current_progress := 0.0
|
|
|
|
|
|
@onready var enemy_swamp_controller : EnemySwampController = $EnemySwampController
|
|
@onready var enemy_timer : Timer = $EnemyTimer
|
|
@onready var progress_bar : TextureProgressBar = $ProgressBar
|
|
|
|
|
|
func _physics_process(delta: float) -> void:
|
|
_current_progress += delta
|
|
_update_progress_indicator()
|
|
if _current_progress >= data.length:
|
|
completed.emit()
|
|
|
|
|
|
func _set_data(new_data: PassageData) -> void:
|
|
data = new_data
|
|
if data and progress_bar:
|
|
_update_progress_indicator()
|
|
|
|
|
|
func _update_progress_indicator() -> void:
|
|
progress_bar.value = _current_progress
|
|
progress_bar.max_value = data.length
|
|
|
|
|
|
func _on_enemy_timer_timeout() -> void:
|
|
var enemies := get_tree().get_nodes_in_group("enemies")
|
|
if enemies.size() < 25:
|
|
enemy_swamp_controller.create_enemy()
|
|
|
|
var factor := maxi(enemies.size(), 1) * 0.5
|
|
|
|
enemy_timer.start(randf_range(1 * factor, 2 * factor))
|
|
|
|
|
|
func _on_player_ship_destroyed() -> void:
|
|
player_died.emit()
|