mirror of
				https://github.com/JHDev2006/Super-Mario-Bros.-Remastered-Public.git
				synced 2025-11-04 08:35:41 +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()
 |