feat: 添加spawner生成器,生成敌人
This commit is contained in:
@@ -0,0 +1,65 @@
|
||||
extends Node2D
|
||||
class_name Spawner
|
||||
|
||||
@export var spawn_area_size := Vector2(1000, 500)
|
||||
@export var waves_data: Array[WaveData]
|
||||
@export var enemy_collection: Array[UnitStats]
|
||||
|
||||
@onready var spawn_timer: Timer = $SpawnTimer
|
||||
@onready var wave_timer: Timer = $WaveTimer
|
||||
|
||||
var wave_index := 1
|
||||
var current_wave_data: WaveData
|
||||
var spawned_enemiese: Array[Enemy] = []
|
||||
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready() -> void:
|
||||
start_wave()
|
||||
|
||||
|
||||
func find_wave_data() -> WaveData:
|
||||
for wave in waves_data:
|
||||
if wave and wave.is_vaild_index(wave_index):
|
||||
return wave
|
||||
return null
|
||||
|
||||
|
||||
func start_wave() -> void:
|
||||
current_wave_data = find_wave_data()
|
||||
if not current_wave_data :
|
||||
printerr("No valid wave.")
|
||||
spawn_timer.stop()
|
||||
wave_timer.stop()
|
||||
return
|
||||
|
||||
wave_timer.wait_time = current_wave_data.wave_time
|
||||
wave_timer.start()
|
||||
|
||||
set_spawn_timer()
|
||||
|
||||
func set_spawn_timer() -> void:
|
||||
match current_wave_data.spawn_type:
|
||||
WaveData.SpawnType.FIXED:
|
||||
spawn_timer.wait_time = current_wave_data.fixed_spawn_time
|
||||
WaveData.SpawnType.RANDOM:
|
||||
var min_t := current_wave_data.min_spawn_time
|
||||
var max_t := current_wave_data.max_spawn_time
|
||||
spawn_timer.wait_time = randf_range(min_t, max_t)
|
||||
|
||||
if spawn_timer.is_stopped():
|
||||
spawn_timer.start()
|
||||
|
||||
func spawn_enemy() -> void:
|
||||
var enemy_scene := current_wave_data.get_randon_unit_scene() as PackedScene
|
||||
if enemy_scene:
|
||||
var enemy_instance := enemy_scene.instantiate() as Enemy
|
||||
enemy_instance.global_position = Vector2.ZERO
|
||||
get_parent().add_child(enemy_instance)
|
||||
spawned_enemiese.append(enemy_instance)
|
||||
|
||||
set_spawn_timer()
|
||||
|
||||
|
||||
func _on_spawn_timer_timeout() -> void:
|
||||
spawn_enemy()
|
||||
Reference in New Issue
Block a user