init commit

This commit is contained in:
2025-04-26 10:41:46 -05:00
commit 8a1166fc19
94 changed files with 4374 additions and 0 deletions

View File

@@ -0,0 +1,83 @@
@tool
extends "_.gd"
const __ANIMATION_MERGE_EQUAL_CONSEQUENT_FRAMES_OPTION: StringName = "animation/merge_equal_sonsequent_frames"
const __ANIMATION_FLATTEN_REPETITION_OPTION: StringName = "animation/flatten_repetition"
func _init() -> void: super("Sprite sheet (JSON)", "JSON", "res", [
_Options.create_option(__ANIMATION_MERGE_EQUAL_CONSEQUENT_FRAMES_OPTION, true,
PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT),
_Options.create_option(__ANIMATION_FLATTEN_REPETITION_OPTION, true,
PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT),
])
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 unique_indixes_by_sprites: Dictionary
var unique_sprite_index: int = 0
var sprites: Array[Dictionary]
for sprite in sprite_sheet.sprites:
if not unique_indixes_by_sprites.has(sprite):
unique_indixes_by_sprites[sprite] = unique_sprite_index
sprites.push_back({
region = sprite.region,
offset = sprite.offset
})
unique_sprite_index += 1
var flatten_animation_repetition: bool = options[__ANIMATION_FLATTEN_REPETITION_OPTION]
var merge_equal_consequent_frames: bool = options[__ANIMATION_MERGE_EQUAL_CONSEQUENT_FRAMES_OPTION]
var animations: Array[Dictionary]
for animation in animation_library.animations:
var frames_data: Array[Dictionary]
var frames: Array[_Common.FrameInfo] = \
animation.get_flatten_frames() \
if flatten_animation_repetition else \
animation.frames
var previous_sprite_index: int = -1
for frame in frames:
var sprite_index: int = unique_indixes_by_sprites[frame.sprite]
if merge_equal_consequent_frames and sprite_index == previous_sprite_index:
frames_data.back().duration += frame.duration
else:
frames_data.push_back({
sprite_index = sprite_index,
duration = frame.duration,
})
previous_sprite_index = sprite_index
animations.push_back({
name = animation.name,
direction =
_Common.AnimationDirection.FORWARD
if flatten_animation_repetition else
animation.direction,
repeat_count =
mini(1, animation.repeat_count)
if flatten_animation_repetition else
animation.repeat_count,
frames = frames_data,
})
var json: JSON = JSON.new()
json.data = {
sprite_sheet = {
atlas = atlas,
source_image_size = sprite_sheet.source_image_size,
sprites = sprites,
},
animation_library = {
animations = animations,
autoplay_index = animation_library.autoplay_index,
},
}
json.get_parsed_text()
result.success(json, ResourceSaver.FLAG_COMPRESS)
return result