mirror of
https://github.com/JHDev2006/Super-Mario-Bros.-Remastered-Public.git
synced 2025-10-22 07:28:14 +00:00
84 lines
2.6 KiB
GDScript
84 lines
2.6 KiB
GDScript
extends VBoxContainer
|
|
|
|
signal level_selected(container: CustomLevelContainer)
|
|
|
|
const CUSTOM_LEVEL_CONTAINER = preload("uid://dt20tjug8m6oh")
|
|
|
|
const base64_charset := "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
|
|
|
|
signal closed
|
|
|
|
var containers := []
|
|
|
|
var selected_lvl_idx := -1
|
|
|
|
func open(refresh_list := true) -> void:
|
|
show()
|
|
if refresh_list:
|
|
refresh()
|
|
if selected_lvl_idx >= 0:
|
|
%LevelContainers.get_child(selected_lvl_idx).grab_focus()
|
|
else:
|
|
$TopBit/Button.grab_focus()
|
|
await get_tree().process_frame
|
|
set_process(true)
|
|
|
|
func open_folder() -> void:
|
|
var custom_level_path = Global.config_path.path_join("custom_levels")
|
|
OS.shell_show_in_file_manager(ProjectSettings.globalize_path(custom_level_path))
|
|
|
|
func _process(_delta: float) -> void:
|
|
if Input.is_action_just_pressed("ui_back"):
|
|
closed.emit()
|
|
|
|
func close() -> void:
|
|
hide()
|
|
set_process(false)
|
|
|
|
func refresh() -> void:
|
|
%LevelContainers.get_node("Label").show()
|
|
for i in %LevelContainers.get_children():
|
|
if i is CustomLevelContainer:
|
|
i.queue_free()
|
|
containers.clear()
|
|
get_levels(Global.config_path.path_join("custom_levels"))
|
|
get_levels(Global.config_path.path_join("custom_levels/downloaded"))
|
|
|
|
func get_levels(path : String = "") -> void:
|
|
if path == "":
|
|
path = Global.config_path.path_join("custom_levels")
|
|
var idx := 0
|
|
for i in DirAccess.get_files_at(path):
|
|
if i.contains(".lvl") == false:
|
|
continue
|
|
%LevelContainers.get_node("Label").hide()
|
|
var container = CUSTOM_LEVEL_CONTAINER.instantiate()
|
|
var file_path = path + "/" + i
|
|
var file = FileAccess.open(file_path, FileAccess.READ)
|
|
var json = JSON.parse_string(file.get_as_text())
|
|
file.close()
|
|
var data = json["Levels"][0]["Data"].split("=")
|
|
var info = json["Info"]
|
|
container.is_downloaded = path.contains("downloaded")
|
|
if container.is_downloaded:
|
|
container.level_id = file_path.get_file().replace(".lvl", "")
|
|
container.level_name = info["Name"]
|
|
container.level_author = info["Author"]
|
|
container.level_desc = info["Description"]
|
|
container.idx = idx
|
|
container.file_path = file_path
|
|
container.level_theme = Level.THEME_IDXS[base64_charset.find(data[0])]
|
|
container.level_time = base64_charset.find(data[1])
|
|
container.game_style = Global.CAMPAIGNS[base64_charset.find(data[3])]
|
|
container.selected.connect(container_selected)
|
|
containers.append(container)
|
|
print(data)
|
|
if info.has("Difficulty"):
|
|
container.difficulty = info["Difficulty"]
|
|
%LevelContainers.add_child(container)
|
|
idx += 1
|
|
|
|
func container_selected(container: CustomLevelContainer) -> void:
|
|
level_selected.emit(container)
|
|
selected_lvl_idx = container.get_index()
|