64 lines
1.7 KiB
GDScript
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)
|