init commit
This commit is contained in:
64
addons/nklbdev.importality/import/sprite_frames.gd
Normal file
64
addons/nklbdev.importality/import/sprite_frames.gd
Normal file
@@ -0,0 +1,64 @@
|
||||
@tool
|
||||
extends "_.gd"
|
||||
|
||||
func _init() -> void: super("SpriteFrames", "SpriteFrames", "res")
|
||||
|
||||
func import(
|
||||
res_source_file_path: String,
|
||||
atlas: Texture2D,
|
||||
sprite_sheet: _Common.SpriteSheetInfo,
|
||||
animation_library: _Common.AnimationLibraryInfo,
|
||||
options: Dictionary,
|
||||
save_path: String
|
||||
) -> ImportResult:
|
||||
var result: ImportResult = ImportResult.new()
|
||||
|
||||
var sprite_frames: SpriteFrames = SpriteFrames.new()
|
||||
for animation_name in sprite_frames.get_animation_names():
|
||||
sprite_frames.remove_animation(animation_name)
|
||||
|
||||
var filter_clip_enabled: bool = options[_Options.ATLAS_TEXTURES_REGION_FILTER_CLIP_ENABLED]
|
||||
var atlas_textures: Array[AtlasTexture]
|
||||
var empty_atlas_texture: AtlasTexture
|
||||
for animation in animation_library.animations:
|
||||
sprite_frames.add_animation(animation.name)
|
||||
sprite_frames.set_animation_loop(animation.name, animation.repeat_count == 0)
|
||||
sprite_frames.set_animation_speed(animation.name, 1)
|
||||
var previous_texture: Texture2D
|
||||
for frame in animation.get_flatten_frames():
|
||||
var atlas_texture: AtlasTexture
|
||||
if frame.sprite.region.has_area():
|
||||
var region: Rect2 = frame.sprite.region
|
||||
var margin: Rect2 = Rect2(
|
||||
frame.sprite.offset,
|
||||
sprite_sheet.source_image_size - frame.sprite.region.size)
|
||||
var equivalent_atlas_textures: Array = atlas_textures.filter(
|
||||
func(t: AtlasTexture) -> bool: return t.margin == margin and t.region == region)
|
||||
if not equivalent_atlas_textures.is_empty():
|
||||
atlas_texture = equivalent_atlas_textures.front()
|
||||
if atlas_texture == null:
|
||||
atlas_texture = AtlasTexture.new()
|
||||
atlas_texture.filter_clip = filter_clip_enabled
|
||||
atlas_texture.atlas = atlas
|
||||
atlas_texture.region = region
|
||||
atlas_texture.margin = margin
|
||||
atlas_textures.push_back(atlas_texture)
|
||||
else:
|
||||
if empty_atlas_texture == null:
|
||||
empty_atlas_texture = AtlasTexture.new()
|
||||
empty_atlas_texture.filter_clip = filter_clip_enabled
|
||||
empty_atlas_texture.atlas = atlas
|
||||
empty_atlas_texture.region = Rect2(0, 0, 1, 1)
|
||||
empty_atlas_texture.margin = Rect2(2, 2, 0, 0)
|
||||
atlas_texture = empty_atlas_texture
|
||||
if atlas_texture == previous_texture:
|
||||
var last_frame_index: int = sprite_frames.get_frame_count(animation.name) - 1
|
||||
sprite_frames.set_frame(animation.name, last_frame_index, atlas_texture,
|
||||
sprite_frames.get_frame_duration(animation.name, last_frame_index) + frame.duration)
|
||||
continue
|
||||
sprite_frames.add_frame(animation.name, atlas_texture, frame.duration)
|
||||
previous_texture = atlas_texture
|
||||
|
||||
result.success(sprite_frames,
|
||||
ResourceSaver.FLAG_COMPRESS | ResourceSaver.FLAG_BUNDLE_RESOURCES)
|
||||
return result
|
||||
Reference in New Issue
Block a user