feat: 添加spawner生成器,生成敌人

This commit is contained in:
luke358
2026-05-20 16:13:24 +08:00
parent 5cdcf705f4
commit 651eaf71ee
8 changed files with 159 additions and 0 deletions
+35
View File
@@ -0,0 +1,35 @@
[gd_resource type="Resource" script_class="WaveData" format=3 uid="uid://cer6rdmxrnenh"]
[ext_resource type="Script" uid="uid://dqhoumuppl4bx" path="res://resources/waves/wave_data.gd" id="1_cx7cn"]
[ext_resource type="Script" uid="uid://rw3gxqh858sr" path="res://resources/waves/wave_unit_data.gd" id="2_78wao"]
[ext_resource type="PackedScene" uid="uid://bfuqhhe8r8asg" path="res://scenes/unit/enemy/enemy_chaser_slow.tscn" id="3_a0tld"]
[ext_resource type="PackedScene" uid="uid://c151jxi18d6uo" path="res://scenes/unit/enemy/enemy_chaser_mid.tscn" id="4_1g00u"]
[ext_resource type="PackedScene" uid="uid://s6tc5m2wg178" path="res://scenes/unit/enemy/enemy_chaser_fast.tscn" id="5_jn2r4"]
[sub_resource type="Resource" id="Resource_3lh5k"]
script = ExtResource("2_78wao")
unit_scene = ExtResource("3_a0tld")
weight = 6.0
metadata/_custom_type_script = "uid://rw3gxqh858sr"
[sub_resource type="Resource" id="Resource_aei4b"]
script = ExtResource("2_78wao")
unit_scene = ExtResource("4_1g00u")
weight = 3.0
metadata/_custom_type_script = "uid://rw3gxqh858sr"
[sub_resource type="Resource" id="Resource_w8f67"]
script = ExtResource("2_78wao")
unit_scene = ExtResource("5_jn2r4")
weight = 1.0
metadata/_custom_type_script = "uid://rw3gxqh858sr"
[resource]
script = ExtResource("1_cx7cn")
from = 1
to = 5
units = Array[ExtResource("2_78wao")]([SubResource("Resource_3lh5k"), SubResource("Resource_aei4b"), SubResource("Resource_w8f67")])
fixed_spawn_time = 0.5
min_spawn_time = 0.5
max_spawn_time = 2.0
metadata/_custom_type_script = "uid://dqhoumuppl4bx"
+39
View File
@@ -0,0 +1,39 @@
extends Resource
class_name WaveData
enum SpawnType {
FIXED,
RANDOM
}
@export var from: int
@export var to: int
@export var wave_time := 20.0
@export var units: Array[WaveUnitData]
@export var spawn_type := SpawnType.RANDOM
@export var fixed_spawn_time := 1.0
@export var min_spawn_time := 1.0
@export var max_spawn_time := 1.0
func get_randon_unit_scene() -> PackedScene:
if units.is_empty():
printerr("No Units.")
return null
var enemies: Array[PackedScene]
var weights: Array[float]
for unit in units:
enemies.append(unit.unit_scene)
weights.append(unit.weight)
var rng := RandomNumberGenerator.new()
var random_unit = enemies[rng.rand_weighted(weights)]
return random_unit
func is_vaild_index(index: int) -> bool:
return index >= from and index <= to
+1
View File
@@ -0,0 +1 @@
uid://dqhoumuppl4bx
+5
View File
@@ -0,0 +1,5 @@
extends Resource
class_name WaveUnitData
@export var unit_scene: PackedScene
@export var weight := 0.0
+1
View File
@@ -0,0 +1 @@
uid://rw3gxqh858sr