You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
	
	
		
			195 lines
		
	
	
		
			6.7 KiB
		
	
	
	
		
			GDScript
		
	
		
		
			
		
	
	
			195 lines
		
	
	
		
			6.7 KiB
		
	
	
	
		
			GDScript
		
	
| 
											2 years ago
										 | extends Object | ||
|  | 
 | ||
|  | const PLUGIN_BUNDLE_NAME: StringName = "aseprite_importers" | ||
|  | const ASEPRITE_EXECUTABLE_PATH_SETTING_NAME: StringName = PLUGIN_BUNDLE_NAME + "/aseprite_executable_path" | ||
|  | 
 | ||
|  | enum CompressMode { | ||
|  | 	LOSSLESS = 0, | ||
|  | 	LOSSY = 1, | ||
|  | 	VRAM_COMPRESSED = 2, | ||
|  | 	VRAM_UNCOMPRESSED = 3, | ||
|  | 	BASIS_UNIVERSAL = 4, | ||
|  | } | ||
|  | const COMPRESS_MODES_NAMES: PackedStringArray = [ | ||
|  | 	"Lossless", | ||
|  | 	"Lossy", | ||
|  | 	"VRAM Compressed", | ||
|  | 	"VRAM Uncompressed", | ||
|  | 	"Basis Universal", | ||
|  | ] | ||
|  | 
 | ||
|  | # ONLY FOR VRAM_COMPRESSED | ||
|  | enum HdrCompression { | ||
|  | 	DISABLED = 0, | ||
|  | 	OPAQUE_ONLY = 1, | ||
|  | 	ALWAYS = 2, | ||
|  | } | ||
|  | const HDR_COMPRESSION_NAMES: PackedStringArray = [ | ||
|  | 	"Disabled", | ||
|  | 	"Opaque Only", | ||
|  | 	"Always", | ||
|  | ] | ||
|  | 
 | ||
|  | # EXCEPT LOSSLESS | ||
|  | enum NormalMap { | ||
|  | 	DETECT = 0, | ||
|  | 	ENABLE = 1, | ||
|  | 	DISABLED = 2, | ||
|  | } | ||
|  | const NORMAL_MAP_NAMES: PackedStringArray = [ | ||
|  | 	"Detect", | ||
|  | 	"Enable", | ||
|  | 	"Disabled", | ||
|  | ] | ||
|  | 
 | ||
|  | enum ChannelPack { | ||
|  | 	SRGB_FRIENDLY = 0, | ||
|  | 	OPTIMIZED = 1, | ||
|  | } | ||
|  | const CHANNEL_PACK_NAMES: PackedStringArray = [ | ||
|  | 	"sRGB Friendly", | ||
|  | 	"Optimized", | ||
|  | ] | ||
|  | 
 | ||
|  | enum Roughness { | ||
|  | 	DETECT = 0, | ||
|  | 	DISABLED = 1, | ||
|  | 	RED = 2, | ||
|  | 	GREEN = 3, | ||
|  | 	BLUE = 4, | ||
|  | 	ALPHA = 5, | ||
|  | 	GRAY = 6, | ||
|  | } | ||
|  | const ROUGHNESS_NAMES: PackedStringArray = [ | ||
|  | 	"Detect", | ||
|  | 	"Disabled", | ||
|  | 	"Red", | ||
|  | 	"Green", | ||
|  | 	"Blue", | ||
|  | 	"Alpha", | ||
|  | 	"Gray", | ||
|  | ] | ||
|  | 
 | ||
|  | enum CompressMode3D { | ||
|  | 	DISABLED = 0, | ||
|  | 	VRAM_COMPRESSED = 1, | ||
|  | 	BASIS_UNIVERSAL = 2, | ||
|  | } | ||
|  | const COMPRESS_MODE_3D_NAMES: PackedStringArray = [ | ||
|  | 	"Disabled", | ||
|  | 	"VRAM Compressed", | ||
|  | 	"Basis Universal", | ||
|  | ] | ||
|  | 
 | ||
|  | const EMPTY_CALLABLE: Callable = Callable() | ||
|  | 
 | ||
