extends Node2D

# Списки путей к изображениям ассетов
var hilts = PackedStringArray()
var blades = PackedStringArray()
var points = PackedStringArray()
var name_1 = ["стальной","варварский","охотничий","пуканорвущий","зверский","оркский","сильный"]
var name_2 = ["убийственый","острый","скрытный"]

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

# Функция добавления коллизии ко всему мечу
func add_collision_to_sword(sword: Node2D, hilt_sprite: Sprite2D, blade_sprite: Sprite2D, point_sprite: Sprite2D):
	var collision_shape = CollisionShape2D.new()
	var shape = RectangleShape2D.new()
	
	var min = Vector2(999999, 999999)
	var max = 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.x = min(min.x, sprite_pos.x - sprite_size.x)
		min.y = min(min.y, sprite_pos.y - sprite_size.y)
		max.x = max(max.x, sprite_pos.x + sprite_size.x)
		max.y = max(max.y, sprite_pos.y + sprite_size.y)
	
	shape.extents = (max - min) / 2
	collision_shape.shape = shape
	collision_shape.position = min + shape.extents
	
	sword.add_child(collision_shape)

# Функция _ready вызывается при добавлении узла в сцену
func _ready():
	randomize() # Инициализация генератора случайных чисел
	
	print(name_1[randi() % name_1.size()]," ",name_2[randi()%name_2.size()]," меч")
	
	# Загрузка ассетов из папок
	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()