optimize SpawnManager

pull/13/head
DJh2o2 2024-06-30 13:32:11 +07:00
parent 07df4ddcef
commit 5d2ef5d51d
4 changed files with 21 additions and 16 deletions

@ -40,9 +40,9 @@ size = Vector3(10000, 10000, 1000)
[node name="GameManager" type="Node" parent="."]
script = ExtResource("1_kvi4c")
[node name="SpawnManager" type="Node" parent="." node_paths=PackedStringArray("spawn_points_array", "enemies_folder")]
[node name="SpawnManager" type="Node" parent="." node_paths=PackedStringArray("spawn_points", "enemies_folder")]
script = ExtResource("4_2vmwg")
spawn_points_array = [NodePath("SpawnPoints/SpawnPoint1"), NodePath("SpawnPoints/SpawnPoint2"), NodePath("SpawnPoints/SpawnPoint3"), NodePath("SpawnPoints/SpawnPoint4")]
spawn_points = [NodePath("SpawnPoints/SpawnPoint1"), NodePath("SpawnPoints/SpawnPoint2"), NodePath("SpawnPoints/SpawnPoint3"), NodePath("SpawnPoints/SpawnPoint4")]
enemies_folder = NodePath("Enemies")
enemies = Array[PackedScene]([ExtResource("13_8a4e7")])

@ -33,7 +33,7 @@ func _ready() -> void:
state_changed.connect(_on_state_changed)
player_loaded.emit()
func _on_state_changed(old_state:States, new_state: States) -> void:
func _on_state_changed(_old_state: States, new_state: States) -> void:
#print("Player changed state from " + str(old_state) + " to " + str(new_state))
match new_state:
#States.blocking:

@ -1,7 +1,7 @@
class_name SpawnManager extends Node
@export var max_enemy := 1
@export var spawn_points_array: Array[SpawnPoint]
@export var max_enemy := 3
@export var spawn_points: Array[SpawnPoint]
@export var enemies_folder: Node
@export var enemies: Array[PackedScene]
@ -12,31 +12,36 @@ var enemy_number := 0
func _ready() -> void:
enough_enemies()
func enough_enemies() -> void:
var foundSpawnPoint := false
while enemy_count < max_enemy:
for spawn_point in spawn_points_array:
if !spawn_point.isFull:
enemy_count += 1
spawn_new_enemy(spawn_point)
if enemy_count < max_enemy:
print("No free spawn point found for enemy!")
print("EnoughEnemies: " + str(enemy_count) + "/" + str(max_enemy))
var empty_spawn_points = find_empty_spawn_points(spawn_points)
if empty_spawn_points.size() == 0:
print("No free SpawnPoints found!")
break
spawn_new_enemy(empty_spawn_points.pick_random())
func spawn_new_enemy(spawn_point: SpawnPoint) -> void:
enemy_number += 1
var new_enemy = enemies.pick_random().instantiate() as Enemy
new_enemy.player = player
enemy_count += 1
new_enemy.name = new_enemy.name + str(enemy_number)
new_enemy.unit_name = new_enemy.name
print("Spawn " + new_enemy.unit_name + " on " + spawn_point.name + " at " + str(spawn_point.position))
print("Spawn " + new_enemy.unit_name + " on " + spawn_point.name)
new_enemy.position = spawn_point.position
new_enemy.unit_died.connect(_on_unit_died)
enemies_folder.add_child(new_enemy)
spawn_point.isFull = true
spawn_point.enemy = new_enemy
func find_empty_spawn_points(spawn_points: Array[SpawnPoint]) -> Array[SpawnPoint]:
var empty_spawn_points: Array[SpawnPoint]
for spawn_point in spawn_points:
if !spawn_point.isFull: empty_spawn_points.append(spawn_point)
return empty_spawn_points
func _on_unit_died() -> void:
enemy_count -= 1
enough_enemies()

@ -1,13 +1,13 @@
class_name SpawnPoint extends Node3D
var isFull: bool:
@export var isFull: bool:
get:
return isFull
set(value):
isFull = value
#print(name + ".isFull = " + str(isFull))
var enemy: Enemy:
@export var enemy: Enemy:
get:
return enemy
set(value):