49 lines
1.6 KiB
GDScript
49 lines
1.6 KiB
GDScript
extends Area2D
|
|
|
|
# Stairs that trigger level completion when player enters
|
|
|
|
@onready var sfx_stairs = null
|
|
|
|
func _ready():
|
|
# Connect body entered signal
|
|
body_entered.connect(_on_body_entered)
|
|
|
|
# Set collision layer/mask to detect players
|
|
collision_layer = 0
|
|
collision_mask = 1 # Detect players (layer 1)
|
|
|
|
# Load stairs sound effect
|
|
if not sfx_stairs:
|
|
# Try to create AudioStreamPlayer2D if it doesn't exist
|
|
sfx_stairs = AudioStreamPlayer2D.new()
|
|
sfx_stairs.name = "SfxStairs"
|
|
add_child(sfx_stairs)
|
|
|
|
# Load go_down_stairs.mp3 sound
|
|
var stairs_sound = load("res://assets/audio/sfx/walk/go_down_stairs.mp3")
|
|
if stairs_sound:
|
|
sfx_stairs.stream = stairs_sound
|
|
else:
|
|
print("Stairs: Warning - Could not load go_down_stairs.mp3")
|
|
|
|
func _on_body_entered(body: Node2D):
|
|
print("Stairs: Body entered: ", body, " is_player: ", body.is_in_group("player") if body else false, " is_dead: ", body.is_dead if body and "is_dead" in body else false)
|
|
if body and body.is_in_group("player") and not body.is_dead:
|
|
print("Stairs: Player entered stairs! Player: ", body.name)
|
|
|
|
# Play stairs sound effect
|
|
if sfx_stairs and sfx_stairs.stream:
|
|
sfx_stairs.play()
|
|
|
|
# Only trigger on server/authority
|
|
if multiplayer.is_server() or not multiplayer.has_multiplayer_peer():
|
|
print("Stairs: Server detected, calling game_world")
|
|
var game_world = get_tree().get_first_node_in_group("game_world")
|
|
if game_world:
|
|
print("Stairs: Game world found, calling _on_player_reached_stairs")
|
|
game_world._on_player_reached_stairs(body)
|
|
else:
|
|
print("Stairs: ERROR - Game world not found!")
|
|
else:
|
|
print("Stairs: Not server, ignoring")
|