|  | static func create_option( | ||
|  | 	name: String, | ||
|  | 	default_value: Variant, | ||
|  | 	property_hint: PropertyHint = PROPERTY_HINT_NONE, | ||
|  | 	hint_string: String = "", | ||
|  | 	usage: PropertyUsageFlags = PROPERTY_USAGE_NONE, | ||
|  | 	get_is_visible: Callable = EMPTY_CALLABLE | ||
|  | 	) -> Dictionary: | ||
|  | 	var option_data: Dictionary = { | ||
|  | 		name = name, | ||
|  | 		default_value = default_value, | ||
|  | 	} | ||
|  | 	if hint_string: option_data["hint_string"] = hint_string | ||
|  | 	if property_hint: option_data["property_hint"] = property_hint | ||
|  | 	if usage: option_data["usage"] = usage | ||
|  | 	if get_is_visible != EMPTY_CALLABLE: option_data["get_is_visible"] = get_is_visible | ||
|  | 	return option_data | ||
|  | 
 | ||
|  | enum BorderType { | ||
|  | 	None = 0, | ||
|  | 	Transparent = 1, | ||
|  | 	Extruded = 2, | ||
|  | } | ||
|  | const SPRITESHEET_BORDER_TYPES: PackedStringArray = [ | ||
|  | 	"None", | ||
|  | 	"Transparent", | ||
|  | 	"Extruded", | ||
|  | ] | ||
|  | 
 | ||
|  | enum AnimationDirection { | ||
|  | 	FORWARD = 0, | ||
|  | 	REVERSE = 1, | ||
|  | 	PING_PONG = 2, | ||
|  | 	PING_PONG_REVERSE = 3, | ||
|  | } | ||
|  | const ASEPRITE_OUTPUT_ANIMATION_DIRECTIONS: PackedStringArray = [ | ||
|  | 	"forward", "reverse", "pingpong", "pingpong_reverse" ] | ||
|  | const PRESET_OPTIONS_ANIMATION_DIRECTIONS: PackedStringArray = [ | ||
|  | 	"Forward", "Reverse", "Ping-pong", "Ping-pong reverse" ] | ||
|  | 
 | ||
|  | enum SpritesheetLayout { | ||
|  | 	PACKED = 0, | ||
|  | 	BY_ROWS = 1, | ||
|  | 	BY_COLUMNS = 2, | ||
|  | } | ||
|  | const SPRITESHEET_LAYOUTS: PackedStringArray = ["Packed", "By rows", "By columns"] | ||
|  | 
 | ||
|  | const OPTION_SPRITESHEET_BORDER_TYPE: String = "spritesheet/border_type" | ||
|  | const OPTION_SPRITESHEET_TRIM: String = "spritesheet/trim" | ||
|  | const OPTION_SPRITESHEET_IGNORE_EMPTY: String = "spritesheet/ignore_empty" | ||
|  | const OPTION_SPRITESHEET_MERGE_DUPLICATES: String = "spritesheet/merge_duplicates" | ||
|  | const OPTION_SPRITESHEET_LAYOUT: String = "spritesheet/layout" | ||
|  | const OPTION_ANIMATION_DEFAULT_NAME: String = "animation/default/name" | ||
|  | const OPTION_ANIMATION_DEFAULT_DIRECTION: String = "animation/default/direction" | ||
|  | const OPTION_ANIMATION_DEFAULT_REPEAT_COUNT: String = "animation/default/repeat_count" | ||
|  | const OPTION_ANIMATION_AUTOPLAY_NAME: String = "animation/autoplay" | ||
|  | const OPTION_ANIMATION_STRATEGY: String = "animation/strategy" | ||
|  | const OPTION_LAYERS_INCLUDE_REG_EX: String = "layers/include_reg_ex" | ||
|  | const OPTION_LAYERS_EXCLUDE_REG_EX: String = "layers/exclude_reg_ex" | ||
|  | const OPTION_TAGS_INCLUDE_REG_EX: String = "tags/include_reg_ex" | ||
|  | const OPTION_TAGS_EXCLUDE_REG_EX: String = "tags/exclude_reg_ex" | ||
|  | const SPRITESHEET_FIXED_ROWS_COUNT: String = "spritesheet/fixed_rows_count" | ||
|  | const SPRITESHEET_FIXED_COLUMNS_COUNT: String = "spritesheet/fixed_columns_count" | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | class ParsedAnimationOptions: | ||
|  | 	var border_type: BorderType | ||
|  | 	var trim: bool | ||
|  | 	var ignore_empty: bool | ||
|  | 	var merge_duplicates: bool | ||
|  | 	var spritesheet_layout: SpritesheetLayout | ||
|  | 	var spritesheet_fixed_rows_count: int | ||
|  | 	var spritesheet_fixed_columns_count: int | ||
|  | 	var default_animation_name: String | ||
|  | 	var default_animation_direction: AnimationDirection | ||
|  | 	var default_animation_repeat_count: int | ||
|  | 	var animation_autoplay_name: String | ||
|  | 	func _init(options: Dictionary) -> void: | ||
|  | 		border_type = options[OPTION_SPRITESHEET_BORDER_TYPE] | ||
|  | 		trim = options[OPTION_SPRITESHEET_TRIM] | ||
|  | 		ignore_empty = options[OPTION_SPRITESHEET_IGNORE_EMPTY] | ||
|  | 		merge_duplicates = options[OPTION_SPRITESHEET_MERGE_DUPLICATES] | ||
|  | 		spritesheet_layout = options[OPTION_SPRITESHEET_LAYOUT] | ||
|  | 		spritesheet_fixed_rows_count = options[SPRITESHEET_FIXED_ROWS_COUNT] | ||
|  | 		spritesheet_fixed_columns_count = options[SPRITESHEET_FIXED_COLUMNS_COUNT] | ||
|  | 		default_animation_name = options[OPTION_ANIMATION_DEFAULT_NAME].strip_edges().strip_escapes() | ||
|  | 		if default_animation_name.is_empty(): default_animation_name = "default" | ||
|  | 		default_animation_direction = options[OPTION_ANIMATION_DEFAULT_DIRECTION] | ||
|  | 		default_animation_repeat_count = options[OPTION_ANIMATION_DEFAULT_REPEAT_COUNT] | ||
|  | 		animation_autoplay_name = options[OPTION_ANIMATION_AUTOPLAY_NAME].strip_edges().strip_escapes() | ||
|  | 
 | ||
