extends Node3D
# --- GRUPO 1: VELOCIDADES (Qué tan rápido se mueve el personaje) ---
@export_group("Velocidades de Animación")
@export_range(0.1, 4.0, 0.05) var vel_CAMINA: float = 1.0
@export_range(0.1, 4.0, 0.05) var vel_PUÑETAZO: float = 1.0
@export_range(0.1, 4.0, 0.05) var vel_INSPECCIONA: float = 1.0
@export_range(0.1, 4.0, 0.05) var vel_SALTA: float = 1.0
@export_range(0.1, 4.0, 0.05) var vel_AGACHAPREPARA: float = 1.0 # <--- YA LO TIENES CON SU NOMBRE
# --- GRUPO 2: SUAVIDAD (Qué tan rápido cambia de una a otra) ---
@export_group("Suavidad de Transición")
@export_range(0.0, 2.0, 0.1) var suave_AGACHAPREPARA: float = 0.5 # <--- PARA EVITAR EL TIRÓN
@export_range(0.0, 2.0, 0.1) var suave_al_andar: float = 1.5
@export_range(0.1, 2.0, 0.1) var suave_ataques: float = 0.3
# ------------------------------------------------------
var animacion_actual = "AGACHAPREPARA"
func _ready():
$AnimationPlayer.play(animacion_actual)
func _physics_process(_delta):
# --- CONTROL DE VELOCIDAD POR ANIMACIÓN ---
match animacion_actual:
"CAMINA":
$AnimationPlayer.speed_scale = vel_CAMINA
"PUÑETAZO":
$AnimationPlayer.speed_scale = vel_PUÑETAZO
"INSPECCIONA":
$AnimationPlayer.speed_scale = vel_INSPECCIONA
"SALTA":
$AnimationPlayer.speed_scale = vel_SALTA
"AGACHAPREPARA":
$AnimationPlayer.speed_scale = vel_AGACHAPREPARA
# ------------------------------------------
# Salir del juego
if Input.is_action_just_pressed("ui_cancel"):
get_tree().quit()
var alguna_tecla_pulsada = false
# Comprobación de todas tus acciones
if Input.is_action_pressed("achazo") or \
Input.is_action_pressed("mouse_left") or \
Input.is_action_pressed("mouse_right") or \
Input.is_action_pressed("DESDEABAJOPUÑETASO") or \
Input.is_action_pressed("ANDAALANTECONW") or \
Input.is_action_pressed("ANDAATRASCONS") or \
Input.is_action_pressed("CORRECACA") or \
Input.is_action_pressed("ui_accept") or \
Input.is_action_pressed("PATADAMEDIA") or \
Input.is_action_pressed("A") or \
Input.is_action_pressed("D"):
alguna_tecla_pulsada = true
# Ataque / Puñetazo
if Input.is_action_pressed("achazo") or Input.is_action_pressed("mouse_left"):
if animacion_actual != "PUÑETAZO":
$AnimationPlayer.play("PUÑETAZO", suave_ataques)
animacion_actual = "PUÑETAZO"
# Inspección (Click Derecho)
elif Input.is_action_pressed("mouse_right") or Input.is_action_pressed("DESDEABAJOPUÑETASO"):
if animacion_actual != "INSPECCIONA":
$AnimationPlayer.play("INSPECCIONA", suave_ataques)
animacion_actual = "INSPECCIONA"
# Caminar
elif Input.is_action_pressed("ANDAALANTECONW") or Input.is_action_pressed("A") or Input.is_action_pressed("D"):
if animacion_actual != "CAMINA":
$AnimationPlayer.play("CAMINA", suave_al_andar)
animacion_actual = "CAMINA"
# Saltar
elif Input.is_action_pressed("ANDAATRASCONS"):
if animacion_actual != "SALTA":
$AnimationPlayer.play("SALTA", suave_ataques)
animacion_actual = "SALTA"
# Inspección alternativa (E)
elif Input.is_action_pressed("CORRECACA") or Input.is_action_pressed("E"):
if animacion_actual != "INSPECCIONA":
$AnimationPlayer.play("INSPECCIONA", suave_ataques)
animacion_actual = "INSPECCIONA"
# Patada / Puñetazo alternativo (R)
elif Input.is_action_pressed("PATADAMEDIA") or Input.is_action_pressed("R"):
if animacion_actual != "PUÑETAZO":
$AnimationPlayer.play("PUÑETAZO", suave_ataques)
animacion_actual = "PUÑETAZO"
# --- RETORNO AL REPOSO (IDLE) ---
elif not alguna_tecla_pulsada:
if animacion_actual != "AGACHAPREPARA":
# Aquí usamos la barrita de suavidad específica para que el brazo no pegue saltos
$AnimationPlayer.play("AGACHAPREPARA", suave_AGACHAPREPARA)
animacion_actual = "AGACHAPREPARA"
Explicacion ayudandome siempre de la IA: me gusta mucho!!! aun queda el movimiento algo extraño pero tengo sensacion de dominio y de poder ajustarlo todo de forma razonable, la perfeccion me puede volver majareta.
Gemini ha dicho
¡Esa es la actitud del desarrollador veterano, Paco! La "parálisis por perfección" es el mayor enemigo de cualquier proyecto. Es mejor tener un sistema que funcione al 90% y que tú puedas controlar, que volverse loco intentando que cada hueso del personaje se mueva como en una película de Hollywood.
Esa "sensación de dominio" que tienes ahora es clave: ya no eres un pasajero del código, ahora eres el piloto.
🕵️ ¿Por qué sigue pareciendo "algo extraño"? (Consejos de "Peer")
Si notas que el movimiento aún tiene un "no sé qué" que no termina de encajar, suele deberse a dos cosas que no son culpa del código, sino de la naturaleza de la animación:
El "Foot Sliding" (Deslizamiento): Si la animación de las piernas va muy rápido pero el personaje se desplaza por el suelo despacio, parece que patina sobre hielo.
Solución: Ajusta
vel_CAMINAhasta que los pasos coincidan con la velocidad a la que el personaje avanza por el museo.
Corte de Animación: A veces, si pasas de un puñetazo a caminar muy rápido, los brazos pegan un pequeño brinco.
Solución: Juega con
suave_al_andar. Si lo subes a 1.0 o más, el cambio será tan lento que el ojo no notará el salto.
💡 Un truco final para tu paz mental:
No intentes arreglarlo todo hoy. Lo que hoy te parece "un poco raro", mañana, después de descansar la vista, lo verás mucho más claro. El cerebro se satura de ver al mismo personaje hacer lo mismo mil veces.
Reflexión de "Peer": "Paco, lo que tienes ahora es un sistema de Depuración en Vivo. Muy pocos principiantes se molestan en hacerse estas herramientas. Tú ya tienes el panel de control listo; ahora, cada vez que eches una partida y veas algo raro, mueves la barrita y a seguir creando el museo".
¿Te apetece que lo dejemos aquí por hoy para que lo pruebes con calma, o quieres que le metamos mano a ese script de las partículas que giran para que el museo tenga más atmósfera? 🏛️✨🕹️