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