extends Node2D

# --- 可配置参数 ---
@export var rain_count = 200
@export var fall_speed_min = 150.0
@export var fall_speed_max = 300.0
@export var rain_length_min = 10
@export var rain_length_max = 25
@export var font_size = 20

# --- 内部变量 ---
var screen_size: Vector2
var characters: PackedStringArray
var rain_labels: Array[Label]

func _ready():
	screen_size = get_viewport_rect().size
	
	# 【最终修正】使用一个不包含日文的纯代码字符串作为字符库
	var char_string = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()_+-=[]{}|;':,./<>?"
	characters = char_string.split("")

	create_rain_labels()

func _process(delta):
	for label in rain_labels:
		label.position.y += label.get_meta("speed") * delta
		
		var current_text = label.text
		if not current_text.is_empty():
			label.text = current_text.substr(0, current_text.length() - 1) + characters[randi() % characters.size()]
		
		if label.position.y > screen_size.y + label.size.y:
			reset_label(label)

func create_rain_labels():
	for i in range(rain_count):
		var label = Label.new()
		label.theme = load("res://assets/main_theme.tres")
		label.add_theme_font_size_override("font_size", font_size)
		
		reset_label(label)
		
		add_child(label)
		rain_labels.append(label)

func reset_label(label: Label):
	label.position.x = randf_range(0, screen_size.x)
	label.position.y = -randf_range(100, 400)
	
	label.set_meta("speed", randf_range(fall_speed_min, fall_speed_max))
	
	var rain_length = randi_range(rain_length_min, rain_length_max)
	var new_text = ""
	for i in range(rain_length):
		new_text += characters[randi() % characters.size()] + "\n"
	
	label.text = new_text
	
	label.modulate = Color.WHITE
	label.add_theme_color_override("font_color", Color("#00FF00"))