Skip to content

feat: scene-driven movement animations#392

Open
robtfm wants to merge 2 commits into
protocol-squadfrom
feat/scene-driven-movement-animations
Open

feat: scene-driven movement animations#392
robtfm wants to merge 2 commits into
protocol-squadfrom
feat/scene-driven-movement-animations

Conversation

@robtfm
Copy link
Copy Markdown
Contributor

@robtfm robtfm commented Apr 20, 2026

Summary

  • Adds MovementAnimation on PBAvatarMovement so the movement scene can drive avatar animation directly (src, loop, speed, idle, optional transition_seconds, optional playback_time). When absent the engine falls back to its built-in velocity-based selection.
  • Adds AvatarAnimationState on PBAvatarMovementInfo so any scene can observe the currently-playing scene-driven clip (src, loop, speed, idle, playback_time, duration, loop_count). playback_time freezes while a triggerSceneEmote is overriding the clip.

Opened against protocol-squad so we can build a remote artifact to link js-sdk-toolchain against, and in turn link movement-scene so the downstream PRs are functional off this machine.

🤖 Generated with Claude Code

Adds `MovementAnimation` on `PBAvatarMovement` so the movement scene can
drive avatar animation directly (src, loop, speed, idle, optional
transition/seek). When unset the engine falls back to its velocity-based
selection.

Adds `AvatarAnimationState` on `PBAvatarMovementInfo` so any scene can
observe the currently-playing scene-driven clip (src, loop, speed, idle,
playback_time, duration, loop_count).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@github-actions
Copy link
Copy Markdown

github-actions Bot commented Apr 20, 2026

Test this pull request

  • The @dcl/protocol package can be tested in scenes by running
    npm install "https://sdk-team-cdn.decentraland.org/@dcl/protocol/branch//dcl-protocol-1.0.0-24682464295.commit-6dfb0c7.tgz"

Scene-relative audio clip paths to play on the avatar audio bus when the
scene wants a sound to ride the animation (e.g. footsteps at foot-plant
playback times). Fire-and-forget: clips play once per frame they appear;
no stop mechanism. Scene watches AvatarAnimationState.playback_time to
decide when to set the field.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant