extends Area3D
var Bullet = preload("res://PROTAGONISTA/area_3dPROLLECTIL.tscn")
func _input(event):
	# Instanciar al presionar el botón izquierdo del ratón
	if event is InputEventMouseButton:
		if event.button_index == MOUSE_BUTTON_LEFT and event.pressed:
			# Retrasar la instanciación del proyectil
			await get_tree().create_timer(0.5).timeout
			var bullet = Bullet.instantiate()
			add_child(bullet)
		# Instanciar al presionar el botón derecho del ratón
		if event.button_index == MOUSE_BUTTON_RIGHT and event.pressed:
			await get_tree().create_timer(0.5).timeout
			var bullet = Bullet.instantiate()
			add_child(bullet)
	
	# Instanciar al presionar la tecla "R" (usando la acción "PATADAMEDIA")
	# ¡Asegúrate de que "PATADAMEDIA" esté configurada **exactamente así** en Project Settings -> Input Map para la tecla R!
	if event.is_action_pressed("PATADAMEDIA"): 
		await get_tree().create_timer(1.15).timeout
		var bullet = Bullet.instantiate()
		add_child(bullet)
--------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------
Explicacion: en mi nuevo videojuego e conseguido fluidez en animaciones y asignar al teclado varias acciones de golpear enemigos..........
----------------------------------------------------------------------------------------------------------
----------------------------------------------------------
MEJORA AMPLIACION DEL GDSCRIPT:
EXPLICACION: GOLPES REPETITIVOS CONSTANTES ASTA SOLTAR TECLA Y O BOTONES DEL MOUSE
---------------------------------------------------------------------------------------------------------------------------
extends Area3D
var Bullet = preload("res://PROTAGONISTA/area_3dPROLLECTIL.tscn")
# --- Banderas de estado para los botones del ratón ---
var is_mouse_left_pressed: bool = false
var is_mouse_right_pressed: bool = false
# Para la tecla R, no necesitamos una bandera 'is_pressed' separada en _input,
# ya que su estado se maneja directamente con la acción en _process.
# --- Variables de control para los cooldowns (TIEMPOS DE RECARGA UNIFICADOS) ---
# Cooldown general para la acción de disparo / instanciación
var fire_cooldown: float = 0.5 # 0.5 segundos entre disparos para ratón y 'R'
# Banderas para controlar si cada acción puede disparar (está fuera de cooldown)
var can_fire_left_mouse: bool = true
var can_fire_right_mouse: bool = true
var can_fire_patadamedia: bool = true # Para la tecla 'R'
# --- Nodos Timer (creados y gestionados en _ready) ---
var left_mouse_timer: Timer
var right_mouse_timer: Timer
var patadamedia_timer: Timer
func _ready() -> void:
	# --- Inicialización de temporizadores para los botones del ratón ---
	# Temporizador para el botón izquierdo del ratón
	left_mouse_timer = Timer.new()
	add_child(left_mouse_timer)
	left_mouse_timer.wait_time = fire_cooldown
	left_mouse_timer.one_shot = true
	left_mouse_timer.timeout.connect(func(): can_fire_left_mouse = true) # Resetea el cooldown
	# Temporizador para el botón derecho del ratón
	right_mouse_timer = Timer.new()
	add_child(right_mouse_timer)
	right_mouse_timer.wait_time = fire_cooldown
	right_mouse_timer.one_shot = true
	right_mouse_timer.timeout.connect(func(): can_fire_right_mouse = true) # Resetea el cooldown
	# --- Inicialización del temporizador para la acción 'PATADAMEDIA' (Tecla R) ---
	patadamedia_timer = Timer.new()
	add_child(patadamedia_timer)
	patadamedia_timer.wait_time = fire_cooldown # ¡Usa el mismo cooldown!
	patadamedia_timer.one_shot = true
	patadamedia_timer.timeout.connect(func(): can_fire_patadamedia = true) # Resetea el cooldown
func _input(event: InputEvent) -> void:
	# --- Lógica para actualizar el estado de los botones del ratón (rápida y sin awaits) ---
	if event is InputEventMouseButton:
		# Botón Izquierdo
		if event.button_index == MOUSE_BUTTON_LEFT:
			is_mouse_left_pressed = event.pressed # True si se presiona, False si se suelta
		
		# Botón Derecho
		if event.button_index == MOUSE_BUTTON_RIGHT:
			is_mouse_right_pressed = event.pressed # True si se presiona, False si se suelta
	
	# --- La tecla "R" (PATADAMEDIA) ya no necesita await aquí.
	# Su lógica de instanciación se moverá completamente a _process.
	# Esto es para asegurar que todas las acciones de disparo continuo se gestionen de forma similar.
func _process(delta: float) -> void:
	# --- Lógica de Disparo/Instanciación para el Botón Izquierdo del Ratón ---
	if is_mouse_left_pressed and can_fire_left_mouse:
		can_fire_left_mouse = false # Pone el cooldown
		instantiate_bullet()        # Llama a la función unificada de instanciación
		left_mouse_timer.start()    # Inicia el temporizador de cooldown
		
	# --- Lógica de Disparo/Instanciación para el Botón Derecho del Ratón ---
	if is_mouse_right_pressed and can_fire_right_mouse:
		can_fire_right_mouse = false # Pone el cooldown
		instantiate_bullet()         # Llama a la función unificada de instanciación
		right_mouse_timer.start()    # Inicia el temporizador de cooldown
	# --- Lógica de Disparo/Instanciación para la acción "PATADAMEDIA" (Tecla R) ---
	# is_action_pressed se usa aquí para detectar si la tecla R está siendo MANTENIDA.
	# Si la quieres solo al "golpe" inicial y luego cooldown, usarías is_action_just_pressed.
	# Para "automático al mantener", is_action_pressed es correcto.
	if Input.is_action_pressed("PATADAMEDIA") and can_fire_patadamedia:
		can_fire_patadamedia = false # Pone el cooldown
		instantiate_bullet()         # Llama a la función unificada de instanciación
		patadamedia_timer.start()    # Inicia el temporizador de cooldown
