83 lines
1.8 KiB
GDScript
83 lines
1.8 KiB
GDScript
extends Node
|
|
class_name DialogicAnimaResources
|
|
|
|
const BASE_PATH: = "res://addons/dialogic/Nodes/Anima/animations/"
|
|
|
|
static func get_animation_script(animation_name:String):
|
|
|
|
|
|
|
|
|
|
var resource_file = get_animation_script_with_path(animation_name)
|
|
if resource_file:
|
|
return load(resource_file).new()
|
|
|
|
printerr("No animation found with name: ", animation_name)
|
|
|
|
return null
|
|
|
|
|
|
static func get_animation_script_with_path(animation_name:String)->String:
|
|
if not animation_name.ends_with(".gd"):
|
|
animation_name += ".gd"
|
|
|
|
animation_name = from_camel_to_snack_case(animation_name)
|
|
|
|
for file_name in get_available_animations():
|
|
if file_name is String and file_name.ends_with(animation_name):
|
|
return file_name
|
|
|
|
return ""
|
|
|
|
|
|
static func get_available_animations()->Array:
|
|
var list = _get_animations_list()
|
|
var filtered: = []
|
|
|
|
for file in list:
|
|
if file.find(".gd.") < 0:
|
|
filtered.push_back(file.replace(".gdc", ".gd"))
|
|
|
|
return filtered
|
|
|
|
|
|
static func _get_animations_list()->Array:
|
|
var files = _get_scripts_in_dir(BASE_PATH)
|
|
var filtered: = []
|
|
|
|
files.sort()
|
|
return files
|
|
|
|
static func _get_scripts_in_dir(path:String, files:Array = [])->Array:
|
|
var dir = Directory.new()
|
|
if dir.open(path) != OK:
|
|
return files
|
|
|
|
dir.list_dir_begin()
|
|
var file_name = dir.get_next()
|
|
|
|
while file_name != "":
|
|
if file_name != "." and file_name != "..":
|
|
if dir.current_is_dir():
|
|
_get_scripts_in_dir(path + file_name + "/", files)
|
|
else :
|
|
files.push_back(path + file_name)
|
|
|
|
file_name = dir.get_next()
|
|
|
|
return files
|
|
|
|
static func from_camel_to_snack_case(string:String)->String:
|
|
var result = PoolStringArray()
|
|
var is_first_char = true
|
|
|
|
for character in string:
|
|
if character == character.to_lower() or is_first_char:
|
|
result.append(character.to_lower())
|
|
else :
|
|
result.append("_" + character.to_lower())
|
|
|
|
is_first_char = false
|
|
|
|
return result.join("").replace(" ", "_")
|
|
|