37 lines
1012 B
GDScript
37 lines
1012 B
GDScript
extends Node
|
|
|
|
@export var enemy_scene: PackedScene
|
|
@export var min_spawn_time: float = 1.0
|
|
@export var max_spawn_time: float = 7.0
|
|
|
|
func _ready():
|
|
start_spawn_timer()
|
|
|
|
func start_spawn_timer():
|
|
var time = randf_range(min_spawn_time, max_spawn_time)
|
|
await get_tree().create_timer(time).timeout
|
|
spawn_enemy()
|
|
start_spawn_timer()
|
|
|
|
func spawn_enemy():
|
|
if not enemy_scene:
|
|
return
|
|
|
|
var enemy = enemy_scene.instantiate()
|
|
get_parent().add_child(enemy)
|
|
|
|
# Calculate random position outside the screen
|
|
var viewport_rect = get_viewport().get_visible_rect()
|
|
var camera = get_viewport().get_camera_2d()
|
|
var center = Vector2.ZERO
|
|
if camera:
|
|
center = camera.get_screen_center_position()
|
|
# Adjust rect size for zoom
|
|
viewport_rect.size /= camera.zoom
|
|
|
|
# Pick a random angle and a distance slightly larger than half the diagonal
|
|
var angle = randf() * TAU
|
|
var distance = viewport_rect.size.length() / 2.0 + 100.0 # +100 buffer
|
|
|
|
enemy.global_position = center + Vector2.RIGHT.rotated(angle) * distance
|