mirror of
				https://github.com/JHDev2006/Super-Mario-Bros.-Remastered-Public.git
				synced 2025-10-26 09:20:49 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			93 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			GDScript
		
	
	
	
	
	
			
		
		
	
	
			93 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			GDScript
		
	
	
	
	
	
| class_name _ModLoaderCache
 | |
| extends RefCounted
 | |
| 
 | |
| 
 | |
| # This Class provides methods for caching data.
 | |
| 
 | |
| static var CACHE_FILE_PATH = get_cache_path()
 | |
| const LOG_NAME = "ModLoader:Cache"
 | |
| 
 | |
| static func get_cache_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/mod_loader_cache.json")
 | |
| 	else:
 | |
| 		return "user://mod_loader_cache.json"
 | |
| 
 | |
| # ModLoaderStore is passed as parameter so the cache data can be loaded on ModLoaderStore._init()
 | |
| static func init_cache(_ModLoaderStore) -> void:
 | |
| 	if not _ModLoaderFile.file_exists(CACHE_FILE_PATH):
 | |
| 		_init_cache_file()
 | |
| 		return
 | |
| 
 | |
| 	_load_file(_ModLoaderStore)
 | |
| 
 | |
| 
 | |
| # Adds data to the cache
 | |
| static func add_data(key: String, data: Dictionary) -> Dictionary:
 | |
| 	if ModLoaderStore.cache.has(key):
 | |
| 		ModLoaderLog.error("key: \"%s\" already exists in \"ModLoaderStore.cache\"" % key, LOG_NAME)
 | |
| 		return {}
 | |
| 
 | |
| 	ModLoaderStore.cache[key] = data
 | |
| 
 | |
| 	return ModLoaderStore.cache[key]
 | |
| 
 | |
| 
 | |
| # Get data from a specific key
 | |
| static func get_data(key: String) -> Dictionary:
 | |
| 	if not ModLoaderStore.cache.has(key):
 | |
| 		ModLoaderLog.info("key: \"%s\" not found in \"ModLoaderStore.cache\"" % key, LOG_NAME)
 | |
| 		return {}
 | |
| 
 | |
| 	return ModLoaderStore.cache[key]
 | |
| 
 | |
| 
 | |
| # Get the entire cache dictionary
 | |
| static func get_cache() -> Dictionary:
 | |
| 	return ModLoaderStore.cache
 | |
| 
 | |
| 
 | |
| static func has_key(key: String) -> bool:
 | |
| 	return ModLoaderStore.cache.has(key)
 | |
| 
 | |
| 
 | |
| # Updates or adds data to the cache
 | |
| static func update_data(key: String, data: Dictionary) -> Dictionary:
 | |
| 	# If the key exists
 | |
| 	if has_key(key):
 | |
| 		# Update the data
 | |
| 		ModLoaderStore.cache[key].merge(data, true)
 | |
| 	else:
 | |
| 		ModLoaderLog.info("key: \"%s\" not found in \"ModLoaderStore.cache\" added as new data instead." % key, LOG_NAME, true)
 | |
| 		# Else add new data
 | |
| 		add_data(key, data)
 | |
| 
 | |
| 	return ModLoaderStore.cache[key]
 | |
| 
 | |
| 
 | |
| # Remove data from the cache
 | |
| static func remove_data(key: String) -> void:
 | |
| 	if not ModLoaderStore.cache.has(key):
 | |
| 		ModLoaderLog.error("key: \"%s\" not found in \"ModLoaderStore.cache\"" % key, LOG_NAME)
 | |
| 		return
 | |
| 
 | |
| 	ModLoaderStore.cache.erase(key)
 | |
| 
 | |
| 
 | |
| # Save the cache to the cache file
 | |
| static func save_to_file() -> void:
 | |
| 	_ModLoaderFile.save_dictionary_to_json_file(ModLoaderStore.cache, CACHE_FILE_PATH)
 | |
| 
 | |
| 
 | |
| # Load the cache file data and store it in ModLoaderStore
 | |
| # ModLoaderStore is passed as parameter so the cache data can be loaded on ModLoaderStore._init()
 | |
| static func _load_file(_ModLoaderStore = ModLoaderStore) -> void:
 | |
| 	_ModLoaderStore.cache = _ModLoaderFile.get_json_as_dict(CACHE_FILE_PATH)
 | |
| 
 | |
| 
 | |
| # Create an empty cache file
 | |
| static func _init_cache_file() -> void:
 | |
| 	_ModLoaderFile.save_dictionary_to_json_file({}, CACHE_FILE_PATH)
 | 
