extends Node2D

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

# Списки частей названий для мечей
var adjectives = ["стальной", "деревянный", "острый", "магический", "древний", "светящийся", "темный",
				  "обугленный", "ледяной", "огненный", "электрический", "токсичный", "заговоренный", "проклятый"]
var nouns = ["рыцарский меч", "охотничий клинок", "варварский меч", "эльфийский клинок", "гоблинский меч", 
			  "драконий клинок", "теневой меч", "сокрушитель", "клинок мести", "меч правосудия", "семислойный клинок",
			  "чарующий меч", "клинок света", "меч рассвета", "меч бури"]

# Функция для загрузки всех файлов из заданной папки
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_name = generate_sword_name()
	print(sword_name)

# Функция генерации названия меча
func generate_sword_name() -> String:
	return adjectives[randi() % adjectives.size()] + " " + nouns[randi() % nouns.size()]

# Функция добавления коллизии ко всему мечу
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
сделай чтобы названия были как в рпг играх "обычный, хороший, легендарный и т.д