1
0
Fork 0
mirror of https://github.com/Orama-Interactive/Pixelorama.git synced 2025-02-22 05:23:14 +00:00

Support frame delay

This commit is contained in:
Emmanouil Papadeas 2024-12-10 00:52:57 +02:00
parent ecd479b4e2
commit 404d938565
7 changed files with 62 additions and 14 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 192 B

View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dfjd72smxp6ma"
path="res://.godot/imported/musical_note.png-f1be7cc6341733e6ffe2fa5b650b80c2.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/graphics/misc/musical_note.png"
dest_files=["res://.godot/imported/musical_note.png-f1be7cc6341733e6ffe2fa5b650b80c2.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

View file

@ -282,7 +282,7 @@ func process_animation(project := Global.current_project) -> void:
for cel in frame.cels: for cel in frame.cels:
var image := Image.new() var image := Image.new()
image.copy_from(cel.get_image()) image.copy_from(cel.get_image())
var duration := frame.duration * (1.0 / project.fps) var duration := frame.get_duration_in_seconds(project.fps)
processed_images.append( processed_images.append(
ProcessedImage.new(image, project.frames.find(frame), duration) ProcessedImage.new(image, project.frames.find(frame), duration)
) )
@ -298,7 +298,7 @@ func process_animation(project := Global.current_project) -> void:
image.copy_from(crop) image.copy_from(crop)
if trim_images: if trim_images:
image = image.get_region(image.get_used_rect()) image = image.get_region(image.get_used_rect())
var duration := frame.duration * (1.0 / project.fps) var duration := frame.get_duration_in_seconds(project.fps)
processed_images.append(ProcessedImage.new(image, project.frames.find(frame), duration)) processed_images.append(ProcessedImage.new(image, project.frames.find(frame), duration))

View file

@ -11,3 +11,17 @@ var user_data := "" ## User defined data, set in the frame properties.
func _init(_cels: Array[BaseCel] = [], _duration := 1.0) -> void: func _init(_cels: Array[BaseCel] = [], _duration := 1.0) -> void:
cels = _cels cels = _cels
duration = _duration duration = _duration
func get_duration_in_seconds(fps: float) -> float:
return duration * (1.0 / fps)
func position_in_seconds(project: Project, start_from := 0) -> float:
var pos := 0.0
for i in range(start_from, project.frames.size()):
var frame := project.frames[i]
if frame == self:
break
pos += frame.get_duration_in_seconds(project.fps)
return pos

View file

@ -404,10 +404,10 @@ func _sort_cel_indices_by_frame(a: Array, b: Array) -> bool:
func _is_playing_audio() -> void: func _is_playing_audio() -> void:
var layer := Global.current_project.layers[layer] as AudioLayer var frame_class := Global.current_project.frames[frame]
var audio_length := layer.audio.get_length() var layer_class := Global.current_project.layers[layer] as AudioLayer
var final_frame := audio_length * Global.current_project.fps var audio_length := layer_class.audio.get_length()
if frame < final_frame: if frame_class.position_in_seconds(Global.current_project) < audio_length:
cel_texture.texture = preload("res://assets/graphics/icons/icon.png") cel_texture.texture = preload("res://assets/graphics/misc/musical_note.png")
else: else:
cel_texture.texture = null cel_texture.texture = null

View file

@ -19,8 +19,9 @@ func _ready() -> void:
func _update_tooltip() -> void: func _update_tooltip() -> void:
var duration := Global.current_project.frames[frame].duration var frame_class := Global.current_project.frames[frame]
var duration_sec := duration * (1.0 / Global.current_project.fps) var duration := frame_class.duration
var duration_sec := frame_class.get_duration_in_seconds(Global.current_project.fps)
var duration_str := str(duration_sec) var duration_str := str(duration_sec)
if "." in duration_str: # If its a decimal value if "." in duration_str: # If its a decimal value
duration_str = "%.2f" % duration_sec # Up to 2 decimal places duration_str = "%.2f" % duration_sec # Up to 2 decimal places

View file

@ -89,11 +89,10 @@ func _play_audio() -> void:
if not layer.visible: if not layer.visible:
return return
var audio_length := audio_player.stream.get_length() var audio_length := audio_player.stream.get_length()
var final_frame := audio_length * Global.current_project.fps var frame := Global.current_project.frames[Global.current_project.current_frame]
if Global.current_project.current_frame < final_frame: var frame_pos := frame.position_in_seconds(Global.current_project)
var seconds_per_frame := 1.0 / Global.current_project.fps if frame_pos < audio_length:
var playback_position := Global.current_project.current_frame * seconds_per_frame audio_player.play(frame_pos)
audio_player.play(playback_position)
else: else:
audio_player.stop() audio_player.stop()