extends CollisionShape3D
# --- AJUSTES DE MOVIMIENTO ---
@export var velocidad : float = 5.0
@export var margen_movimiento : Vector3 = Vector3(3.0, 2.0, 3.0) # Cuánto se mueve en X, Y, Z
# --- VARIABLES INTERNAS ---
var posicion_inicial : Vector3
var objetivo : Vector3
func _ready():
posicion_inicial = position
_nuevo_punto_aleatorio()
func _process(delta):
# Movemos el láser hacia el punto objetivo
position = position.move_toward(objetivo, velocidad * delta)
# Si llega al punto, elige otro
if position.distance_to(objetivo) < 0.1:
_nuevo_punto_aleatorio()
func _nuevo_punto_aleatorio():
# Calculamos un punto nuevo que NO se salga del margen
var x_random = randf_range(posicion_inicial.x - margen_movimiento.x, posicion_inicial.x + margen_movimiento.x)
var y_random = randf_range(posicion_inicial.y - margen_movimiento.y, posicion_inicial.y + margen_movimiento.y)
var z_random = randf_range(posicion_inicial.z - margen_movimiento.z, posicion_inicial.z + margen_movimiento.z)
objetivo = Vector3(x_random, y_random, z_random)
------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------
extends CollisionShape3D
# El rango máximo que se podrá mover desde su posición original
@export var amplitud : float = 89.05
# La velocidad a la que cambia de posición
@export var rapidez : float = 0.7
var posicion_original : Vector3
func _ready():
# Guardamos la posición inicial para que no se escape al infinito
posicion_original = position
func _process(delta):
# Creamos un movimiento aleatorio para cada eje
var movimiento = Vector3(
randf_range(-amplitud, amplitud),
randf_range(-amplitud, amplitud),
randf_range(-amplitud, amplitud)
)
# Aplicamos el movimiento suavizado con lerp para que no sea un teletransporte brusco
position = position.lerp(posicion_original + movimiento, rapidez * delta)