1
0
Fork 0
mirror of https://github.com/Orama-Interactive/Pixelorama.git synced 2025-01-31 07:29:49 +00:00

Fixed stack overflow crash when the user set the loop mode to ping-pong and played the animation on a single frame with its own tag

The crash only occured when it was one frame in that tag, but there were also more frames in general. A very rare scenario.
This commit is contained in:
OverloadedOrama 2020-05-09 21:38:28 +03:00
parent 0e807c176f
commit 7dbea9c0b0
2 changed files with 21 additions and 14 deletions

View file

@ -254,6 +254,8 @@ func _input(event : InputEvent) -> void:
if Engine.get_version_info().major == 3 && Engine.get_version_info().minor >= 2:
if event is InputEventMouseMotion:
pen_pressure = event.pressure
# To be removed once Godot 3.2.2 is out of beta
if event.pressure == 0.0: # Drawing with mouse
pen_pressure = 1 # This causes problems with tablets though

View file

@ -225,6 +225,10 @@ func _on_PlayBackwards_toggled(button_pressed : bool) -> void:
func _on_AnimationTimer_timeout() -> void:
if first_frame == last_frame:
$AnimationTimer.stop()
return
if animation_forward:
if Global.current_frame < last_frame:
Global.current_frame += 1
@ -257,6 +261,21 @@ func _on_AnimationTimer_timeout() -> void:
func play_animation(play : bool, forward_dir : bool) -> void:
first_frame = 0
last_frame = Global.canvases.size() - 1
if Global.play_only_tags:
for tag in Global.animation_tags:
if Global.current_frame + 1 >= tag[2] && Global.current_frame + 1 <= tag[3]:
first_frame = tag[2] - 1
last_frame = min(Global.canvases.size() - 1, tag[3] - 1)
if first_frame == last_frame:
if forward_dir:
Global.play_forward.pressed = false
else:
Global.play_backwards.pressed = false
return
if forward_dir:
Global.play_backwards.disconnect("toggled", self, "_on_PlayBackwards_toggled")
Global.play_backwards.pressed = false
@ -267,20 +286,6 @@ func play_animation(play : bool, forward_dir : bool) -> void:
Global.play_forward.pressed = false
Global.change_button_texturerect(Global.play_forward.get_child(0), "play.png")
Global.play_forward.connect("toggled", self, "_on_PlayForward_toggled")
if Global.canvases.size() == 1:
if forward_dir:
Global.play_forward.pressed = false
else:
Global.play_backwards.pressed = false
return
first_frame = 0
last_frame = Global.canvases.size() - 1
if Global.play_only_tags:
for tag in Global.animation_tags:
if Global.current_frame + 1 >= tag[2] && Global.current_frame + 1 <= tag[3]:
first_frame = tag[2] - 1
last_frame = min(Global.canvases.size() - 1, tag[3] - 1)
if play:
Global.animation_timer.wait_time = 1 / fps