Godot Version
v4.2.2.stable.official
Question
I have this problem that if I go from any map to the Lake map, it will loop indefinitely between either Woods or Town to Lake really fast. While looped, I can see the Lake map blinking in and out for a split second.
Can anyone tell me where’s the problem at?
Here’s the project if needed
Player Script:
class_name Player extends CharacterBody2D
@onready var sprite: Sprite2D = $Sprite2D
func _ready() -> void:
MapManager.OnTriggerPlayerSpawn.connect(Spawn)
func Spawn(_position: Vector2, direction: String):
global_position = _position
Doors script (shared on every door):
class_name Door extends Area2D
@export var mapDestinationTag: String
@export var doorDestinationTag: String
@export var spawnDirection = "up"
@onready var spawn = $Spawn
func _on_body_entered(body: Node2D) -> void:
if body is Player:
MapManager.GoToLevel(mapDestinationTag, doorDestinationTag)
get_parent().get_parent().queue_free()
Maps script (shared on every map):
extends Node2D
func _ready() -> void:
if MapManager.spawnDoorTag != null:
_on_level_spawn(MapManager.spawnDoorTag)
func _on_level_spawn(destinationTag: String):
var doorPath = "Doors/Door_" + destinationTag
var door = get_node(doorPath) as Door
#MapManager.TriggerPlayerSpawn(door.spawn.global_position, door.spawnDirection)
call_deferred("spawn_player", door.spawn.global_position, door.spawnDirection)
func spawn_player(position: Vector2, direction: String) -> void:
MapManager.TriggerPlayerSpawn(position, direction)
Map manager autoload script:
extends Node
var TOWN = load("res://ModularDoorMaps/town.tscn")
var WOODS = load("res://ModularDoorMaps/woods.tscn")
var LAKE = load("res://ModularDoorMaps/lake.tscn")
var spawnDoorTag
var mapNode
signal OnTriggerPlayerSpawn
func _ready() -> void:
mapNode = get_node("../Game World").get_child(0)
func GoToLevel(levelTag, destiantionTag):
var sceneToLoad
match levelTag:
"Town":
sceneToLoad = TOWN
"Woods":
sceneToLoad = WOODS
"Lake":
sceneToLoad = LAKE
if sceneToLoad != null:
spawnDoorTag = destiantionTag
var newMap = sceneToLoad.instantiate()
mapNode.add_child(newMap)
func TriggerPlayerSpawn(_position: Vector2, direction: String):
OnTriggerPlayerSpawn.emit(_position, direction)