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)