# --- Función unificada para instanciar la bala ---
func instantiate_bullet() -> void:
	var bullet = Bullet.instantiate()
	# Aquí podrías ajustar la posición de la bala si es necesario,
	# por ejemplo: bullet.global_transform.origin = global_transform.origin + Vector3(0, 0, -2)
	add_child(bullet)
-------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------
EXPLICACION; PERSONALIZA CADA TIEMPO DE CADA GOLPE DIFERENTE....
PATADA  PUÑETAZO IZQUIERDO PUÑETAZO DERECHO TODO PERSONALIZADO.......
--------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------
extends Area3D
var Bullet = preload("res://PROTAGONISTA/area_3dPROLLECTIL.tscn")
# --- Banderas de estado para los botones del ratón ---
var is_mouse_left_pressed: bool = false
var is_mouse_right_pressed: bool = false
# --- Variables de control para los cooldowns (TIEMPOS DE RECARGA PERSONALIZADOS) ---
# Cooldown para el botón izquierdo del ratón
var left_mouse_fire_cooldown: float = 1.9 
# Cooldown para el botón derecho del ratón
var right_mouse_fire_cooldown: float = 0.4 
# Cooldown para la acción "PATADAMEDIA" (Tecla R)
var patadamedia_fire_cooldown: float = 1.7
# Banderas para controlar si cada acción puede disparar (está fuera de cooldown)
var can_fire_left_mouse: bool = true
var can_fire_right_mouse: bool = true
var can_fire_patadamedia: bool = true # Para la tecla 'R'
# --- Nodos Timer (creados y gestionados en _ready) ---
var left_mouse_timer: Timer
var right_mouse_timer: Timer
var patadamedia_timer: Timer
func _ready() -> void:
	# --- Inicialización de temporizadores para los botones del ratón ---
	# Temporizador para el botón izquierdo del ratón
	left_mouse_timer = Timer.new()
	add_child(left_mouse_timer)
	left_mouse_timer.wait_time = left_mouse_fire_cooldown # ¡Ahora usa su propio cooldown!
	left_mouse_timer.one_shot = true
	left_mouse_timer.timeout.connect(func(): can_fire_left_mouse = true) # Resetea el cooldown
	# Temporizador para el botón derecho del ratón
	right_mouse_timer = Timer.new()
	add_child(right_mouse_timer)
	right_mouse_timer.wait_time = right_mouse_fire_cooldown # ¡Ahora usa su propio cooldown!
	right_mouse_timer.one_shot = true
	right_mouse_timer.timeout.connect(func(): can_fire_right_mouse = true) # Resetea el cooldown
	# --- Inicialización del temporizador para la acción 'PATADAMEDIA' (Tecla R) ---
	patadamedia_timer = Timer.new()
	add_child(patadamedia_timer)
	patadamedia_timer.wait_time = patadamedia_fire_cooldown # ¡Ahora usa su propio cooldown!
	patadamedia_timer.one_shot = true
	patadamedia_timer.timeout.connect(func(): can_fire_patadamedia = true) # Resetea el cooldown
func _input(event: InputEvent) -> void:
	# --- Lógica para actualizar el estado de los botones del ratón (rápida y sin awaits) ---
	if event is InputEventMouseButton:
		# Botón Izquierdo
		if event.button_index == MOUSE_BUTTON_LEFT:
			is_mouse_left_pressed = event.pressed # True si se presiona, False si se suelta
		
		# Botón Derecho
		if event.button_index == MOUSE_BUTTON_RIGHT:
			is_mouse_right_pressed = event.pressed # True si se presiona, False si se suelta
	
	# La tecla "R" (PATADAMEDIA) no necesita await aquí.
	# Su lógica de instanciación se gestiona completamente en _process.
func _process(delta: float) -> void:
	# --- Lógica de Disparo/Instanciación para el Botón Izquierdo del Ratón ---
	if is_mouse_left_pressed and can_fire_left_mouse:
		can_fire_left_mouse = false # Pone el cooldown
		instantiate_bullet()        # Llama a la función unificada de instanciación
		left_mouse_timer.start()    # Inicia el temporizador de cooldown
		
	# --- Lógica de Disparo/Instanciación para el Botón Derecho del Ratón ---
	if is_mouse_right_pressed and can_fire_right_mouse:
		can_fire_right_mouse = false # Pone el cooldown
		instantiate_bullet()         # Llama a la función unificada de instanciación
		right_mouse_timer.start()    # Inicia el temporizador de cooldown
	# --- Lógica de Disparo/Instanciación para la acción "PATADAMEDIA" (Tecla R) ---
	if Input.is_action_pressed("PATADAMEDIA") and can_fire_patadamedia:
		can_fire_patadamedia = false # Pone el cooldown
		instantiate_bullet()         # Llama a la función unificada de instanciación
		patadamedia_timer.start()    # Inicia el temporizador de cooldown
# --- Función unificada para instanciar la bala ---
func instantiate_bullet() -> void:
	var bullet = Bullet.instantiate()
	# Aquí podrías ajustar la posición de la bala si es necesario,
	# por ejemplo: bullet.global_transform.origin = global_transform.origin + Vector3(0, 0, -2)
	add_child(bullet)