Skip to content

Commit 19a751a

Browse files
authored
feat: make options for appendAnimation and detachAnimation optional (#5025)
1 parent 5a4ba10 commit 19a751a

4 files changed

Lines changed: 40 additions & 17 deletions

File tree

packages/model-viewer-effects/src/test/effect-composer-spec.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ import {expect} from 'chai';
1818
import {DotScreenEffect, Effect, EffectPass, GridEffect} from 'postprocessing';
1919
import {Camera} from 'three';
2020

21+
import {Renderer} from '@google/model-viewer/lib/three-components/Renderer.js';
22+
2123
import {$effectComposer, $normalPass, $renderPass, $scene} from '../effect-composer.js';
2224
import {EffectComposer} from '../model-viewer-effects.js';
2325

@@ -27,6 +29,12 @@ suite('MVEffectComposer', () => {
2729
let element: ModelViewerElement;
2830
let composer: EffectComposer;
2931

32+
suiteSetup(function() {
33+
if (!Renderer.singleton.canRender) {
34+
this.skip();
35+
}
36+
});
37+
3038
setup(async () => {
3139
element = createModelViewerElement(assetPath('models/Astronaut.glb'));
3240
composer = new EffectComposer();

packages/model-viewer-effects/src/test/effects/color-grade-spec.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
import {ModelViewerElement} from '@google/model-viewer';
1717
import {expect} from 'chai';
1818

19+
import {Renderer} from '@google/model-viewer/lib/three-components/Renderer.js';
20+
1921
import {ColorGradeEffect, EffectComposer} from '../../model-viewer-effects.js';
2022
import {ArraysAreEqual, assetPath, AverageHSL, CompareArrays, createModelViewerElement, rafPasses, screenshot, waitForEvent} from '../utilities.js';
2123

@@ -25,6 +27,12 @@ suite('Color Grade Effect', () => {
2527
let baseScreenshot: Uint8Array;
2628
let colorGrade: ColorGradeEffect;
2729

30+
suiteSetup(function() {
31+
if (!Renderer.singleton.canRender) {
32+
this.skip();
33+
}
34+
});
35+
2836
setup(async () => {
2937
element = createModelViewerElement(assetPath('models/Astronaut.glb'));
3038
composer = new EffectComposer();

packages/model-viewer-effects/src/test/utilities-spec.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,6 @@ suite('Screenshot Baseline Test', () => {
6767
setup(async () => {
6868
composer = new EffectComposer();
6969
composer.renderMode = 'quality';
70-
composer.msaa = 8;
7170
element.insertBefore(composer, element.firstChild);
7271
await element.updateComplete;
7372
await composer.updateComplete;

packages/model-viewer/src/features/animation.ts

Lines changed: 24 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -27,17 +27,23 @@ const $detachAnimation = Symbol('detachAnimation');
2727
const $paused = Symbol('paused');
2828

2929
interface PlayAnimationOptions {
30-
repetitions: number, pingpong: boolean,
30+
repetitions: number;
31+
pingpong: boolean;
3132
}
3233

3334
interface AppendAnimationOptions {
34-
pingpong: boolean, repetitions: number|null, weight: number,
35-
timeScale: number, fade: boolean|number, warp: boolean|number,
36-
relativeWarp: boolean, time: number|null
35+
pingpong?: boolean;
36+
repetitions?: number|null;
37+
weight?: number;
38+
timeScale?: number;
39+
fade?: boolean|number;
40+
warp?: boolean|number;
41+
relativeWarp?: boolean;
42+
time?: number|null;
3743
}
3844

3945
interface DetachAnimationOptions {
40-
fade: boolean|number
46+
fade?: boolean|number;
4147
}
4248

4349
const DEFAULT_PLAY_OPTIONS: PlayAnimationOptions = {
@@ -262,9 +268,10 @@ export const AnimationMixin = <T extends Constructor<ModelViewerElementBase>>(
262268

263269
[$appendAnimation](
264270
animationName: string = '',
265-
options: AppendAnimationOptions = DEFAULT_APPEND_OPTIONS) {
266-
const repetitions = options.repetitions ?? Infinity;
267-
const mode = options.pingpong ?
271+
options: AppendAnimationOptions = {}) {
272+
const opts = {...DEFAULT_APPEND_OPTIONS, ...options};
273+
const repetitions = opts.repetitions ?? Infinity;
274+
const mode = opts.pingpong ?
268275
LoopPingPong :
269276
(repetitions === 1 ? LoopOnce : LoopRepeat);
270277

@@ -274,12 +281,12 @@ export const AnimationMixin = <T extends Constructor<ModelViewerElementBase>>(
274281
animationName ? animationName : this.animationName,
275282
mode,
276283
repetitions,
277-
options.weight,
278-
options.timeScale,
279-
options.fade,
280-
options.warp,
281-
options.relativeWarp,
282-
options.time,
284+
opts.weight,
285+
opts.timeScale,
286+
opts.fade,
287+
opts.warp,
288+
opts.relativeWarp,
289+
opts.time,
283290
needsToStop);
284291

285292
// If we are currently paused, we need to force a render so that
@@ -292,9 +299,10 @@ export const AnimationMixin = <T extends Constructor<ModelViewerElementBase>>(
292299

293300
[$detachAnimation](
294301
animationName: string = '',
295-
options: DetachAnimationOptions = DEFAULT_DETACH_OPTIONS) {
302+
options: DetachAnimationOptions = {}) {
303+
const opts = {...DEFAULT_DETACH_OPTIONS, ...options};
296304
this[$scene].detachAnimation(
297-
animationName ? animationName : this.animationName, options.fade);
305+
animationName ? animationName : this.animationName, opts.fade);
298306

299307
// If we are currently paused, we need to force a render so that
300308
// the scene updates to the first frame of the new animation

0 commit comments

Comments
 (0)