Mostrando entradas con la etiqueta GDScript Godot 4.4 abrir puertas en eje "x" de lado a alado no en eje "y" de arriba abajo;. Mostrar todas las entradas
Mostrando entradas con la etiqueta GDScript Godot 4.4 abrir puertas en eje "x" de lado a alado no en eje "y" de arriba abajo;. Mostrar todas las entradas

jueves, 17 de julio de 2025

GDScript Godot 4.4 abrir puertas en eje "x" de lado a alado no en eje "y" de arriba abajo;

 extends Area3D


@export var velocidad_subida: float = 3.3

@export var velocidad_bajada: float = 3.3  # Cambié el nombre para mayor claridad

@export var altura_maxima: float = 1.0  # Altura máxima que subirá el objeto

@export var altura_inicial: float = 0.0 # Altura inicial del objeto


var objeto: Node3D  # Variable para almacenar el nodo CSGBox3D7

var subiendo: bool = false

var bajando: bool = false

var altura_actual: float = 0.0


@onready var sonido_puerta = $AudioStreamPlayer3D # ¡Añade esta línea! Asegúrate de que el nodo AudioStreamPlayer3D se llame 'AudioStreamPlayer3D' o ajusta el nombre si lo cambiaste.


func _ready():

#objeto = $CSGBox3D7  # Asignamos el nodo a la variable

objeto = $"CSGBox3D6 PUERTACARCEL"  # Asignamos el nodo a la variable

altura_actual = objeto.position.x # Obtiene la altura inicial del objeto

altura_inicial = altura_actual # guarda la altura inicial


func _physics_process(delta):

if objeto:  # Verifica si el objeto existe

if subiendo:

altura_actual += velocidad_subida * delta

altura_actual = min(altura_actual, altura_inicial + altura_maxima) # Limita la altura máxima

objeto.position.x = altura_actual

if altura_actual >= altura_inicial + altura_maxima:

subiendo = false  # Detiene la subida al alcanzar la altura máxima

elif bajando:

altura_actual -= velocidad_bajada * delta

altura_actual = max(altura_actual, altura_inicial)  # Limita la altura mínima

objeto.position.x = altura_actual

if altura_actual <= altura_inicial:

bajando = false  # Detiene la bajada al alcanzar la altura inicial


func _on_area_entered(area: Area3D) -> void:

subiendo = true

bajando = false

# ¡Añade esta línea para reproducir el sonido!

if sonido_puerta and not sonido_puerta.playing: # Verifica que el nodo existe y no está sonando ya

sonido_puerta.play()


func _on_area_exited(area: Area3D) -> void:

subiendo = false

bajando = true

# Puedes añadir un sonido diferente para cuando la puerta baja aquí si lo deseas

# Por ejemplo:

# if sonido_puerta and sonido_puerta.playing: # O puedes usar otro AudioStreamPlayer3D para el sonido de bajada

#     sonido_puerta.stop() # Detiene el sonido si aún está sonando al salir