Files
game/scripts/autoload/DownloadManager.gd
T

100 lines
3.5 KiB
GDScript
Raw Normal View History

extends Node
2026-02-09 13:34:01 +08:00
var uuid: String = "source"
2026-01-21 14:53:30 +08:00
func create_file(file_path: String) -> void:
var base_dir = file_path.get_base_dir()
if !DirAccess.dir_exists_absolute(base_dir):
DirAccess.make_dir_recursive_absolute(base_dir)
2026-01-21 17:03:59 +08:00
var file = FileAccess.open(file_path, FileAccess.WRITE)
file.close()
2026-01-21 14:53:30 +08:00
func download_file(server_path: String, local_path: String) -> void:
2026-01-21 14:53:30 +08:00
var http = HTTPRequest.new()
add_child(http)
2026-01-21 17:03:59 +08:00
var file_path = local_path
2026-01-21 14:53:30 +08:00
if !FileAccess.file_exists(file_path):
create_file(file_path)
2026-01-21 17:03:59 +08:00
http.download_file = file_path
2026-01-21 14:53:30 +08:00
http.request(server_path)
func get_uuid() -> void:
var index_file = FileAccess.open("user://download/temp/index.json", FileAccess.READ)
var index_text = index_file.get_as_text()
var content = JSON.parse_string(index_text)
index_file.close()
uuid = content["uuid"]
2026-01-21 17:03:59 +08:00
func download_defs(type: String, origin: String) -> void:
var list_file = FileAccess.open("user://download/%s/%ss/list.json" % [uuid, type], FileAccess.READ)
2026-01-21 17:03:59 +08:00
var list_text = list_file.get_as_text()
var list = JSON.parse_string(list_text)
2026-01-21 17:19:15 +08:00
list_file.close()
2026-01-21 17:03:59 +08:00
if !list:
return
for k in list:
var filename = list[k]
download_file("%s%s/id/%s" % [origin, type, k], "user://download/%s/%ss/%s.json" % [uuid, type, filename])
2026-01-21 17:03:59 +08:00
func download_assets(origin: String) -> void:
var list_file = FileAccess.open("user://download/%s/assets/list.json" % [uuid], FileAccess.READ)
2026-01-21 17:03:59 +08:00
var list_text = list_file.get_as_text()
var list = JSON.parse_string(list_text)
2026-01-21 17:19:15 +08:00
list_file.close()
2026-01-21 17:03:59 +08:00
if !list:
return
for k in list["pics"]:
var filename = list["pics"][k]
download_file("%sasset/pic/%s" % [origin, k], "user://download/%s/assets/pics/%s" % [uuid, filename])
2026-01-21 17:03:59 +08:00
for k in list["sounds"]:
var filename = list["sounds"][k]
download_file("%sasset/sound/%s" % [origin, k], "user://download/%s/assets/sounds/%s" % [uuid, filename])
2026-01-21 17:03:59 +08:00
func download_from_origin() -> int:
2026-01-21 14:53:30 +08:00
var origin = GameManager.data_origin
var http = HTTPRequest.new()
add_child(http)
if origin.substr(0, 4) != "http":
return 1
if http.request(origin) != OK:
return 2
2026-01-21 14:53:30 +08:00
if origin[-1] != "/":
origin = origin + "/"
2026-02-09 13:34:01 +08:00
download_file(origin + "index", "user://download/temp/index.json")
2026-01-21 11:50:43 +08:00
download_file(origin + "card/list", "user://download/%s/cards/list.json" % [uuid])
download_file(origin + "reaction/list", "user://download/%s/reactions/list.json" % [uuid])
download_file(origin + "matter/list", "user://download/%s/matters/list.json" % [uuid])
download_file(origin + "asset/list", "user://download/%s/assets/list.json" % [uuid])
2026-01-21 17:03:59 +08:00
download_defs("card", origin)
download_defs("reaction", origin)
download_defs("matter", origin)
download_assets(origin)
2026-01-21 14:53:30 +08:00
return 0
func load_resource():
var card_file = FileAccess.open("user://download/%s/cards/list.json" % [uuid], FileAccess.READ)
2026-01-21 17:19:15 +08:00
GameManager.card_list = JSON.parse_string(card_file.get_as_text())
card_file.close()
var reaction_file = FileAccess.open("user://download/%s/reactions/list.json" % [uuid], FileAccess.READ)
2026-01-21 17:19:15 +08:00
GameManager.reaction_list = JSON.parse_string(reaction_file.get_as_text())
reaction_file.close()
var matter_file = FileAccess.open("user://download/%s/matters/list.json" % [uuid], FileAccess.READ)
2026-01-21 17:19:15 +08:00
GameManager.matter_list = JSON.parse_string(matter_file.get_as_text())
matter_file.close()
var asset_file = FileAccess.open("user://download/%s/assets/list.json" % [uuid], FileAccess.READ)
2026-01-21 17:19:15 +08:00
var asset_list = JSON.parse_string(asset_file.get_as_text())
GameManager.pic_list = asset_list["pics"]
GameManager.sound_list = asset_list["sounds"]
asset_file.close()