|  | static func create_common_animation_options() -> Array[Dictionary]: | ||
|  | 	return [ | ||
|  | 		create_option(OPTION_SPRITESHEET_LAYOUT, SpritesheetLayout.PACKED, PROPERTY_HINT_ENUM, ",".join(SPRITESHEET_LAYOUTS), PROPERTY_USAGE_EDITOR | PROPERTY_USAGE_UPDATE_ALL_IF_MODIFIED ), | ||
|  | 		create_option(SPRITESHEET_FIXED_ROWS_COUNT, 1, PROPERTY_HINT_RANGE, "1,32,1,or_greater", PROPERTY_USAGE_EDITOR, | ||
|  | 			func(options): return options[OPTION_SPRITESHEET_LAYOUT] == SpritesheetLayout.BY_COLUMNS), | ||
|  | 		create_option(SPRITESHEET_FIXED_COLUMNS_COUNT, 1, PROPERTY_HINT_RANGE, "1,32,1,or_greater", PROPERTY_USAGE_EDITOR, | ||
|  | 			func(options): return options[OPTION_SPRITESHEET_LAYOUT] == SpritesheetLayout.BY_ROWS), | ||
|  | 		create_option(OPTION_SPRITESHEET_BORDER_TYPE, BorderType.None, PROPERTY_HINT_ENUM, ",".join(SPRITESHEET_BORDER_TYPES), PROPERTY_USAGE_EDITOR), | ||
|  | 		create_option(OPTION_SPRITESHEET_TRIM, false, PROPERTY_HINT_NONE, "", PROPERTY_USAGE_EDITOR, | ||
|  | 			func(options): return options[OPTION_SPRITESHEET_LAYOUT] != SpritesheetLayout.PACKED), | ||
|  | 		create_option(OPTION_SPRITESHEET_IGNORE_EMPTY, false, PROPERTY_HINT_NONE, "", PROPERTY_USAGE_EDITOR), | ||
|  | 		create_option(OPTION_SPRITESHEET_MERGE_DUPLICATES, false, PROPERTY_HINT_NONE, "", PROPERTY_USAGE_EDITOR), | ||
|  | 		create_option(OPTION_ANIMATION_DEFAULT_NAME, "default", PROPERTY_HINT_PLACEHOLDER_TEXT, "default", PROPERTY_USAGE_EDITOR), | ||
|  | 		create_option(OPTION_ANIMATION_DEFAULT_DIRECTION, AnimationDirection.FORWARD, PROPERTY_HINT_ENUM, ",".join(PRESET_OPTIONS_ANIMATION_DIRECTIONS), PROPERTY_USAGE_EDITOR), | ||
|  | 		create_option(OPTION_ANIMATION_DEFAULT_REPEAT_COUNT, 0, PROPERTY_HINT_RANGE, "0,32,1,or_greater", PROPERTY_USAGE_EDITOR), | ||
|  | 		create_option(OPTION_ANIMATION_AUTOPLAY_NAME, "", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_EDITOR), | ||
|  | 	] |