domingo, 30 de agosto de 2026

Los GDScripts del videojuego The reflection the evil one.;

 extends Node3D


# Variable exportada para cambiar los segundos desde el Inspector (por defecto 3.0 segundos)

@export var tiempo_duracion: float = 10.0


func _ready() -> void:

# 1. Arrancamos la animación al cargar la escena

if $AnimationPlayer:

$AnimationPlayer.play("MakeHuman default skeleton|CONTRAESPEJO")

# 2. Creamos un temporizador que espere los segundos fijados y luego pare la animación

await get_tree().create_timer(tiempo_duracion).timeout

# 3. Pasados los segundos, detenemos la animación

if $AnimationPlayer:

$AnimationPlayer.stop()













extends Area3D


@export var reproductor_audio: AudioStreamPlayer3D


func _ready() -> void:

# Apaga todas las partículas hijas al arrancar

_cambiar_particulas(false)


body_entered.connect(_on_entrada)

body_exited.connect(_on_salida)

area_entered.connect(_on_entrada)

area_exited.connect(_on_salida)


func _on_entrada(_body_or_area) -> void:

# Activar sonido

if reproductor_audio:

if not reproductor_audio.playing:

reproductor_audio.play()

else:

reproductor_audio.stream_paused = false

# Encender todas las partículas hijas

_cambiar_particulas(true)


func _on_salida(_body_or_area) -> void:

# Pausar sonido

if reproductor_audio:

reproductor_audio.stream_paused = true

# Apagar todas las partículas hijas

_cambiar_particulas(false)


# Busca todos los nodos CPUParticles3D hijos y los activa o desactiva

func _cambiar_particulas(estado: bool) -> void:

for hijo in get_children():

if hijo is CPUParticles3D:

hijo.emitting = estado



















extends Node3D

## Escena a la que se cambiará tras finalizar el tiempo, clic o toque
@export var siguiente_escena: PackedScene

## Tiempo de espera en segundos antes de cambiar de escena
@export var tiempo_espera: float = 115.0

## Arrastra aquí el nodo TouchScreenButton desde el árbol de escena (opcional)
@export var boton_tactil: TouchScreenButton

var _ya_cambiando: bool = false

func _ready() -> void:
#Input.mouse_mode = Input.MOUSE_MODE_VISIBLE
# Conectamos el botón táctil si se ha asignado en el Inspector
if boton_tactil:
boton_tactil.pressed.connect(_al_pulsar_boton)
# Temporizador por tiempo
var timer := get_tree().create_timer(tiempo_espera)
timer.timeout.connect(_cambiar_escena_directa)

# Detecta clics de ratón o toques en la pantalla completa (móviles/PC)
func _unhandled_input(event: InputEvent) -> void:
if event is InputEventMouseButton and event.pressed and event.button_index == MOUSE_BUTTON_LEFT:
_cambiar_escena_directa()
elif event is InputEventScreenTouch and event.pressed:
_cambiar_escena_directa()

func _al_pulsar_boton() -> void:
_cambiar_escena_directa()

func _cambiar_escena_directa() -> void:
# Evitamos que se intente cambiar más de una vez
if _ya_cambiando:
return
if not siguiente_escena:
push_warning("No se ha asignado ninguna escena en el Inspector.")
return

_ya_cambiando = true

# 1. Guardamos una referencia a la escena actual
var escena_actual := get_tree().current_scene
# 2. Instanciamos la nueva escena
var nueva_instancia := siguiente_escena.instantiate()
# 3. Añadimos la nueva escena al nodo raíz del proyecto
get_tree().root.add_child(nueva_instancia)
# 4. Establecemos la nueva escena como la escena activa
get_tree().current_scene = nueva_instancia
# 5. Eliminamos la escena vieja
if escena_actual:
escena_actual.queue_free()

















extends Node3D

# Variable exportada para cambiar los segundos desde el Inspector (por defecto 3.0 segundos)
@export var tiempo_duracion: float = 110.0

func _ready() -> void:
# 1. Arrancamos la animación al cargar la escena
if $AnimationPlayer:
$AnimationPlayer.play("MakeHuman default skeleton|ESPASMADA")
# 2. Creamos un temporizador que espere los segundos fijados y luego pare la animación
await get_tree().create_timer(tiempo_duracion).timeout
# 3. Pasados los segundos, detenemos la animación
if $AnimationPlayer:
$AnimationPlayer.stop()












