mirror of
				https://github.com/JHDev2006/Super-Mario-Bros.-Remastered-Public.git
				synced 2025-11-04 08:35:41 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			150 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			GDScript
		
	
	
	
	
	
			
		
		
	
	
			150 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			GDScript
		
	
	
	
	
	
@tool
 | 
						|
class_name ModToolStore
 | 
						|
extends Node
 | 
						|
 | 
						|
static func get_config_path() -> String:
 | 
						|
	var exe_dir = OS.get_executable_path().get_base_dir()
 | 
						|
	var portable_flag = exe_dir.path_join("portable.txt")
 | 
						|
	if FileAccess.file_exists(portable_flag):
 | 
						|
		return exe_dir.path_join("config")
 | 
						|
	else:
 | 
						|
		return "user://"
 | 
						|
 | 
						|
# Global store for all Data the ModTool requires.
 | 
						|
static var config_path = get_config_path()
 | 
						|
static var PATH_SAVE_FILE := config_path.path_join("mod-tool-plugin-save.json")
 | 
						|
const PATH_TEMPLATES_DIR := "res://addons/mod_tool/templates/"
 | 
						|
 | 
						|
var editor_plugin: EditorPlugin
 | 
						|
var editor_file_system: EditorFileSystem
 | 
						|
var editor_base_control: Control
 | 
						|
 | 
						|
var name_mod_dir := "":
 | 
						|
	set = set_name_mod_dir
 | 
						|
var path_mod_dir := ""
 | 
						|
var path_current_template_dir := "res://addons/mod_tool/templates/default/"
 | 
						|
var path_export_dir := "":
 | 
						|
	set = set_path_export_dir
 | 
						|
var path_temp_dir := ""
 | 
						|
var path_manifest := ""
 | 
						|
var path_global_export_dir := ""
 | 
						|
var path_global_project_dir := ""
 | 
						|
var path_global_temp_dir := ""
 | 
						|
var path_addon_dir := "res://addons/mod_tool/"
 | 
						|
var path_global_addon_dir := ""
 | 
						|
var path_global_seven_zip := ""
 | 
						|
var path_global_seven_zip_base_dir := ""
 | 
						|
var path_global_final_zip := ""
 | 
						|
var excluded_file_extensions: PackedStringArray = [".csv.import"]
 | 
						|
var path_mod_files := []
 | 
						|
var path_script_backup_dir := "res://addons/mod_tool/.script_backup"
 | 
						|
var current_os := ""
 | 
						|
var is_seven_zip_installed := true
 | 
						|
var pending_reloads: Array[String] = []
 | 
						|
var is_hook_generation_done := false
 | 
						|
var hooked_scripts := {}
 | 
						|
 | 
						|
# ModManifest instance
 | 
						|
var manifest_data : ModManifest
 | 
						|
 | 
						|
var mod_hook_preprocessor := _ModLoaderModHookPreProcessor.new()
 | 
						|
 | 
						|
 | 
						|
func _ready() -> void:
 | 
						|
	load_store()
 | 
						|
 | 
						|
	if not DirAccess.dir_exists_absolute(path_script_backup_dir):
 | 
						|
		create_script_backup_dir()
 | 
						|
 | 
						|
 | 
						|
func _exit_tree() -> void:
 | 
						|
	save_store()
 | 
						|
 | 
						|
 | 
						|
func set_name_mod_dir(new_name_mod_dir: String) -> void:
 | 
						|
	name_mod_dir = new_name_mod_dir
 | 
						|
	update_paths(new_name_mod_dir)
 | 
						|
 | 
						|
 | 
						|
func set_path_export_dir(new_path_export_dir: String) -> void:
 | 
						|
	path_export_dir = new_path_export_dir
 | 
						|
	path_global_export_dir = ProjectSettings.globalize_path(path_export_dir)
 | 
						|
	path_global_final_zip =  "%s/%s.zip" % [path_global_export_dir, name_mod_dir]
 | 
						|
 | 
						|
 | 
						|
