<Im trying to make enemy respawn system. I only want to respawn enemies whenever player re-entered room just like a regular metroidvania game.
right now, the level scene is divided by several area2d representing rooms. Whenever player entered specific room, the camera will transition to new room. For enemy right now, will spawn from ObjSpawner which is a scene of Node2D and VisibleOnScreenNotifier2D, when received screen entered signal. Enemies will queue free when killed or player exited room receiving area exited signal from room.
The problem is ObjSpawner is listening to all signal from all rooms queue freeing everytime exited room resulting no enemies to spawned. How can I assign objspawner to each room and only spawn and respawn enemies of that room.
you can pass an argument “room_number” to the signal and assign every objSpawner a room_number. Then you can check if the room_number == objSpawner.room_number
I came up with an idea of appending ObjSpawner to Level Scene script and calling in each area2d signals. I would like to know which is better way to do.
var spawners01 = []
var spawners02 = []
func _ready():
spawners01.append($ObjSpawner1)
spawners01.append($ObjSpawner2)
spawners01.append($ObjSpawner3)
spawners02.append($ObjSpawner4)
spawners02.append($ObjSpawner5)
...
func _on_room01_area_entered(area):
for spawner in spawners01:
spawner.spawn_object()
func _on_room01_area_exited(area):
for spawner in spawners01:
spawner.remove_all_objects()
func _on_room02_area_entered(area):
for spawner in spawners02:
spawner.spawn_object()
func _on_room02_area_exited(area):
for spawner in spawners02:
spawner.remove_all_objects()