feat: 添加spawner生成器,生成敌人
This commit is contained in:
@@ -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"
|
||||
@@ -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
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
uid://dqhoumuppl4bx
|
||||
@@ -0,0 +1,5 @@
|
||||
extends Resource
|
||||
class_name WaveUnitData
|
||||
|
||||
@export var unit_scene: PackedScene
|
||||
@export var weight := 0.0
|
||||
@@ -0,0 +1 @@
|
||||
uid://rw3gxqh858sr
|
||||
Reference in New Issue
Block a user