Add spaceship exit component, enemy wave trigger, and update various scene properties
This commit is contained in:
37
scripts/components/enemy_wave_trigger.gd
Normal file
37
scripts/components/enemy_wave_trigger.gd
Normal file
@@ -0,0 +1,37 @@
|
||||
class_name EnemyWaveTrigger
|
||||
extends Node
|
||||
|
||||
@export var area2d: Area2D
|
||||
@export var path_follow_node: PathFollow2D
|
||||
@export var speed: float = 100.0
|
||||
@export var loop: bool = false
|
||||
@export var activate_on_enter: bool = true
|
||||
|
||||
var active: bool = false
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
area2d.body_entered.connect(_on_body_entered)
|
||||
if path_follow_node:
|
||||
path_follow_node.progress = 0
|
||||
path_follow_node.set_process(false)
|
||||
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
if not active or not path_follow_node:
|
||||
return
|
||||
path_follow_node.progress += speed * delta
|
||||
if path_follow_node.progress_ratio >= 1.0 and not loop:
|
||||
active = false
|
||||
path_follow_node.set_process(false)
|
||||
|
||||
|
||||
func _on_body_entered(body: Node2D) -> void:
|
||||
if activate_on_enter:
|
||||
start_wave()
|
||||
|
||||
|
||||
func start_wave() -> void:
|
||||
if path_follow_node:
|
||||
path_follow_node.set_process(true)
|
||||
active = true
|
@@ -8,6 +8,7 @@ extends Node
|
||||
@export var root: Node2D
|
||||
@export var bullet_spawn_right: Node2D
|
||||
@export var bullet_spawn_left: Node2D
|
||||
@export var shooting_interval_variation: float = 0.0
|
||||
|
||||
var timer: Timer
|
||||
|
||||
@@ -43,9 +44,16 @@ func on_timer_timeout() -> void:
|
||||
timer.start()
|
||||
|
||||
|
||||
|
||||
func get_shoot_interval() -> float:
|
||||
if shooting_interval_variation > 0.0:
|
||||
return shoot_interval + randf_range(-shooting_interval_variation, shooting_interval_variation)
|
||||
return shoot_interval
|
||||
|
||||
|
||||
func setup_timer() -> void:
|
||||
timer = Timer.new()
|
||||
timer.wait_time = shoot_interval
|
||||
timer.wait_time = get_shoot_interval()
|
||||
timer.one_shot = false
|
||||
timer.autostart = true
|
||||
timer.timeout.connect(on_timer_timeout)
|
||||
|
21
scripts/components/spaceship_exit_component.gd
Normal file
21
scripts/components/spaceship_exit_component.gd
Normal file
@@ -0,0 +1,21 @@
|
||||
class_name SpaceshipExitComponent
|
||||
extends Node
|
||||
|
||||
@export var area2d: Area2D
|
||||
signal spaceship_exited
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
if not area2d:
|
||||
printerr("SpaceshipExitComponent: area2d is not set.")
|
||||
return
|
||||
|
||||
area2d.body_entered.connect(_on_area2d_body_entered)
|
||||
|
||||
|
||||
func _on_area2d_body_entered(body: Node2D) -> void:
|
||||
if not body is PlayerController:
|
||||
printerr("SpaceshipExitComponent: body is not a PlayerController.")
|
||||
return
|
||||
print("SpaceshipExitComponent: PlayerController exited spaceship.")
|
||||
spaceship_exited.emit()
|
1
scripts/components/spaceship_exit_component.gd.uid
Normal file
1
scripts/components/spaceship_exit_component.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://ybmwls7hv8j3
|
Reference in New Issue
Block a user