Files
go-a-dot/playground/playground_world.gd

64 lines
1.7 KiB
GDScript

extends Node2D
var camera: Camera2D
var levels: Array[Node] = []
var active_levels: Array[PlaygroundLevel] = []
var player: Node2D
func _ready() -> void:
camera = $Camera2D
player = $Player
print("[PlaygroundWorld] Initializing...")
# Levels
levels.clear()
for child in get_children():
if child is PlaygroundLevel:
levels.append(child)
print("[PlaygroundWorld] Found level: ", child.name)
print("[PlaygroundWorld] Total levels found: ", levels.size())
# Level signals
for level in levels:
if level.has_signal("entered"):
level.entered.connect(on_level_entered)
if level.has_signal("exited"):
level.exited.connect(on_level_exited)
func on_level_entered(level: PlaygroundLevel) -> void:
if not level in active_levels:
active_levels.append(level)
print("[PlaygroundWorld] Player entered level: ", level.name, ". Stack: ", _get_stack_names())
_update_camera_target()
func on_level_exited(level: PlaygroundLevel) -> void:
if level in active_levels:
active_levels.erase(level)
print("[PlaygroundWorld] Player exited level: ", level.name, ". Stack: ", _get_stack_names())
_update_camera_target()
func _update_camera_target() -> void:
if not camera:
return
if active_levels.is_empty():
# Optional: Handle case where player is not in any level
# For now, just keep the last camera position or disable it?
# camera.enabled = false
print("[PlaygroundWorld] No active levels.")
return
var target_level = active_levels.back()
var bounds = target_level.get_global_bounds()
print("[PlaygroundWorld] Focusing on level: ", target_level.name)
camera.enabled = true
camera.transition_to_bounds(bounds)
func _get_stack_names() -> String:
var names = []
for l in active_levels:
names.append(l.name)
return str(names)