content

For doors that go between scenes in no signal, I've had this pattern of creating an extra pair of animations to easily switch to the open or closed state of a door, for a total of four animations:

  • open - The open animation
  • close - The close animation
  • opened - A single frame which sets the door to the opened state
  • closed - A single frame which sets the door to the closed state

Setting up this extra animation is tedious, but it was something I did because I wasn't sure how to play the last frame of an animation. However, when I was implementing the ability to save and load the state of other doors in the game, I found out that many of them don't have an opened and closed animation and I was reluctant to make them, so I explored how to do it again.

As expected, the paths that I probably tried before didn't seem to work in Godot 4.3.stable.

The following attempt fails, because it still plays the opening sound despite the fact that update_only is true. I suspect this is because the sound is played on the very first frame.

play("open")
seek(get_animation("open").length, false, true)

The following also fails, as the door fails to open at all:

play_backwards("open")
stop()

I thought this was because the play_backwards function didn't actually do anything until the next process, but manually requesting and update didn't work either:

play_backwards("open")
advance(0)
stop()

However, I noticed that the documentation for play_backwards mentioned that it was the same as play, but with custom_speed = -1.0 and from_end = true. This is very similar to what I want, except with a custom_speed of 0 since I don't want the animation to play. Calling the play function myself appears to work:

play("open", -1, 0, true)

meta

created:

backlinks: 20241109234512 Skip to the end of an Animation in AnimationPlayer

commit: e09b5102