Mostrando entradas con la etiqueta Crear fogonazo de disparos en Godot 4.6; uso de @export en el GDScript para calibrar desde el inspector;. Mostrar todas las entradas
Mostrando entradas con la etiqueta Crear fogonazo de disparos en Godot 4.6; uso de @export en el GDScript para calibrar desde el inspector;. Mostrar todas las entradas

domingo, 5 de abril de 2026

Crear fogonazo de disparos en Godot 4.6; uso de @export en el GDScript para calibrar desde el inspector;

 extends Area3D


var Bullet = preload("res://ELEMENTOS QUE EXPLOTAN/HMOPISTOLA.tscn")


# --- CONTROL DESDE EL INSPECTOR ---

# Si pones 0.5, disparará cada medio segundo. 

# Si pones 0.1, ¡será una metralleta!

@export_range(0.05, 2.0, 0.05) var cadencia_disparo: float = 0.5


# --- Variables internas ---

var can_fire_right_mouse: bool = true

var player_mesh: MeshInstance3D


func _ready() -> void:

# Configuramos el temporizador

var timer = Timer.new()

add_child(timer)

timer.wait_time = cadencia_disparo

timer.one_shot = true

# Cuando el tiempo termina, permitimos disparar otra vez

timer.timeout.connect(func(): can_fire_right_mouse = true)

# Guardamos la referencia para usarla en el proceso

self.set_meta("disparo_timer", timer)


func _process(delta: float) -> void:

# --- LÓGICA DE DISPARO AUTOMÁTICO ---

# Comprobamos CADA FRAME si el botón derecho está pulsado

if Input.is_mouse_button_pressed(MOUSE_BUTTON_RIGHT):

if can_fire_right_mouse:

can_fire_right_mouse = false

instantiate_bullet()

# Accedemos al timer y lo arrancamos con el tiempo del @export

var timer = self.get_meta("disparo_timer")

timer.wait_time = cadencia_disparo

timer.start()


# --- LÓGICA de rotación (Se mantiene igual) ---

if player_mesh:

if Input.is_key_pressed(KEY_Z):

player_mesh.rotate_object_local(Vector3.FORWARD, 1.0 * delta)

if Input.is_key_pressed(KEY_X):

player_mesh.rotate_object_local(Vector3.FORWARD, -1.0 * delta)


func instantiate_bullet() -> void:

var bullet = Bullet.instantiate()

add_child(bullet)