extends Node2D

# Списки путей к изображениям ассетов
var hilts = PackedStringArray()
var blades = PackedStringArray()
var points = PackedStringArray()

# Списки частей названий для мечей
var adjectives = ["стальной", "деревянный", "острый", "магический", "древний", "светящийся", "темный",
                  "обугленный", "ледяной", "огненный", "электрический", "токсичный", "заговоренный", "проклятый"]
var nouns = ["рыцарский меч", "охотничий клинок", "варварский меч", "эльфийский клинок", "гоблинский меч", 
              "драконий клинок", "теневой меч", "сокрушитель", "клинок мести", "меч правосудия", "семислойный клинок",
              "чарующий меч", "клинок света", "меч рассвета", "меч бури"]
# Добавляем список префиксов для названий мечей с соответствующими цветами
var prefixes = [
    {"name": "Обычный", "color": Color(1, 1, 1)},      # Белый
    {"name": "Хороший", "color": Color(0, 1, 0)},      # Зеленый
    {"name": "Редкий", "color": Color(0, 0, 1)},       # Синий
    {"name": "Эпический", "color": Color(0.5, 0, 0.5)},# Фиолетовый
    {"name": "Легендарный", "color": Color(1, 0.84, 0)}# Золотой
]

# Функция для загрузки всех файлов из заданной папки
func load_assets_from_dir(dir_path: String) -> PackedStringArray:
    var dir = DirAccess.open(dir_path)
    var paths = PackedStringArray()

    if dir:
        dir.list_dir_begin()
        var file_name = dir.get_next()
        while file_name:
            if file_name.ends_with(".png"):
                paths.push_back(dir_path + "/" + file_name)
            file_name = dir.get_next()
        dir.list_dir_end()
    
    return paths

# Функция загрузки случайного изображения из списка
func load_random_image(paths: PackedStringArray) -> Texture2D:
    var path = paths[randi() % paths.size()]
    return ResourceLoader.load(path) as Texture2D

# Функция получения позиции для частей меча
func get_part_position(part_name: String) -> Vector2:
    match part_name:
        "hilt":
            return Vector2(0, 0)
        "blade":
            return Vector2(0, -24)
        "point":
            return Vector2(0, -48)
        _:
            return Vector2(0, 0)

# Функция генерации меча
func generate_sword():
    # Создание новых спрайтов для каждой части меча
    var hilt_sprite = Sprite2D.new()
    var blade_sprite = Sprite2D.new()
    var point_sprite = Sprite2D.new()
    
    # Загрузка случайных изображений
    hilt_sprite.texture = load_random_image(hilts)
    blade_sprite.texture = load_random_image(blades)
    point_sprite.texture = load_random_image(points)
    
    # Создание нового узла меча
    var sword = RigidBody2D.new()

    # Задание позиций деталей
    hilt_sprite.position = get_part_position("hilt")
    blade_sprite.position = get_part_position("blade")
    point_sprite.position = get_part_position("point")

    # Добавление деталей к мечу
    sword.add_child(hilt_sprite)
    sword.add_child(blade_sprite)
    sword.add_child(point_sprite)
    
    # Добавление общей коллизии ко всему мечу
    add_collision_to_sword(sword, hilt_sprite, blade_sprite, point_sprite)
    
    # Добавление меча к сцене
    add_child(sword)

    # Генерация и вывод названия меча
    var sword_data = generate_sword_name()
    var sword_generated_name = sword_data["generated_name"]
    var sword_color = sword_data["color"]

    # Печать информации для отладки
    print("Generated Sword Name: ", sword_generated_name)
    print("Sword Color: ", sword_color)

    # Добавление текстового узла для отображения названия
    var label = RichTextLabel.new()
    label.bbcode_enabled = true
    label.bbcode_text = "[color=" + str(sword_color) + "]" + sword_generated_name + "[/color]"
    label.position = Vector2(100, 100)  # Примерная позиция; вы можете изменить её
    label.set_v_size_flags(Control.SIZE_EXPAND_FILL)
    label.set_h_size_flags(Control.SIZE_EXPAND_FILL)

    add_child(label)

# Функция генерации названия меча
func generate_sword_name() -> Dictionary:
    var prefix_data = prefixes[randi() % prefixes.size()]
    var prefix = prefix_data["name"]
    var color = prefix_data["color"]
    var adjective = adjectives[randi() % adjectives.size()]
    var noun = nouns[randi() % nouns.size()]
    var generated_name = prefix + " " + adjective + " " + noun
    return {"generated_name": generated_name, "color": color}

# Функция добавления коллизии ко всему мечу
func add_collision_to_sword(sword: RigidBody2D, hilt_sprite: Sprite2D, blade_sprite: Sprite2D, point_sprite: Sprite2D):
    var collision_shape = CollisionShape2D.new()
    var shape = RectangleShape2D.new()
    
    var min_bound = Vector2(999999, 999999)
    var max_bound = Vector2(-999999, -999999)
    
    # Определение границ коллизии на основе позиций и размеров текстур
    var sprites = [hilt_sprite, blade_sprite, point_sprite]
    for sprite in sprites:
        var sprite_pos = sprite.position
        var sprite_size = sprite.texture.get_size() / 2
        min_bound.x = min(min_bound.x, sprite_pos.x - sprite_size.x)
        min_bound.y = min(min_bound.y, sprite_pos.y - sprite_size.y)
        max_bound.x = max(max_bound.x, sprite_pos.x + sprite_size.x)
        max_bound.y = max(max_bound.y, sprite_pos.y + sprite_size.y)
    
    shape.extents = (max_bound - min_bound) / 2
    collision_shape.shape = shape
    collision_shape.position = min_bound + shape.extents
    
    sword.add_child(collision_shape)

# Функция _ready вызывается при добавлении узла в сцену
func _ready():
    randomize() # Инициализация генератора случайных чисел
    
    # Загрузка ассетов из папок
    hilts = load_assets_from_dir("res://assets/hilts")
    blades = load_assets_from_dir("res://assets/blades")
    points = load_assets_from_dir("res://assets/points")
    
    generate_sword()

# Функция _physics_process обновляется на случай если вас требуется
func _physics_process(_delta: float):
    # Если у вас нет кода который использует delta, вы можете оставить это пустым
    pass
мне надо чтобы цветное имя отображалось на сцене над мечём