@pmndrs/viverse 0.2.9 → 0.2.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/utils.d.ts CHANGED
@@ -9,7 +9,7 @@ export type StartAnimationOptions = {
9
9
  sync?: boolean;
10
10
  paused?: boolean;
11
11
  crossFade?: boolean;
12
- layer?: string;
12
+ layer?: string | Array<string | undefined>;
13
13
  };
14
- export declare function startAnimation(animation: AnimationAction, currentAnimations: CharacterModel['currentAnimations'], { crossFade, layer, fadeDuration, paused, sync }?: StartAnimationOptions): (() => void) | undefined;
14
+ export declare function startAnimation(animation: AnimationAction, currentAnimations: CharacterModel['currentAnimations'], { crossFade, layer: layers, fadeDuration, paused, sync }?: StartAnimationOptions): (() => void) | undefined;
15
15
  export declare function shouldJump(physics: BvhCharacterPhysics, lastJump: number, bufferTime?: number): boolean;
package/dist/utils.js CHANGED
@@ -8,7 +8,7 @@ export function getIsMobileMediaQuery() {
8
8
  export function isMobile() {
9
9
  return getIsMobileMediaQuery()?.matches ?? false;
10
10
  }
11
- export function startAnimation(animation, currentAnimations, { crossFade = true, layer, fadeDuration = 0.1, paused = false, sync = false } = {}) {
11
+ export function startAnimation(animation, currentAnimations, { crossFade = true, layer: layers, fadeDuration = 0.1, paused = false, sync = false } = {}) {
12
12
  animation.reset();
13
13
  animation.play();
14
14
  animation.paused = paused;
@@ -18,17 +18,29 @@ export function startAnimation(animation, currentAnimations, { crossFade = true,
18
18
  animation.fadeOut(fadeDuration);
19
19
  };
20
20
  }
21
- const currentAnimation = currentAnimations.get(layer);
22
- if (currentAnimation != null && sync) {
23
- animation.syncWith(currentAnimation);
21
+ if (!Array.isArray(layers)) {
22
+ layers = [layers];
24
23
  }
25
- if (currentAnimation != null) {
26
- animation.crossFadeFrom(currentAnimation, fadeDuration);
24
+ //deduplicated set of current animations
25
+ const resolvedCurrentAnimations = new Set(layers.map((layer) => currentAnimations.get(layer)).filter((animation) => animation != null));
26
+ //sync with current animation if there is exactly one current animation that is not equal to the new animation
27
+ if (resolvedCurrentAnimations.size === 1 && !resolvedCurrentAnimations.has(animation) && sync) {
28
+ const [currentAnimation] = resolvedCurrentAnimations;
29
+ animation.syncWith(currentAnimation);
27
30
  }
28
- else {
31
+ //fade in only if not already playing the new animation
32
+ if (!resolvedCurrentAnimations.has(animation)) {
29
33
  animation.fadeIn(fadeDuration);
30
34
  }
31
- currentAnimations.set(layer, animation);
35
+ //fading out all animations except for the new animation
36
+ resolvedCurrentAnimations.delete(animation);
37
+ for (const currentAnimation of resolvedCurrentAnimations) {
38
+ currentAnimation.fadeOut(fadeDuration);
39
+ }
40
+ //write the new animation to all the layers, if current and new animations are all the same, its just writing the same content again
41
+ for (const layer of layers) {
42
+ currentAnimations.set(layer, animation);
43
+ }
32
44
  }
33
45
  export function shouldJump(physics, lastJump, bufferTime = 0.1) {
34
46
  if (!physics.isGrounded) {
package/package.json CHANGED
@@ -21,7 +21,7 @@
21
21
  "peerDependencies": {
22
22
  "three": "*"
23
23
  },
24
- "version": "0.2.9",
24
+ "version": "0.2.10",
25
25
  "type": "module",
26
26
  "dependencies": {
27
27
  "@pixiv/three-vrm": "^3.4.2",