gae_wild_jam/scripts/spawn_control.gd

73 lines
1.7 KiB
GDScript

extends Control
var up_left
var down_right
var up_right
var down_left
var viewport_rect
var elapsed_time = 0.0
@export var spawn_entries: Array[SpawnEntry]
func _ready() -> void:
var camera: Camera2D = get_parent().get_node("Camera2D")
var viewport_size = get_viewport_rect().size
var world_size = viewport_size / camera.zoom
var world_origin = camera.global_position # anchor_mode = 0 → top-left corner
up_left = world_origin
down_right = world_origin + world_size
up_right = Vector2(down_right.x, up_left.y)
down_left = Vector2(up_left.x, down_right.y)
func get_spawn_position() -> Vector2:
var side = randi() % 4
var spawn_x
var spawn_y
if side == 0:
# oben
spawn_x = randf_range(up_left.x, up_right.x)
spawn_y = up_left.y
elif side == 1:
# rechts
spawn_x = up_right.x
spawn_y = randf_range(up_right.y, down_right.y)
elif side == 2:
#unten
spawn_x = randf_range(up_left.x, up_right.x)
spawn_y = down_left.y
elif side == 3:
#links
spawn_x = up_left.x
spawn_y = randf_range(up_right.y, down_right.y)
return Vector2(spawn_x, spawn_y)
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta: float) -> void:
elapsed_time += delta
pass
func spawn_enemy() -> void:
var sum_weight = 0.0
var available = []
for entry in spawn_entries:
if entry.min_time <= elapsed_time:
available.append(entry)
sum_weight += entry.weight
var roll = randf() * sum_weight
var winner = null
for entry in available:
roll -= entry.weight
if roll <= 0:
winner = entry
break
if winner == null:
return
var enemy = winner.enemy.instantiate()
enemy.global_position = get_spawn_position()
add_child(enemy)
func _on_spawn_timer_timeout() -> void:
spawn_enemy()
pass # Replace with function body.