extends OmniLight3D

@export_group("Configuración de Balanceo Circular")
@export var speed: float = 22.0         # Velocidad del giro circular
@export var radius: float = 21.5        # Radio máximo del círculo (en metros)
@export var pulse_speed: float = 21.0   # Velocidad con la que el círculo se amplía y reduce

var initial_position: Vector3
var time_passed: float = 0.0

func _ready() -> void:
initial_position = position

func _process(delta: float) -> void:
time_passed += delta
# Calculamos la variación del tamaño (un factor que oscila entre 0.2 y 1.0 para que no pase por cero absoluto)
var current_radius := radius * (0.6 + 0.4 * sin(time_passed * pulse_speed))
# Usamos cos() para el eje X y sin() para el eje Z para formar el movimiento circular
var offset_x := cos(time_passed * speed) * current_radius
var offset_z := sin(time_passed * speed) * current_radius
# Aplicamos el movimiento en los ejes X y Z manteniendo la Y inicial
position = initial_position + Vector3(offset_x, 0.0, offset_z)
















extends Node

func _unhandled_input(event: InputEvent) -> void:
if event.is_action_pressed("ui_cancel") or (event is InputEventKey and event.pressed and event.keycode == KEY_ESCAPE):
get_tree().quit()






















extends Area3D

# Nodos exportados para arrastrar desde la escena al Inspector
@export var reproductor_audio: AudioStreamPlayer3D
@export var particulas_sangre1: CPUParticles3D
@export var particulas_sangre2: CPUParticles3D
@export var particulas_sangre3: CPUParticles3D 
@export var particulas_sangre4: CPUParticles3D # Puedes añadir particulas_sangre4, etc.
@export var particulas_sangre5: CPUParticles3D

func _ready() -> void:
# Nos aseguramos de apagar todas al arrancar el juego
_apagar_particulas()

body_entered.connect(_on_entrada)
body_exited.connect(_on_salida)
area_entered.connect(_on_entrada)
area_exited.connect(_on_salida)

func _on_entrada(_body_or_area) -> void:
# 1. SONIDO EN ON
if reproductor_audio:
if not reproductor_audio.playing:
reproductor_audio.play()
else:
reproductor_audio.stream_paused = false
# 2. PARTÍCULAS EN ON (Entra en la zona)
_encender_particulas()

func _on_salida(_body_or_area) -> void:
# 1. SONIDO EN OFF
if reproductor_audio:
reproductor_audio.stream_paused = true
# 2. PARTÍCULAS EN OFF (Sale de la zona)
_apagar_particulas()


# --- BLOQUE DE ENCENDIDO ---
func _encender_particulas() -> void:
if particulas_sangre1:
particulas_sangre1.emitting = true
if particulas_sangre2:
particulas_sangre2.emitting = true
if particulas_sangre3:
particulas_sangre3.emitting = true
if particulas_sangre4:
particulas_sangre4.emitting = true
if particulas_sangre5:
particulas_sangre5.emitting = true

# --- BLOQUE DE APAGADO ---
func _apagar_particulas() -> void:
if particulas_sangre1:
particulas_sangre1.emitting = false
if particulas_sangre2:
particulas_sangre2.emitting = false
if particulas_sangre3:
particulas_sangre3.emitting = false
if particulas_sangre4:
particulas_sangre4.emitting = false
if particulas_sangre5:
particulas_sangre5.emitting = false




The reflection the evil one.;








Añado este articulo que no es mio pero me gusta muchisimo y encaja en mi aficion a estos ultimos juegos y a mi imaginacion y capacidad de trabajo............


«El talento es más barato que la sal de mesa; lo que separa al individuo con talento del exitoso es el trabajo duro»

Una de sus frases más conocidas resume precisamente esta forma de entender el éxito: «El talento es más barato que la sal de mesa; lo que separa al individuo con talento del exitoso es el trabajo duro». Para Stephen King, una persona puede contar con unas capacidades extraordinarias, pero si no las desarrolla mediante constancia, esfuerzo y disciplina, difícilmente alcanzará sus. objetivos