Add resource loading
This commit is contained in:
parent
f90d854cea
commit
dcb30cfac8
1 changed files with 67 additions and 0 deletions
|
@ -76,6 +76,73 @@ func remove_all_slides() -> void:
|
|||
for scene in sms.get_scene_collection_list(CoreTypes.SceneType.MAIN):
|
||||
sms.remove_scene(scene.name)
|
||||
|
||||
# +++ resource loading +++
|
||||
func load_resources(list: Dictionary) -> Dictionary:
|
||||
logger.verb("Loading resources: " + str(list.keys()))
|
||||
|
||||
var output: Dictionary = {}
|
||||
|
||||
for resource in list:
|
||||
output.merge({ resource: await load_resource(list[resource]) })
|
||||
|
||||
return output
|
||||
|
||||
func load_resource(path: String):
|
||||
logger.diag("Loading resource located at " + path)
|
||||
|
||||
var load_path: String
|
||||
|
||||
if presenloader.is_file:
|
||||
# Check if file exists
|
||||
if !presenloader.reader.file_exists(path):
|
||||
await logger.crash(core.misc.stringify_variables("File path %path% could not be located inside presentation archive", { "path": path }))
|
||||
|
||||
# Write into temporary file
|
||||
presenloader.write_temporary_file(presenloader.reader.read_file(path))
|
||||
|
||||
# Update 'load_path'
|
||||
load_path = presenloader.temporary_file
|
||||
else:
|
||||
# Check if file exists
|
||||
if !FileAccess.file_exists(presenloader.path + "/" + path):
|
||||
await logger.crash(core.misc.stringify_variables("File path %path% could not be located inside presentation directory (full path is %path_full%)", { "path": path, "path_full": presenloader.path + "/" + path }))
|
||||
|
||||
# Update 'load_path'
|
||||
load_path = presenloader.path + "/" + path
|
||||
|
||||
# Load resource from temporary file
|
||||
var resource = _load_resource_format_loader(load_path, path)
|
||||
|
||||
# Check if loading failed
|
||||
if resource == null:
|
||||
await logger.crash("Resource could not be read")
|
||||
|
||||
# Return resource
|
||||
return resource
|
||||
|
||||
func _load_resource_format_loader(load_path: String, path: String):
|
||||
var resource = null
|
||||
|
||||
if path.ends_with(".tscn"):
|
||||
logger.diag("Using format loader for PackedScene")
|
||||
resource = ResourceLoader.load(load_path)
|
||||
|
||||
# Try to instantiate
|
||||
if resource.can_instantiate(): resource = resource.instantiate()
|
||||
else: resource = Control.new() # does not cause runtime errors
|
||||
elif path.ends_with(".ttf") or path.ends_with(".otf") or path.ends_with(".woff") or path.ends_with(".woff2"):
|
||||
logger.diag("Using format loader for FontFile")
|
||||
resource = FontFile.new()
|
||||
resource.load_dynamic_font(load_path)
|
||||
elif path.ends_with(".png") or path.ends_with(".jpg") or path.ends_with(".svg") or path.ends_with(".ktx") or path.ends_with(".tga") or path.ends_with(".webp"):
|
||||
logger.diag("Using format loader for Image")
|
||||
resource = Image.load_from_file(load_path)
|
||||
else:
|
||||
logger.diag("Using generic format loader")
|
||||
resource = ResourceLoader.load(load_path)
|
||||
|
||||
return resource
|
||||
|
||||
# +++ etc +++
|
||||
func get_source_path(path: String) -> String:
|
||||
return "<presentation root>/" + path
|
||||
|
|
Loading…
Reference in a new issue