func init(store: Dictionary) -> void:
 | 
						|
	path_global_project_dir = ProjectSettings.globalize_path(_ModLoaderPath.get_local_folder_dir())
 | 
						|
	path_global_addon_dir = path_global_project_dir + "addons/mod_tool/"
 | 
						|
	if OS.has_feature("windows"):
 | 
						|
		current_os = "windows"
 | 
						|
	elif OS.has_feature("macos"):
 | 
						|
		current_os = "osx"
 | 
						|
	elif OS.has_feature("linux"):
 | 
						|
		current_os = "x11"
 | 
						|
	else:
 | 
						|
		ModToolUtils.output_error("OS currently not supported. Please open an issue on GitHub")
 | 
						|
 | 
						|
	name_mod_dir = store.name_mod_dir
 | 
						|
	path_mod_dir = "res://mods-unpacked/" + store.name_mod_dir
 | 
						|
	path_current_template_dir = store.path_current_template_dir
 | 
						|
	path_export_dir = store.path_export_dir
 | 
						|
	path_global_export_dir = ProjectSettings.globalize_path(path_export_dir)
 | 
						|
	path_temp_dir = "user://temp/" + store.name_mod_dir
 | 
						|
	path_manifest = path_mod_dir + "/manifest.json"
 | 
						|
	path_global_temp_dir = ProjectSettings.globalize_path(path_temp_dir)
 | 
						|
 | 
						|
	path_global_final_zip = "%s/%s.zip" % [path_global_export_dir, name_mod_dir]
 | 
						|
	excluded_file_extensions = []
 | 
						|
	is_hook_generation_done = store.is_hook_generation_done
 | 
						|
	hooked_scripts = JSON.parse_string(store.hooked_scripts)
 | 
						|
	mod_hook_preprocessor.hashmap = JSON.parse_string(store.mod_hook_preprocessor_hashmap)
 | 
						|
 | 
						|
 | 
						|
func update_paths(new_name_mod_dir: String) -> void:
 | 
						|
	path_mod_dir = "res://mods-unpacked/" + new_name_mod_dir
 | 
						|
	path_temp_dir = config_path.path_join("temp/" + new_name_mod_dir)
 | 
						|
	path_global_temp_dir = ProjectSettings.globalize_path(path_temp_dir)
 | 
						|
	path_manifest = path_mod_dir + "/manifest.json"
 | 
						|
	path_global_final_zip =  "%s/%s.zip" % [path_global_export_dir, name_mod_dir]
 | 
						|
 | 
						|
 | 
						|
func create_script_backup_dir() -> void:
 | 
						|
	DirAccess.make_dir_recursive_absolute(path_script_backup_dir)
 | 
						|
	FileAccess.open("%s/.gdignore" % path_script_backup_dir, FileAccess.WRITE)
 | 
						|
 | 
						|
 | 
						|
func save_store() -> void:
 | 
						|
	var save_data := {
 | 
						|
		"name_mod_dir": name_mod_dir,
 | 
						|
		"path_mod_dir": path_mod_dir,
 | 
						|
		"path_current_template_dir": path_current_template_dir,
 | 
						|
		"path_export_dir": path_export_dir,
 | 
						|
		"path_global_project_dir": path_global_project_dir,
 | 
						|
		"path_temp_dir": path_temp_dir,
 | 
						|
		"excluded_file_extensions": excluded_file_extensions,
 | 
						|
		"is_hook_generation_done": is_hook_generation_done,
 | 
						|
		"hooked_scripts": JSON.stringify(hooked_scripts),
 | 
						|
		"mod_hook_preprocessor_hashmap": JSON.stringify(mod_hook_preprocessor.hashmap)
 | 
						|
	}
 | 
						|
 | 
						|
	var file := FileAccess.open(PATH_SAVE_FILE, FileAccess.WRITE)
 | 
						|
	if not file:
 | 
						|
		ModToolUtils.output_error(str(FileAccess.get_open_error()))
 | 
						|
	file.store_string(JSON.stringify(save_data))
 | 
						|
	file.close()
 | 
						|
 | 
						|
 | 
						|
# NOTE: Check if mod_dir still exists when loading
 | 
						|
func load_store() -> void:
 | 
						|
	if not FileAccess.file_exists(PATH_SAVE_FILE):
 | 
						|
		return
 | 
						|
 | 
						|
	var file := FileAccess.open(PATH_SAVE_FILE, FileAccess.READ)
 | 
						|
	if not file:
 | 
						|
		ModToolUtils.output_error(str(FileAccess.get_open_error()))
 | 
						|
	var content := file.get_as_text()
 | 
						|
 | 
						|
	var test_json_conv = JSON.new()
 | 
						|
	test_json_conv.parse(content)
 | 
						|
	init(test_json_conv.data)
 |