ResourcePackLoader.gd 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. extends Node
  2. const RESOURCE_PACK_CONTAINER = preload("uid://lggi3b4310yl")
  3. var resource_packs := []
  4. var containers := []
  5. func _ready() -> void:
  6. get_resource_packs()
  7. func open_folder() -> void:
  8. OS.shell_show_in_file_manager(ProjectSettings.globalize_path("user://resource_packs"), true)
  9. func get_resource_packs() -> void:
  10. for i in containers:
  11. get_parent().options.erase(i)
  12. i.queue_free()
  13. containers = []
  14. resource_packs = []
  15. for i in DirAccess.get_directories_at("user://resource_packs"):
  16. resource_packs.append(i)
  17. for i in resource_packs:
  18. var pack_info_path = "user://resource_packs/" + i + "/" + "pack_info.json"
  19. if FileAccess.file_exists(pack_info_path) and i != Global.ROM_PACK_NAME:
  20. create_container("user://resource_packs/" + i)
  21. func create_container(resource_pack := "") -> void:
  22. var container = RESOURCE_PACK_CONTAINER.instantiate()
  23. container.pack_json = JSON.parse_string(FileAccess.open(resource_pack + "/pack_info.json", FileAccess.READ).get_as_text())
  24. if FileAccess.file_exists(resource_pack + "/config.json"):
  25. container.config = JSON.parse_string(FileAccess.open(resource_pack + "/config.json", FileAccess.READ).get_as_text())
  26. container.config_path = resource_pack + "/config.json"
  27. if FileAccess.file_exists(resource_pack + "/icon.png"):
  28. var image = Image.new()
  29. image.load(resource_pack + "/icon.png")
  30. container.icon = ImageTexture.create_from_image(image)
  31. elif FileAccess.file_exists(resource_pack + "/icon.gif"):
  32. container.icon = GifManager.animated_texture_from_file(resource_pack + "/icon.gif")
  33. container.pack_name = resource_pack.replace("user://resource_packs/", "")
  34. $"../ScrollContainer/VBoxContainer".add_child(container)
  35. containers.append(container)
  36. container.add_to_group("Options")
  37. container.open_config.connect(owner.open_pack_config_menu)
  38. get_parent().options.append(container)