Files
Archipelago-Game/Main/Scripts/map_transitioner.gd
cgandeg 7cd34cb07e beta-1.5 (#4)
Reviewed-on: #4
2026-03-28 20:34:59 -06:00

66 lines
1.7 KiB
GDScript

extends Node
signal GameStarted
signal MapChanged(map_id: Enums.MapIds)
@export var initial_map_id: Enums.MapIds
@onready var world: Node2D = $"../World"
# Public Methods
func InstantiateTitleScreen() -> void:
var map_scene := MapLoader.GetMap(Enums.MapIds.TITLE_SCREEN)
var map := map_scene.instantiate()
world.add_child(map)
if !map.is_node_ready():
await map.ready
map.connect("GameStarted", _on_title_screen_game_started_clicked)
_connect_loading_zone_transporters()
MapChanged.emit(Enums.MapIds.TITLE_SCREEN)
func InstantiateInitialMap() -> void:
var map_scene := MapLoader.GetMap(initial_map_id)
var map := map_scene.instantiate()
world.add_child(map)
if !map.is_node_ready():
await map.ready
_connect_loading_zone_transporters()
MapChanged.emit(initial_map_id)
# Private Methods
func _on_title_screen_game_started_clicked() -> void:
GameStarted.emit()
_on_map_transition_queued(initial_map_id, "")
func _on_map_transition_queued(map_id: Enums.MapIds, marker_name: String) -> void:
print("Map Transition Queued: %s" % [Enums.MapIds.keys()[map_id]])
var map_scene := MapLoader.GetMap(map_id)
MapLoader.SetSpawnMarker(marker_name)
for child in world.get_children():
child.queue_free()
await child.tree_exited
var map := map_scene.instantiate()
world.call_deferred("add_child", map)
await map.ready
_connect_loading_zone_transporters()
MapChanged.emit(map_id)
func _connect_loading_zone_transporters() -> void:
var loading_zone_transporters := GroupUtils.GetAllLoadingZoneTransporters()
print("Loading Zones: %d" % len(loading_zone_transporters))
for transporter in loading_zone_transporters:
transporter.MapTransitionQueued.connect(_on_map_transition_queued)