feat: Implement core game mechanics including player, enemies, bullets, HUD, and level setup.
This commit is contained in:
36
scripts/spawner.gd
Normal file
36
scripts/spawner.gd
Normal file
@@ -0,0 +1,36 @@
|
||||
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
|
||||
Reference in New Issue
Block a user