lunes, 31 de marzo de 2025

Subir y bajar una puerta con Godot 4.4; perfecto; en GDScript;

 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 = 5.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


func _ready():

    objeto = $CSGBox3D7  # Asignamos el nodo a la variable

    altura_actual = objeto.position.y # 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.y = 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.y = 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


func _on_area_exited(area: Area3D) -> void:

    subiendo = false

    bajando = true