diff --git a/scenes/game.tscn b/scenes/game.tscn index a654714..0d0d4b3 100644 --- a/scenes/game.tscn +++ b/scenes/game.tscn @@ -4,15 +4,31 @@ [ext_resource type="Script" uid="uid://cphrdy0xexx30" path="res://scenes/game.gd" id="1_vtaks"] [ext_resource type="PackedScene" uid="uid://7vohdw0xop0g" path="res://scenes/worldborder.tscn" id="2_dinhu"] [ext_resource type="Script" uid="uid://coplu13jpw4xq" path="res://scripts/camera_2d.gd" id="3_kvpfn"] +[ext_resource type="Script" uid="uid://b4jrogrq54c8f" path="res://scripts/SpawnEntry.gd" id="6_ir15t"] [ext_resource type="Script" uid="uid://dovkm6w8af08x" path="res://scripts/spawn_control.gd" id="6_p57ef"] +[ext_resource type="PackedScene" uid="uid://ccotbw7gepsge" path="res://scenes/slime.tscn" id="7_ca42v"] [ext_resource type="Texture2D" uid="uid://c4i3fnr6gpjp" path="res://assets/tileset/Tiled_files/details.png" id="7_gee14"] [ext_resource type="PackedScene" uid="uid://b4v0ntaukg2je" path="res://scenes/witch.tscn" id="7_u5sy4"] [ext_resource type="Texture2D" uid="uid://0xu8ohipv2mj" path="res://assets/tileset/Tiled_files/Objects.png" id="8_0tnpc"] +[ext_resource type="PackedScene" uid="uid://cj83ht5o2l8c1" path="res://scenes/blue_slime.tscn" id="8_rysoc"] [ext_resource type="PackedScene" uid="uid://cgu7w2jd42f3a" path="res://scenes/tile_map_layer(background).tscn" id="8_vtaks"] [ext_resource type="PackedScene" uid="uid://bgpsc6dvsn7ak" path="res://scenes/tile_map_layer(objects).tscn" id="9_kvpfn"] [ext_resource type="PackedScene" uid="uid://co8t1fr3b3kub" path="res://scenes/tile_map_layer(overlay).tscn" id="10_dinhu"] [ext_resource type="Script" uid="uid://ckv6prbe1o7s1" path="res://scripts/drop_manager.gd" id="10_vtaks"] +[sub_resource type="Resource" id="Resource_ssvqc"] +script = ExtResource("6_ir15t") +weight = 1.0 +enemy = ExtResource("7_ca42v") +metadata/_custom_type_script = "uid://b4jrogrq54c8f" + +[sub_resource type="Resource" id="Resource_264po"] +script = ExtResource("6_ir15t") +min_time = 10.0 +weight = 0.5 +enemy = ExtResource("8_rysoc") +metadata/_custom_type_script = "uid://b4jrogrq54c8f" + [sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_vtaks"] texture = ExtResource("7_gee14") 1:1/0 = 0 @@ -2362,6 +2378,7 @@ anchors_preset = 0 offset_right = 40.0 offset_bottom = 40.0 script = ExtResource("6_p57ef") +spawn_entries = Array[ExtResource("6_ir15t")]([SubResource("Resource_ssvqc"), SubResource("Resource_264po")]) [node name="SpawnTimer" type="Timer" parent="." unique_id=1852920556] wait_time = 0.203 diff --git a/scripts/SpawnEntry.gd b/scripts/SpawnEntry.gd new file mode 100644 index 0000000..60389af --- /dev/null +++ b/scripts/SpawnEntry.gd @@ -0,0 +1,5 @@ +extends Resource +class_name SpawnEntry +@export var min_time: float +@export var weight: float +@export var enemy: PackedScene diff --git a/scripts/SpawnEntry.gd.uid b/scripts/SpawnEntry.gd.uid new file mode 100644 index 0000000..92e6da7 --- /dev/null +++ b/scripts/SpawnEntry.gd.uid @@ -0,0 +1 @@ +uid://b4jrogrq54c8f diff --git a/scripts/spawn_control.gd b/scripts/spawn_control.gd index 06d1ceb..cd4f46d 100644 --- a/scripts/spawn_control.gd +++ b/scripts/spawn_control.gd @@ -5,6 +5,8 @@ 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") @@ -16,6 +18,7 @@ func _ready() -> void: 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 @@ -40,15 +43,28 @@ func get_spawn_position() -> Vector2: 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 enemy_scene = preload("res://scenes/blue_slime.tscn") - var enemy = enemy_scene.instantiate() + 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) - pass func _on_spawn_timer_timeout() -> void: