angular-three-soba 1.12.0 → 1.12.2

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.
@@ -1,51 +1,44 @@
1
- import { injectBeforeRender, injectNgtDestroy, injectNgtRef, is } from 'angular-three';
2
- import { isObservable } from 'rxjs';
3
- import { AnimationMixer } from 'three';
4
- export function injectNgtsAnimations(clips, object) {
5
- let ref = injectNgtRef();
6
- let sub;
7
- if (object) {
8
- if (isObservable(object)) {
9
- sub = object.subscribe((val) => {
10
- ref.nativeElement = val;
11
- });
12
- }
13
- else if (is.ref(object)) {
14
- ref = object;
15
- }
16
- else {
17
- ref.nativeElement = object;
18
- }
19
- }
20
- const mixer = new AnimationMixer(ref.nativeElement);
21
- let cached = {};
1
+ import { injectBeforeRender, injectNgtDestroy, injectNgtRef } from 'angular-three';
2
+ import { takeUntil } from 'rxjs';
3
+ import * as THREE from 'three';
4
+ export function injectNgtsAnimations(gltf$, modelSelector = (gltf) => gltf.scene) {
5
+ const ref = injectNgtRef();
6
+ const mixer = new THREE.AnimationMixer(null);
22
7
  const actions = {};
8
+ let cached = {};
9
+ const clips = [];
23
10
  const names = [];
24
- for (const clip of clips) {
25
- names.push(clip.name);
26
- Object.defineProperty(actions, clip.name, {
27
- enumerable: true,
28
- get: () => {
29
- if (ref.nativeElement) {
30
- const name = clip.name;
31
- return cached[name] || (cached[name] = mixer.clipAction(clip, ref.nativeElement));
32
- }
33
- },
34
- });
35
- }
36
- const api = { ref, clips, actions, names, mixer };
37
- injectNgtDestroy(() => {
38
- if (sub)
39
- sub.unsubscribe();
11
+ const { destroy$ } = injectNgtDestroy(() => {
12
+ // clear cached
40
13
  cached = {};
41
- Object.values(api.actions).forEach((action) => {
14
+ // uncache actions
15
+ Object.values(actions).forEach((action) => {
42
16
  if (ref.nativeElement) {
43
17
  mixer.uncacheAction(action, ref.nativeElement);
44
18
  }
45
19
  });
20
+ // stop all actions
46
21
  mixer.stopAllAction();
47
22
  });
48
23
  injectBeforeRender(({ delta }) => mixer.update(delta));
49
- return api;
24
+ gltf$.pipe(takeUntil(destroy$)).subscribe((gltf) => {
25
+ const model = modelSelector(gltf);
26
+ ref.nativeElement = model;
27
+ for (let i = 0; i < gltf.animations.length; i++) {
28
+ const clip = gltf.animations[i];
29
+ names.push(clip.name);
30
+ clips.push(clip);
31
+ Object.defineProperty(actions, clip.name, {
32
+ enumerable: true,
33
+ get: () => {
34
+ return cached[clip.name] || (cached[clip.name] = mixer.clipAction(clip, model));
35
+ },
36
+ });
37
+ if (i === 0) {
38
+ actions[clip.name].play();
39
+ }
40
+ }
41
+ });
42
+ return { ref, actions, mixer, names, clips };
50
43
  }
51
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5pbWF0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci10aHJlZS1zb2JhL21pc2Mvc3JjL2xpYi9hbmltYXRpb25zL2FuaW1hdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLFlBQVksRUFBRSxFQUFFLEVBQWtCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZHLE9BQU8sRUFBRSxZQUFZLEVBQTRCLE1BQU0sTUFBTSxDQUFDO0FBQzlELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFVdkMsTUFBTSxVQUFVLG9CQUFvQixDQUNoQyxLQUFVLEVBQ1YsTUFBcUY7SUFFckYsSUFBSSxHQUFHLEdBQUcsWUFBWSxFQUFrQixDQUFDO0lBRXpDLElBQUksR0FBaUIsQ0FBQztJQUV0QixJQUFJLE1BQU0sRUFBRTtRQUNSLElBQUksWUFBWSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3RCLEdBQUcsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQzNCLEdBQUcsQ0FBQyxhQUFhLEdBQUcsR0FBRyxDQUFDO1lBQzVCLENBQUMsQ0FBQyxDQUFDO1NBQ047YUFBTSxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDdkIsR0FBRyxHQUFHLE1BQU0sQ0FBQztTQUNoQjthQUFNO1lBQ0gsR0FBRyxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUM7U0FDOUI7S0FDSjtJQUVELE1BQU0sS0FBSyxHQUFHLElBQUksY0FBYyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUVwRCxJQUFJLE1BQU0sR0FBRyxFQUEwRCxDQUFDO0lBQ3hFLE1BQU0sT0FBTyxHQUFHLEVBQTBELENBQUM7SUFDM0UsTUFBTSxLQUFLLEdBQUcsRUFBaUIsQ0FBQztJQUVoQyxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRTtRQUN0QixLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QixNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ3RDLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLEdBQUcsRUFBRSxHQUFHLEVBQUU7Z0JBQ04sSUFBSSxHQUFHLENBQUMsYUFBYSxFQUFFO29CQUNuQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBMkIsQ0FBQztvQkFDOUMsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7aUJBQ3JGO1lBQ0wsQ0FBQztTQUNKLENBQUMsQ0FBQztLQUNOO0lBRUQsTUFBTSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFFbEQsZ0JBQWdCLENBQUMsR0FBRyxFQUFFO1FBQ2xCLElBQUksR0FBRztZQUFFLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMzQixNQUFNLEdBQUcsRUFBMEQsQ0FBQztRQUNwRSxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUMxQyxJQUFJLEdBQUcsQ0FBQyxhQUFhLEVBQUU7Z0JBQ25CLEtBQUssQ0FBQyxhQUFhLENBQUMsTUFBNkIsRUFBRSxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7YUFDekU7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUNILEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUMxQixDQUFDLENBQUMsQ0FBQztJQUVILGtCQUFrQixDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBRXZELE9BQU8sR0FBRyxDQUFDO0FBQ2YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdEJlZm9yZVJlbmRlciwgaW5qZWN0Tmd0RGVzdHJveSwgaW5qZWN0Tmd0UmVmLCBpcywgTmd0SW5qZWN0ZWRSZWYgfSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IGlzT2JzZXJ2YWJsZSwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBbmltYXRpb25NaXhlciB9IGZyb20gJ3RocmVlJztcblxudHlwZSBBcGk8VCBleHRlbmRzIFRIUkVFLkFuaW1hdGlvbkNsaXA+ID0ge1xuICAgIHJlZjogTmd0SW5qZWN0ZWRSZWY8VEhSRUUuT2JqZWN0M0Q+O1xuICAgIGNsaXBzOiBUSFJFRS5BbmltYXRpb25DbGlwW107XG4gICAgbWl4ZXI6IFRIUkVFLkFuaW1hdGlvbk1peGVyO1xuICAgIG5hbWVzOiBUWyduYW1lJ11bXTtcbiAgICBhY3Rpb25zOiB7IFtrZXkgaW4gVFsnbmFtZSddXTogVEhSRUUuQW5pbWF0aW9uQWN0aW9uIHwgbnVsbCB9O1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGluamVjdE5ndHNBbmltYXRpb25zPFQgZXh0ZW5kcyBUSFJFRS5BbmltYXRpb25DbGlwPihcbiAgICBjbGlwczogVFtdLFxuICAgIG9iamVjdD86IE9ic2VydmFibGU8VEhSRUUuT2JqZWN0M0Q+IHwgVEhSRUUuT2JqZWN0M0QgfCBOZ3RJbmplY3RlZFJlZjxUSFJFRS5PYmplY3QzRD5cbik6IEFwaTxUPiB7XG4gICAgbGV0IHJlZiA9IGluamVjdE5ndFJlZjxUSFJFRS5PYmplY3QzRD4oKTtcblxuICAgIGxldCBzdWI6IFN1YnNjcmlwdGlvbjtcblxuICAgIGlmIChvYmplY3QpIHtcbiAgICAgICAgaWYgKGlzT2JzZXJ2YWJsZShvYmplY3QpKSB7XG4gICAgICAgICAgICBzdWIgPSBvYmplY3Quc3Vic2NyaWJlKCh2YWwpID0+IHtcbiAgICAgICAgICAgICAgICByZWYubmF0aXZlRWxlbWVudCA9IHZhbDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKGlzLnJlZihvYmplY3QpKSB7XG4gICAgICAgICAgICByZWYgPSBvYmplY3Q7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZWYubmF0aXZlRWxlbWVudCA9IG9iamVjdDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG1peGVyID0gbmV3IEFuaW1hdGlvbk1peGVyKHJlZi5uYXRpdmVFbGVtZW50KTtcblxuICAgIGxldCBjYWNoZWQgPSB7fSBhcyB7IFtrZXkgaW4gVFsnbmFtZSddXTogVEhSRUUuQW5pbWF0aW9uQWN0aW9uIHwgbnVsbCB9O1xuICAgIGNvbnN0IGFjdGlvbnMgPSB7fSBhcyB7IFtrZXkgaW4gVFsnbmFtZSddXTogVEhSRUUuQW5pbWF0aW9uQWN0aW9uIHwgbnVsbCB9O1xuICAgIGNvbnN0IG5hbWVzID0gW10gYXMgVFsnbmFtZSddW107XG5cbiAgICBmb3IgKGNvbnN0IGNsaXAgb2YgY2xpcHMpIHtcbiAgICAgICAgbmFtZXMucHVzaChjbGlwLm5hbWUpO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoYWN0aW9ucywgY2xpcC5uYW1lLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgZ2V0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHJlZi5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5hbWUgPSBjbGlwLm5hbWUgYXMga2V5b2YgdHlwZW9mIGNhY2hlZDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFtuYW1lXSB8fCAoY2FjaGVkW25hbWVdID0gbWl4ZXIuY2xpcEFjdGlvbihjbGlwLCByZWYubmF0aXZlRWxlbWVudCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGFwaSA9IHsgcmVmLCBjbGlwcywgYWN0aW9ucywgbmFtZXMsIG1peGVyIH07XG5cbiAgICBpbmplY3ROZ3REZXN0cm95KCgpID0+IHtcbiAgICAgICAgaWYgKHN1Yikgc3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIGNhY2hlZCA9IHt9IGFzIHsgW2tleSBpbiBUWyduYW1lJ11dOiBUSFJFRS5BbmltYXRpb25BY3Rpb24gfCBudWxsIH07XG4gICAgICAgIE9iamVjdC52YWx1ZXMoYXBpLmFjdGlvbnMpLmZvckVhY2goKGFjdGlvbikgPT4ge1xuICAgICAgICAgICAgaWYgKHJlZi5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgbWl4ZXIudW5jYWNoZUFjdGlvbihhY3Rpb24gYXMgVEhSRUUuQW5pbWF0aW9uQ2xpcCwgcmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgbWl4ZXIuc3RvcEFsbEFjdGlvbigpO1xuICAgIH0pO1xuXG4gICAgaW5qZWN0QmVmb3JlUmVuZGVyKCh7IGRlbHRhIH0pID0+IG1peGVyLnVwZGF0ZShkZWx0YSkpO1xuXG4gICAgcmV0dXJuIGFwaTtcbn1cbiJdfQ==
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5pbWF0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci10aHJlZS1zb2JhL21pc2Mvc3JjL2xpYi9hbmltYXRpb25zL2FuaW1hdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLFlBQVksRUFBa0IsTUFBTSxlQUFlLENBQUM7QUFDbkcsT0FBTyxFQUFjLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM3QyxPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQztBQVcvQixNQUFNLFVBQVUsb0JBQW9CLENBQ2hDLEtBQXVCLEVBQ3ZCLGdCQUFnRCxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUs7SUFFcEUsTUFBTSxHQUFHLEdBQUcsWUFBWSxFQUFrQixDQUFDO0lBQzNDLE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLGNBQWMsQ0FBQyxJQUFLLENBQUMsQ0FBQztJQUM5QyxNQUFNLE9BQU8sR0FBRyxFQUEyQyxDQUFDO0lBQzVELElBQUksTUFBTSxHQUFHLEVBQTJDLENBQUM7SUFFekQsTUFBTSxLQUFLLEdBQUcsRUFBMkIsQ0FBQztJQUMxQyxNQUFNLEtBQUssR0FBRyxFQUFjLENBQUM7SUFFN0IsTUFBTSxFQUFFLFFBQVEsRUFBRSxHQUFHLGdCQUFnQixDQUFDLEdBQUcsRUFBRTtRQUN2QyxlQUFlO1FBQ2YsTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNaLGtCQUFrQjtRQUNsQixNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ3RDLElBQUksR0FBRyxDQUFDLGFBQWEsRUFBRTtnQkFDbkIsS0FBSyxDQUFDLGFBQWEsQ0FBQyxNQUF3QyxFQUFFLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQzthQUNwRjtRQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0gsbUJBQW1CO1FBQ25CLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUMxQixDQUFDLENBQUMsQ0FBQztJQUVILGtCQUFrQixDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBRXZELEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7UUFDL0MsTUFBTSxLQUFLLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xDLEdBQUcsQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1FBRTFCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUM3QyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRWhDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3RCLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFakIsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRTtnQkFDdEMsVUFBVSxFQUFFLElBQUk7Z0JBQ2hCLEdBQUcsRUFBRSxHQUFHLEVBQUU7b0JBQ04sT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUNwRixDQUFDO2FBQ0osQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUNULE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7YUFDN0I7U0FDSjtJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsT0FBTyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQztBQUNqRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0QmVmb3JlUmVuZGVyLCBpbmplY3ROZ3REZXN0cm95LCBpbmplY3ROZ3RSZWYsIE5ndEluamVjdGVkUmVmIH0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcbmltcG9ydCAqIGFzIFRIUkVFIGZyb20gJ3RocmVlJztcbmltcG9ydCB7IEdMVEYgfSBmcm9tICd0aHJlZS1zdGRsaWInO1xuXG50eXBlIEFwaSA9IHtcbiAgICByZWY6IE5ndEluamVjdGVkUmVmPFRIUkVFLk9iamVjdDNEPjtcbiAgICBjbGlwczogVEhSRUUuQW5pbWF0aW9uQ2xpcFtdO1xuICAgIG1peGVyOiBUSFJFRS5BbmltYXRpb25NaXhlcjtcbiAgICBuYW1lczogc3RyaW5nW107XG4gICAgYWN0aW9uczogUmVjb3JkPHN0cmluZywgVEhSRUUuQW5pbWF0aW9uQWN0aW9uPjtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3ROZ3RzQW5pbWF0aW9ucyhcbiAgICBnbHRmJDogT2JzZXJ2YWJsZTxHTFRGPixcbiAgICBtb2RlbFNlbGVjdG9yOiAoZ2x0ZjogR0xURikgPT4gVEhSRUUuT2JqZWN0M0QgPSAoZ2x0ZikgPT4gZ2x0Zi5zY2VuZVxuKTogQXBpIHtcbiAgICBjb25zdCByZWYgPSBpbmplY3ROZ3RSZWY8VEhSRUUuT2JqZWN0M0Q+KCk7XG4gICAgY29uc3QgbWl4ZXIgPSBuZXcgVEhSRUUuQW5pbWF0aW9uTWl4ZXIobnVsbCEpO1xuICAgIGNvbnN0IGFjdGlvbnMgPSB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBUSFJFRS5BbmltYXRpb25BY3Rpb24+O1xuICAgIGxldCBjYWNoZWQgPSB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBUSFJFRS5BbmltYXRpb25BY3Rpb24+O1xuXG4gICAgY29uc3QgY2xpcHMgPSBbXSBhcyBUSFJFRS5BbmltYXRpb25DbGlwW107XG4gICAgY29uc3QgbmFtZXMgPSBbXSBhcyBzdHJpbmdbXTtcblxuICAgIGNvbnN0IHsgZGVzdHJveSQgfSA9IGluamVjdE5ndERlc3Ryb3koKCkgPT4ge1xuICAgICAgICAvLyBjbGVhciBjYWNoZWRcbiAgICAgICAgY2FjaGVkID0ge307XG4gICAgICAgIC8vIHVuY2FjaGUgYWN0aW9uc1xuICAgICAgICBPYmplY3QudmFsdWVzKGFjdGlvbnMpLmZvckVhY2goKGFjdGlvbikgPT4ge1xuICAgICAgICAgICAgaWYgKHJlZi5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgbWl4ZXIudW5jYWNoZUFjdGlvbihhY3Rpb24gYXMgdW5rbm93biBhcyBUSFJFRS5BbmltYXRpb25DbGlwLCByZWYubmF0aXZlRWxlbWVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBzdG9wIGFsbCBhY3Rpb25zXG4gICAgICAgIG1peGVyLnN0b3BBbGxBY3Rpb24oKTtcbiAgICB9KTtcblxuICAgIGluamVjdEJlZm9yZVJlbmRlcigoeyBkZWx0YSB9KSA9PiBtaXhlci51cGRhdGUoZGVsdGEpKTtcblxuICAgIGdsdGYkLnBpcGUodGFrZVVudGlsKGRlc3Ryb3kkKSkuc3Vic2NyaWJlKChnbHRmKSA9PiB7XG4gICAgICAgIGNvbnN0IG1vZGVsID0gbW9kZWxTZWxlY3RvcihnbHRmKTtcbiAgICAgICAgcmVmLm5hdGl2ZUVsZW1lbnQgPSBtb2RlbDtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGdsdGYuYW5pbWF0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgY2xpcCA9IGdsdGYuYW5pbWF0aW9uc1tpXTtcblxuICAgICAgICAgICAgbmFtZXMucHVzaChjbGlwLm5hbWUpO1xuICAgICAgICAgICAgY2xpcHMucHVzaChjbGlwKTtcblxuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGFjdGlvbnMsIGNsaXAubmFtZSwge1xuICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgZ2V0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWNoZWRbY2xpcC5uYW1lXSB8fCAoY2FjaGVkW2NsaXAubmFtZV0gPSBtaXhlci5jbGlwQWN0aW9uKGNsaXAsIG1vZGVsKSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGFjdGlvbnNbY2xpcC5uYW1lXS5wbGF5KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB7IHJlZiwgYWN0aW9ucywgbWl4ZXIsIG5hbWVzLCBjbGlwcyB9O1xufVxuIl19
@@ -1,57 +1,49 @@
1
- import { injectNgtRef, is, injectNgtDestroy, injectBeforeRender, NgtRxStore, NgtStore, safeDetectChanges } from 'angular-three';
2
- import { isObservable, of, takeUntil, combineLatest, map } from 'rxjs';
1
+ import { injectNgtRef, injectNgtDestroy, injectBeforeRender, NgtRxStore, NgtStore, safeDetectChanges } from 'angular-three';
2
+ import { takeUntil, isObservable, of, combineLatest, map } from 'rxjs';
3
3
  import * as THREE from 'three';
4
- import { AnimationMixer } from 'three';
5
4
  import * as i0 from '@angular/core';
6
5
  import { inject, Directive } from '@angular/core';
7
6
  import { __rest } from 'tslib';
8
7
 
9
- function injectNgtsAnimations(clips, object) {
10
- let ref = injectNgtRef();
11
- let sub;
12
- if (object) {
13
- if (isObservable(object)) {
14
- sub = object.subscribe((val) => {
15
- ref.nativeElement = val;
16
- });
17
- }
18
- else if (is.ref(object)) {
19
- ref = object;
20
- }
21
- else {
22
- ref.nativeElement = object;
23
- }
24
- }
25
- const mixer = new AnimationMixer(ref.nativeElement);
26
- let cached = {};
8
+ function injectNgtsAnimations(gltf$, modelSelector = (gltf) => gltf.scene) {
9
+ const ref = injectNgtRef();
10
+ const mixer = new THREE.AnimationMixer(null);
27
11
  const actions = {};
12
+ let cached = {};
13
+ const clips = [];
28
14
  const names = [];
29
- for (const clip of clips) {
30
- names.push(clip.name);
31
- Object.defineProperty(actions, clip.name, {
32
- enumerable: true,
33
- get: () => {
34
- if (ref.nativeElement) {
35
- const name = clip.name;
36
- return cached[name] || (cached[name] = mixer.clipAction(clip, ref.nativeElement));
37
- }
38
- },
39
- });
40
- }
41
- const api = { ref, clips, actions, names, mixer };
42
- injectNgtDestroy(() => {
43
- if (sub)
44
- sub.unsubscribe();
15
+ const { destroy$ } = injectNgtDestroy(() => {
16
+ // clear cached
45
17
  cached = {};
46
- Object.values(api.actions).forEach((action) => {
18
+ // uncache actions
19
+ Object.values(actions).forEach((action) => {
47
20
  if (ref.nativeElement) {
48
21
  mixer.uncacheAction(action, ref.nativeElement);
49
22
  }
50
23
  });
24
+ // stop all actions
51
25
  mixer.stopAllAction();
52
26
  });
53
27
  injectBeforeRender(({ delta }) => mixer.update(delta));
54
- return api;
28
+ gltf$.pipe(takeUntil(destroy$)).subscribe((gltf) => {
29
+ const model = modelSelector(gltf);
30
+ ref.nativeElement = model;
31
+ for (let i = 0; i < gltf.animations.length; i++) {
32
+ const clip = gltf.animations[i];
33
+ names.push(clip.name);
34
+ clips.push(clip);
35
+ Object.defineProperty(actions, clip.name, {
36
+ enumerable: true,
37
+ get: () => {
38
+ return cached[clip.name] || (cached[clip.name] = mixer.clipAction(clip, model));
39
+ },
40
+ });
41
+ if (i === 0) {
42
+ actions[clip.name].play();
43
+ }
44
+ }
45
+ });
46
+ return { ref, actions, mixer, names, clips };
55
47
  }
56
48
 
57
49
  class NgtsBakeShadows extends NgtRxStore {
@@ -1 +1 @@
1
- {"version":3,"file":"angular-three-soba-misc.mjs","sources":["../../../../libs/angular-three-soba/misc/src/lib/animations/animations.ts","../../../../libs/angular-three-soba/misc/src/lib/bake-shadows/bake-shadows.ts","../../../../libs/angular-three-soba/misc/src/lib/fbo/fbo.ts","../../../../libs/angular-three-soba/misc/src/lib/depth-buffer/depth-buffer.ts","../../../../libs/angular-three-soba/misc/src/angular-three-soba-misc.ts"],"sourcesContent":["import { injectBeforeRender, injectNgtDestroy, injectNgtRef, is, NgtInjectedRef } from 'angular-three';\nimport { isObservable, Observable, Subscription } from 'rxjs';\nimport { AnimationMixer } from 'three';\n\ntype Api<T extends THREE.AnimationClip> = {\n ref: NgtInjectedRef<THREE.Object3D>;\n clips: THREE.AnimationClip[];\n mixer: THREE.AnimationMixer;\n names: T['name'][];\n actions: { [key in T['name']]: THREE.AnimationAction | null };\n};\n\nexport function injectNgtsAnimations<T extends THREE.AnimationClip>(\n clips: T[],\n object?: Observable<THREE.Object3D> | THREE.Object3D | NgtInjectedRef<THREE.Object3D>\n): Api<T> {\n let ref = injectNgtRef<THREE.Object3D>();\n\n let sub: Subscription;\n\n if (object) {\n if (isObservable(object)) {\n sub = object.subscribe((val) => {\n ref.nativeElement = val;\n });\n } else if (is.ref(object)) {\n ref = object;\n } else {\n ref.nativeElement = object;\n }\n }\n\n const mixer = new AnimationMixer(ref.nativeElement);\n\n let cached = {} as { [key in T['name']]: THREE.AnimationAction | null };\n const actions = {} as { [key in T['name']]: THREE.AnimationAction | null };\n const names = [] as T['name'][];\n\n for (const clip of clips) {\n names.push(clip.name);\n Object.defineProperty(actions, clip.name, {\n enumerable: true,\n get: () => {\n if (ref.nativeElement) {\n const name = clip.name as keyof typeof cached;\n return cached[name] || (cached[name] = mixer.clipAction(clip, ref.nativeElement));\n }\n },\n });\n }\n\n const api = { ref, clips, actions, names, mixer };\n\n injectNgtDestroy(() => {\n if (sub) sub.unsubscribe();\n cached = {} as { [key in T['name']]: THREE.AnimationAction | null };\n Object.values(api.actions).forEach((action) => {\n if (ref.nativeElement) {\n mixer.uncacheAction(action as THREE.AnimationClip, ref.nativeElement);\n }\n });\n mixer.stopAllAction();\n });\n\n injectBeforeRender(({ delta }) => mixer.update(delta));\n\n return api;\n}\n","import { Directive, inject, OnInit } from '@angular/core';\nimport { NgtRxStore, NgtStore } from 'angular-three';\n\n@Directive({ selector: 'ngts-bake-shadows', standalone: true })\nexport class NgtsBakeShadows extends NgtRxStore implements OnInit {\n private readonly store = inject(NgtStore);\n\n ngOnInit() {\n this.effect(this.store.select('gl'), (gl) => {\n gl.shadowMap.autoUpdate = false;\n gl.shadowMap.needsUpdate = true;\n\n return () => {\n gl.shadowMap.autoUpdate = gl.shadowMap.needsUpdate = true;\n };\n });\n }\n}\n","import { inject } from '@angular/core';\nimport { injectNgtDestroy, injectNgtRef, NgtStore, safeDetectChanges } from 'angular-three';\nimport { isObservable, Observable, of, takeUntil } from 'rxjs';\nimport * as THREE from 'three';\n\ninterface FBOSettings extends THREE.WebGLRenderTargetOptions {\n /** Defines the count of MSAA samples. Can only be used with WebGL 2. Default: 0 */\n samples?: number;\n /** If set, the scene depth will be rendered into buffer.depthTexture. Default: false */\n depth?: boolean;\n}\n\nexport interface NgtsFBOParams {\n width?: number | FBOSettings;\n height?: number;\n settings?: FBOSettings;\n}\n\nexport function injectNgtsFBO(\n paramsFactory: (defaultParams: Partial<NgtsFBOParams>) => NgtsFBOParams | Observable<NgtsFBOParams>\n) {\n const store = inject(NgtStore);\n const targetRef = injectNgtRef<THREE.WebGLRenderTarget>();\n const { destroy$, cdr } = injectNgtDestroy(() => {\n targetRef.nativeElement?.dispose();\n });\n const params = paramsFactory({});\n const params$ = isObservable(params) ? params : of(params);\n\n params$.pipe(takeUntil(destroy$)).subscribe(({ width, height, settings }) => {\n const { gl, size, viewport } = store.get();\n const _width = typeof width === 'number' ? width : size.width * viewport.dpr;\n const _height = typeof height === 'number' ? height : size.height * viewport.dpr;\n const _settings = (typeof width === 'number' ? settings : (width as FBOSettings)) || {};\n\n const { samples = 0, depth, ...targetSettings } = _settings;\n\n if (!targetRef.nativeElement) {\n const target = new THREE.WebGLRenderTarget(_width, _height, {\n minFilter: THREE.LinearFilter,\n magFilter: THREE.LinearFilter,\n encoding: gl.outputEncoding,\n type: THREE.HalfFloatType,\n ...targetSettings,\n });\n if (depth) target.depthTexture = new THREE.DepthTexture(_width, _height, THREE.FloatType);\n\n target.samples = samples;\n targetRef.nativeElement = target;\n }\n\n targetRef.nativeElement.setSize(_width, _height);\n if (samples) targetRef.nativeElement.samples = samples;\n safeDetectChanges(cdr);\n });\n\n return targetRef;\n}\n","import { inject } from '@angular/core';\nimport { injectBeforeRender, injectNgtDestroy, injectNgtRef, NgtStore } from 'angular-three';\nimport { combineLatest, isObservable, map, Observable, of, takeUntil } from 'rxjs';\nimport * as THREE from 'three';\nimport { injectNgtsFBO } from '../fbo/fbo';\n\nexport interface NgtsDepthBufferParams {\n size: number;\n frames: number;\n}\n\nexport function injectNgtsDepthBuffer(\n paramsFactory: (\n defaultParams: Partial<NgtsDepthBufferParams>\n ) => NgtsDepthBufferParams | Observable<NgtsDepthBufferParams> = (params) => params as NgtsDepthBufferParams\n) {\n const depthBufferRef = injectNgtRef<THREE.DepthTexture>();\n\n const store = inject(NgtStore);\n const { destroy$ } = injectNgtDestroy();\n\n const params = paramsFactory({ size: 256, frames: Infinity });\n const params$ = isObservable(params) ? params : of(params);\n\n let rawParams = { size: 256, frames: Infinity };\n\n const fbo = injectNgtsFBO(() => {\n return combineLatest([params$, store.select('size'), store.select('viewport', 'dpr')]).pipe(\n map(([params, size, dpr]) => {\n rawParams = params;\n const w = params.size || size.width * dpr;\n const h = params.size || size.height * dpr;\n const depthTexture = new THREE.DepthTexture(w, h);\n depthTexture.format = THREE.DepthFormat;\n depthTexture.type = THREE.UnsignedShortType;\n const depthConfig = { depthTexture };\n\n return { width: w, height: h, settings: depthConfig };\n })\n );\n });\n\n let count = 0;\n injectBeforeRender(({ gl, scene, camera }) => {\n if ((rawParams.frames === Infinity || count < rawParams.frames) && fbo.nativeElement) {\n gl.setRenderTarget(fbo.nativeElement);\n gl.render(scene, camera);\n gl.setRenderTarget(null);\n count++;\n }\n });\n\n fbo.$.pipe(takeUntil(destroy$)).subscribe((fbo) => {\n depthBufferRef.nativeElement = fbo.depthTexture;\n });\n\n return depthBufferRef;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"angular-three-soba-misc.mjs","sources":["../../../../libs/angular-three-soba/misc/src/lib/animations/animations.ts","../../../../libs/angular-three-soba/misc/src/lib/bake-shadows/bake-shadows.ts","../../../../libs/angular-three-soba/misc/src/lib/fbo/fbo.ts","../../../../libs/angular-three-soba/misc/src/lib/depth-buffer/depth-buffer.ts","../../../../libs/angular-three-soba/misc/src/angular-three-soba-misc.ts"],"sourcesContent":["import { injectBeforeRender, injectNgtDestroy, injectNgtRef, NgtInjectedRef } from 'angular-three';\nimport { Observable, takeUntil } from 'rxjs';\nimport * as THREE from 'three';\nimport { GLTF } from 'three-stdlib';\n\ntype Api = {\n ref: NgtInjectedRef<THREE.Object3D>;\n clips: THREE.AnimationClip[];\n mixer: THREE.AnimationMixer;\n names: string[];\n actions: Record<string, THREE.AnimationAction>;\n};\n\nexport function injectNgtsAnimations(\n gltf$: Observable<GLTF>,\n modelSelector: (gltf: GLTF) => THREE.Object3D = (gltf) => gltf.scene\n): Api {\n const ref = injectNgtRef<THREE.Object3D>();\n const mixer = new THREE.AnimationMixer(null!);\n const actions = {} as Record<string, THREE.AnimationAction>;\n let cached = {} as Record<string, THREE.AnimationAction>;\n\n const clips = [] as THREE.AnimationClip[];\n const names = [] as string[];\n\n const { destroy$ } = injectNgtDestroy(() => {\n // clear cached\n cached = {};\n // uncache actions\n Object.values(actions).forEach((action) => {\n if (ref.nativeElement) {\n mixer.uncacheAction(action as unknown as THREE.AnimationClip, ref.nativeElement);\n }\n });\n // stop all actions\n mixer.stopAllAction();\n });\n\n injectBeforeRender(({ delta }) => mixer.update(delta));\n\n gltf$.pipe(takeUntil(destroy$)).subscribe((gltf) => {\n const model = modelSelector(gltf);\n ref.nativeElement = model;\n\n for (let i = 0; i < gltf.animations.length; i++) {\n const clip = gltf.animations[i];\n\n names.push(clip.name);\n clips.push(clip);\n\n Object.defineProperty(actions, clip.name, {\n enumerable: true,\n get: () => {\n return cached[clip.name] || (cached[clip.name] = mixer.clipAction(clip, model));\n },\n });\n\n if (i === 0) {\n actions[clip.name].play();\n }\n }\n });\n\n return { ref, actions, mixer, names, clips };\n}\n","import { Directive, inject, OnInit } from '@angular/core';\nimport { NgtRxStore, NgtStore } from 'angular-three';\n\n@Directive({ selector: 'ngts-bake-shadows', standalone: true })\nexport class NgtsBakeShadows extends NgtRxStore implements OnInit {\n private readonly store = inject(NgtStore);\n\n ngOnInit() {\n this.effect(this.store.select('gl'), (gl) => {\n gl.shadowMap.autoUpdate = false;\n gl.shadowMap.needsUpdate = true;\n\n return () => {\n gl.shadowMap.autoUpdate = gl.shadowMap.needsUpdate = true;\n };\n });\n }\n}\n","import { inject } from '@angular/core';\nimport { injectNgtDestroy, injectNgtRef, NgtStore, safeDetectChanges } from 'angular-three';\nimport { isObservable, Observable, of, takeUntil } from 'rxjs';\nimport * as THREE from 'three';\n\ninterface FBOSettings extends THREE.WebGLRenderTargetOptions {\n /** Defines the count of MSAA samples. Can only be used with WebGL 2. Default: 0 */\n samples?: number;\n /** If set, the scene depth will be rendered into buffer.depthTexture. Default: false */\n depth?: boolean;\n}\n\nexport interface NgtsFBOParams {\n width?: number | FBOSettings;\n height?: number;\n settings?: FBOSettings;\n}\n\nexport function injectNgtsFBO(\n paramsFactory: (defaultParams: Partial<NgtsFBOParams>) => NgtsFBOParams | Observable<NgtsFBOParams>\n) {\n const store = inject(NgtStore);\n const targetRef = injectNgtRef<THREE.WebGLRenderTarget>();\n const { destroy$, cdr } = injectNgtDestroy(() => {\n targetRef.nativeElement?.dispose();\n });\n const params = paramsFactory({});\n const params$ = isObservable(params) ? params : of(params);\n\n params$.pipe(takeUntil(destroy$)).subscribe(({ width, height, settings }) => {\n const { gl, size, viewport } = store.get();\n const _width = typeof width === 'number' ? width : size.width * viewport.dpr;\n const _height = typeof height === 'number' ? height : size.height * viewport.dpr;\n const _settings = (typeof width === 'number' ? settings : (width as FBOSettings)) || {};\n\n const { samples = 0, depth, ...targetSettings } = _settings;\n\n if (!targetRef.nativeElement) {\n const target = new THREE.WebGLRenderTarget(_width, _height, {\n minFilter: THREE.LinearFilter,\n magFilter: THREE.LinearFilter,\n encoding: gl.outputEncoding,\n type: THREE.HalfFloatType,\n ...targetSettings,\n });\n if (depth) target.depthTexture = new THREE.DepthTexture(_width, _height, THREE.FloatType);\n\n target.samples = samples;\n targetRef.nativeElement = target;\n }\n\n targetRef.nativeElement.setSize(_width, _height);\n if (samples) targetRef.nativeElement.samples = samples;\n safeDetectChanges(cdr);\n });\n\n return targetRef;\n}\n","import { inject } from '@angular/core';\nimport { injectBeforeRender, injectNgtDestroy, injectNgtRef, NgtStore } from 'angular-three';\nimport { combineLatest, isObservable, map, Observable, of, takeUntil } from 'rxjs';\nimport * as THREE from 'three';\nimport { injectNgtsFBO } from '../fbo/fbo';\n\nexport interface NgtsDepthBufferParams {\n size: number;\n frames: number;\n}\n\nexport function injectNgtsDepthBuffer(\n paramsFactory: (\n defaultParams: Partial<NgtsDepthBufferParams>\n ) => NgtsDepthBufferParams | Observable<NgtsDepthBufferParams> = (params) => params as NgtsDepthBufferParams\n) {\n const depthBufferRef = injectNgtRef<THREE.DepthTexture>();\n\n const store = inject(NgtStore);\n const { destroy$ } = injectNgtDestroy();\n\n const params = paramsFactory({ size: 256, frames: Infinity });\n const params$ = isObservable(params) ? params : of(params);\n\n let rawParams = { size: 256, frames: Infinity };\n\n const fbo = injectNgtsFBO(() => {\n return combineLatest([params$, store.select('size'), store.select('viewport', 'dpr')]).pipe(\n map(([params, size, dpr]) => {\n rawParams = params;\n const w = params.size || size.width * dpr;\n const h = params.size || size.height * dpr;\n const depthTexture = new THREE.DepthTexture(w, h);\n depthTexture.format = THREE.DepthFormat;\n depthTexture.type = THREE.UnsignedShortType;\n const depthConfig = { depthTexture };\n\n return { width: w, height: h, settings: depthConfig };\n })\n );\n });\n\n let count = 0;\n injectBeforeRender(({ gl, scene, camera }) => {\n if ((rawParams.frames === Infinity || count < rawParams.frames) && fbo.nativeElement) {\n gl.setRenderTarget(fbo.nativeElement);\n gl.render(scene, camera);\n gl.setRenderTarget(null);\n count++;\n }\n });\n\n fbo.$.pipe(takeUntil(destroy$)).subscribe((fbo) => {\n depthBufferRef.nativeElement = fbo.depthTexture;\n });\n\n return depthBufferRef;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1,56 +1,48 @@
1
- import { injectNgtRef, is, injectNgtDestroy, injectBeforeRender, NgtRxStore, NgtStore, safeDetectChanges } from 'angular-three';
2
- import { isObservable, of, takeUntil, combineLatest, map } from 'rxjs';
1
+ import { injectNgtRef, injectNgtDestroy, injectBeforeRender, NgtRxStore, NgtStore, safeDetectChanges } from 'angular-three';
2
+ import { takeUntil, isObservable, of, combineLatest, map } from 'rxjs';
3
3
  import * as THREE from 'three';
4
- import { AnimationMixer } from 'three';
5
4
  import * as i0 from '@angular/core';
6
5
  import { inject, Directive } from '@angular/core';
7
6
 
8
- function injectNgtsAnimations(clips, object) {
9
- let ref = injectNgtRef();
10
- let sub;
11
- if (object) {
12
- if (isObservable(object)) {
13
- sub = object.subscribe((val) => {
14
- ref.nativeElement = val;
15
- });
16
- }
17
- else if (is.ref(object)) {
18
- ref = object;
19
- }
20
- else {
21
- ref.nativeElement = object;
22
- }
23
- }
24
- const mixer = new AnimationMixer(ref.nativeElement);
25
- let cached = {};
7
+ function injectNgtsAnimations(gltf$, modelSelector = (gltf) => gltf.scene) {
8
+ const ref = injectNgtRef();
9
+ const mixer = new THREE.AnimationMixer(null);
26
10
  const actions = {};
11
+ let cached = {};
12
+ const clips = [];
27
13
  const names = [];
28
- for (const clip of clips) {
29
- names.push(clip.name);
30
- Object.defineProperty(actions, clip.name, {
31
- enumerable: true,
32
- get: () => {
33
- if (ref.nativeElement) {
34
- const name = clip.name;
35
- return cached[name] || (cached[name] = mixer.clipAction(clip, ref.nativeElement));
36
- }
37
- },
38
- });
39
- }
40
- const api = { ref, clips, actions, names, mixer };
41
- injectNgtDestroy(() => {
42
- if (sub)
43
- sub.unsubscribe();
14
+ const { destroy$ } = injectNgtDestroy(() => {
15
+ // clear cached
44
16
  cached = {};
45
- Object.values(api.actions).forEach((action) => {
17
+ // uncache actions
18
+ Object.values(actions).forEach((action) => {
46
19
  if (ref.nativeElement) {
47
20
  mixer.uncacheAction(action, ref.nativeElement);
48
21
  }
49
22
  });
23
+ // stop all actions
50
24
  mixer.stopAllAction();
51
25
  });
52
26
  injectBeforeRender(({ delta }) => mixer.update(delta));
53
- return api;
27
+ gltf$.pipe(takeUntil(destroy$)).subscribe((gltf) => {
28
+ const model = modelSelector(gltf);
29
+ ref.nativeElement = model;
30
+ for (let i = 0; i < gltf.animations.length; i++) {
31
+ const clip = gltf.animations[i];
32
+ names.push(clip.name);
33
+ clips.push(clip);
34
+ Object.defineProperty(actions, clip.name, {
35
+ enumerable: true,
36
+ get: () => {
37
+ return cached[clip.name] || (cached[clip.name] = mixer.clipAction(clip, model));
38
+ },
39
+ });
40
+ if (i === 0) {
41
+ actions[clip.name].play();
42
+ }
43
+ }
44
+ });
45
+ return { ref, actions, mixer, names, clips };
54
46
  }
55
47
 
56
48
  class NgtsBakeShadows extends NgtRxStore {
@@ -1 +1 @@
1
- {"version":3,"file":"angular-three-soba-misc.mjs","sources":["../../../../libs/angular-three-soba/misc/src/lib/animations/animations.ts","../../../../libs/angular-three-soba/misc/src/lib/bake-shadows/bake-shadows.ts","../../../../libs/angular-three-soba/misc/src/lib/fbo/fbo.ts","../../../../libs/angular-three-soba/misc/src/lib/depth-buffer/depth-buffer.ts","../../../../libs/angular-three-soba/misc/src/angular-three-soba-misc.ts"],"sourcesContent":["import { injectBeforeRender, injectNgtDestroy, injectNgtRef, is, NgtInjectedRef } from 'angular-three';\nimport { isObservable, Observable, Subscription } from 'rxjs';\nimport { AnimationMixer } from 'three';\n\ntype Api<T extends THREE.AnimationClip> = {\n ref: NgtInjectedRef<THREE.Object3D>;\n clips: THREE.AnimationClip[];\n mixer: THREE.AnimationMixer;\n names: T['name'][];\n actions: { [key in T['name']]: THREE.AnimationAction | null };\n};\n\nexport function injectNgtsAnimations<T extends THREE.AnimationClip>(\n clips: T[],\n object?: Observable<THREE.Object3D> | THREE.Object3D | NgtInjectedRef<THREE.Object3D>\n): Api<T> {\n let ref = injectNgtRef<THREE.Object3D>();\n\n let sub: Subscription;\n\n if (object) {\n if (isObservable(object)) {\n sub = object.subscribe((val) => {\n ref.nativeElement = val;\n });\n } else if (is.ref(object)) {\n ref = object;\n } else {\n ref.nativeElement = object;\n }\n }\n\n const mixer = new AnimationMixer(ref.nativeElement);\n\n let cached = {} as { [key in T['name']]: THREE.AnimationAction | null };\n const actions = {} as { [key in T['name']]: THREE.AnimationAction | null };\n const names = [] as T['name'][];\n\n for (const clip of clips) {\n names.push(clip.name);\n Object.defineProperty(actions, clip.name, {\n enumerable: true,\n get: () => {\n if (ref.nativeElement) {\n const name = clip.name as keyof typeof cached;\n return cached[name] || (cached[name] = mixer.clipAction(clip, ref.nativeElement));\n }\n },\n });\n }\n\n const api = { ref, clips, actions, names, mixer };\n\n injectNgtDestroy(() => {\n if (sub) sub.unsubscribe();\n cached = {} as { [key in T['name']]: THREE.AnimationAction | null };\n Object.values(api.actions).forEach((action) => {\n if (ref.nativeElement) {\n mixer.uncacheAction(action as THREE.AnimationClip, ref.nativeElement);\n }\n });\n mixer.stopAllAction();\n });\n\n injectBeforeRender(({ delta }) => mixer.update(delta));\n\n return api;\n}\n","import { Directive, inject, OnInit } from '@angular/core';\nimport { NgtRxStore, NgtStore } from 'angular-three';\n\n@Directive({ selector: 'ngts-bake-shadows', standalone: true })\nexport class NgtsBakeShadows extends NgtRxStore implements OnInit {\n private readonly store = inject(NgtStore);\n\n ngOnInit() {\n this.effect(this.store.select('gl'), (gl) => {\n gl.shadowMap.autoUpdate = false;\n gl.shadowMap.needsUpdate = true;\n\n return () => {\n gl.shadowMap.autoUpdate = gl.shadowMap.needsUpdate = true;\n };\n });\n }\n}\n","import { inject } from '@angular/core';\nimport { injectNgtDestroy, injectNgtRef, NgtStore, safeDetectChanges } from 'angular-three';\nimport { isObservable, Observable, of, takeUntil } from 'rxjs';\nimport * as THREE from 'three';\n\ninterface FBOSettings extends THREE.WebGLRenderTargetOptions {\n /** Defines the count of MSAA samples. Can only be used with WebGL 2. Default: 0 */\n samples?: number;\n /** If set, the scene depth will be rendered into buffer.depthTexture. Default: false */\n depth?: boolean;\n}\n\nexport interface NgtsFBOParams {\n width?: number | FBOSettings;\n height?: number;\n settings?: FBOSettings;\n}\n\nexport function injectNgtsFBO(\n paramsFactory: (defaultParams: Partial<NgtsFBOParams>) => NgtsFBOParams | Observable<NgtsFBOParams>\n) {\n const store = inject(NgtStore);\n const targetRef = injectNgtRef<THREE.WebGLRenderTarget>();\n const { destroy$, cdr } = injectNgtDestroy(() => {\n targetRef.nativeElement?.dispose();\n });\n const params = paramsFactory({});\n const params$ = isObservable(params) ? params : of(params);\n\n params$.pipe(takeUntil(destroy$)).subscribe(({ width, height, settings }) => {\n const { gl, size, viewport } = store.get();\n const _width = typeof width === 'number' ? width : size.width * viewport.dpr;\n const _height = typeof height === 'number' ? height : size.height * viewport.dpr;\n const _settings = (typeof width === 'number' ? settings : (width as FBOSettings)) || {};\n\n const { samples = 0, depth, ...targetSettings } = _settings;\n\n if (!targetRef.nativeElement) {\n const target = new THREE.WebGLRenderTarget(_width, _height, {\n minFilter: THREE.LinearFilter,\n magFilter: THREE.LinearFilter,\n encoding: gl.outputEncoding,\n type: THREE.HalfFloatType,\n ...targetSettings,\n });\n if (depth) target.depthTexture = new THREE.DepthTexture(_width, _height, THREE.FloatType);\n\n target.samples = samples;\n targetRef.nativeElement = target;\n }\n\n targetRef.nativeElement.setSize(_width, _height);\n if (samples) targetRef.nativeElement.samples = samples;\n safeDetectChanges(cdr);\n });\n\n return targetRef;\n}\n","import { inject } from '@angular/core';\nimport { injectBeforeRender, injectNgtDestroy, injectNgtRef, NgtStore } from 'angular-three';\nimport { combineLatest, isObservable, map, Observable, of, takeUntil } from 'rxjs';\nimport * as THREE from 'three';\nimport { injectNgtsFBO } from '../fbo/fbo';\n\nexport interface NgtsDepthBufferParams {\n size: number;\n frames: number;\n}\n\nexport function injectNgtsDepthBuffer(\n paramsFactory: (\n defaultParams: Partial<NgtsDepthBufferParams>\n ) => NgtsDepthBufferParams | Observable<NgtsDepthBufferParams> = (params) => params as NgtsDepthBufferParams\n) {\n const depthBufferRef = injectNgtRef<THREE.DepthTexture>();\n\n const store = inject(NgtStore);\n const { destroy$ } = injectNgtDestroy();\n\n const params = paramsFactory({ size: 256, frames: Infinity });\n const params$ = isObservable(params) ? params : of(params);\n\n let rawParams = { size: 256, frames: Infinity };\n\n const fbo = injectNgtsFBO(() => {\n return combineLatest([params$, store.select('size'), store.select('viewport', 'dpr')]).pipe(\n map(([params, size, dpr]) => {\n rawParams = params;\n const w = params.size || size.width * dpr;\n const h = params.size || size.height * dpr;\n const depthTexture = new THREE.DepthTexture(w, h);\n depthTexture.format = THREE.DepthFormat;\n depthTexture.type = THREE.UnsignedShortType;\n const depthConfig = { depthTexture };\n\n return { width: w, height: h, settings: depthConfig };\n })\n );\n });\n\n let count = 0;\n injectBeforeRender(({ gl, scene, camera }) => {\n if ((rawParams.frames === Infinity || count < rawParams.frames) && fbo.nativeElement) {\n gl.setRenderTarget(fbo.nativeElement);\n gl.render(scene, camera);\n gl.setRenderTarget(null);\n count++;\n }\n });\n\n fbo.$.pipe(takeUntil(destroy$)).subscribe((fbo) => {\n depthBufferRef.nativeElement = fbo.depthTexture;\n });\n\n return depthBufferRef;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"angular-three-soba-misc.mjs","sources":["../../../../libs/angular-three-soba/misc/src/lib/animations/animations.ts","../../../../libs/angular-three-soba/misc/src/lib/bake-shadows/bake-shadows.ts","../../../../libs/angular-three-soba/misc/src/lib/fbo/fbo.ts","../../../../libs/angular-three-soba/misc/src/lib/depth-buffer/depth-buffer.ts","../../../../libs/angular-three-soba/misc/src/angular-three-soba-misc.ts"],"sourcesContent":["import { injectBeforeRender, injectNgtDestroy, injectNgtRef, NgtInjectedRef } from 'angular-three';\nimport { Observable, takeUntil } from 'rxjs';\nimport * as THREE from 'three';\nimport { GLTF } from 'three-stdlib';\n\ntype Api = {\n ref: NgtInjectedRef<THREE.Object3D>;\n clips: THREE.AnimationClip[];\n mixer: THREE.AnimationMixer;\n names: string[];\n actions: Record<string, THREE.AnimationAction>;\n};\n\nexport function injectNgtsAnimations(\n gltf$: Observable<GLTF>,\n modelSelector: (gltf: GLTF) => THREE.Object3D = (gltf) => gltf.scene\n): Api {\n const ref = injectNgtRef<THREE.Object3D>();\n const mixer = new THREE.AnimationMixer(null!);\n const actions = {} as Record<string, THREE.AnimationAction>;\n let cached = {} as Record<string, THREE.AnimationAction>;\n\n const clips = [] as THREE.AnimationClip[];\n const names = [] as string[];\n\n const { destroy$ } = injectNgtDestroy(() => {\n // clear cached\n cached = {};\n // uncache actions\n Object.values(actions).forEach((action) => {\n if (ref.nativeElement) {\n mixer.uncacheAction(action as unknown as THREE.AnimationClip, ref.nativeElement);\n }\n });\n // stop all actions\n mixer.stopAllAction();\n });\n\n injectBeforeRender(({ delta }) => mixer.update(delta));\n\n gltf$.pipe(takeUntil(destroy$)).subscribe((gltf) => {\n const model = modelSelector(gltf);\n ref.nativeElement = model;\n\n for (let i = 0; i < gltf.animations.length; i++) {\n const clip = gltf.animations[i];\n\n names.push(clip.name);\n clips.push(clip);\n\n Object.defineProperty(actions, clip.name, {\n enumerable: true,\n get: () => {\n return cached[clip.name] || (cached[clip.name] = mixer.clipAction(clip, model));\n },\n });\n\n if (i === 0) {\n actions[clip.name].play();\n }\n }\n });\n\n return { ref, actions, mixer, names, clips };\n}\n","import { Directive, inject, OnInit } from '@angular/core';\nimport { NgtRxStore, NgtStore } from 'angular-three';\n\n@Directive({ selector: 'ngts-bake-shadows', standalone: true })\nexport class NgtsBakeShadows extends NgtRxStore implements OnInit {\n private readonly store = inject(NgtStore);\n\n ngOnInit() {\n this.effect(this.store.select('gl'), (gl) => {\n gl.shadowMap.autoUpdate = false;\n gl.shadowMap.needsUpdate = true;\n\n return () => {\n gl.shadowMap.autoUpdate = gl.shadowMap.needsUpdate = true;\n };\n });\n }\n}\n","import { inject } from '@angular/core';\nimport { injectNgtDestroy, injectNgtRef, NgtStore, safeDetectChanges } from 'angular-three';\nimport { isObservable, Observable, of, takeUntil } from 'rxjs';\nimport * as THREE from 'three';\n\ninterface FBOSettings extends THREE.WebGLRenderTargetOptions {\n /** Defines the count of MSAA samples. Can only be used with WebGL 2. Default: 0 */\n samples?: number;\n /** If set, the scene depth will be rendered into buffer.depthTexture. Default: false */\n depth?: boolean;\n}\n\nexport interface NgtsFBOParams {\n width?: number | FBOSettings;\n height?: number;\n settings?: FBOSettings;\n}\n\nexport function injectNgtsFBO(\n paramsFactory: (defaultParams: Partial<NgtsFBOParams>) => NgtsFBOParams | Observable<NgtsFBOParams>\n) {\n const store = inject(NgtStore);\n const targetRef = injectNgtRef<THREE.WebGLRenderTarget>();\n const { destroy$, cdr } = injectNgtDestroy(() => {\n targetRef.nativeElement?.dispose();\n });\n const params = paramsFactory({});\n const params$ = isObservable(params) ? params : of(params);\n\n params$.pipe(takeUntil(destroy$)).subscribe(({ width, height, settings }) => {\n const { gl, size, viewport } = store.get();\n const _width = typeof width === 'number' ? width : size.width * viewport.dpr;\n const _height = typeof height === 'number' ? height : size.height * viewport.dpr;\n const _settings = (typeof width === 'number' ? settings : (width as FBOSettings)) || {};\n\n const { samples = 0, depth, ...targetSettings } = _settings;\n\n if (!targetRef.nativeElement) {\n const target = new THREE.WebGLRenderTarget(_width, _height, {\n minFilter: THREE.LinearFilter,\n magFilter: THREE.LinearFilter,\n encoding: gl.outputEncoding,\n type: THREE.HalfFloatType,\n ...targetSettings,\n });\n if (depth) target.depthTexture = new THREE.DepthTexture(_width, _height, THREE.FloatType);\n\n target.samples = samples;\n targetRef.nativeElement = target;\n }\n\n targetRef.nativeElement.setSize(_width, _height);\n if (samples) targetRef.nativeElement.samples = samples;\n safeDetectChanges(cdr);\n });\n\n return targetRef;\n}\n","import { inject } from '@angular/core';\nimport { injectBeforeRender, injectNgtDestroy, injectNgtRef, NgtStore } from 'angular-three';\nimport { combineLatest, isObservable, map, Observable, of, takeUntil } from 'rxjs';\nimport * as THREE from 'three';\nimport { injectNgtsFBO } from '../fbo/fbo';\n\nexport interface NgtsDepthBufferParams {\n size: number;\n frames: number;\n}\n\nexport function injectNgtsDepthBuffer(\n paramsFactory: (\n defaultParams: Partial<NgtsDepthBufferParams>\n ) => NgtsDepthBufferParams | Observable<NgtsDepthBufferParams> = (params) => params as NgtsDepthBufferParams\n) {\n const depthBufferRef = injectNgtRef<THREE.DepthTexture>();\n\n const store = inject(NgtStore);\n const { destroy$ } = injectNgtDestroy();\n\n const params = paramsFactory({ size: 256, frames: Infinity });\n const params$ = isObservable(params) ? params : of(params);\n\n let rawParams = { size: 256, frames: Infinity };\n\n const fbo = injectNgtsFBO(() => {\n return combineLatest([params$, store.select('size'), store.select('viewport', 'dpr')]).pipe(\n map(([params, size, dpr]) => {\n rawParams = params;\n const w = params.size || size.width * dpr;\n const h = params.size || size.height * dpr;\n const depthTexture = new THREE.DepthTexture(w, h);\n depthTexture.format = THREE.DepthFormat;\n depthTexture.type = THREE.UnsignedShortType;\n const depthConfig = { depthTexture };\n\n return { width: w, height: h, settings: depthConfig };\n })\n );\n });\n\n let count = 0;\n injectBeforeRender(({ gl, scene, camera }) => {\n if ((rawParams.frames === Infinity || count < rawParams.frames) && fbo.nativeElement) {\n gl.setRenderTarget(fbo.nativeElement);\n gl.render(scene, camera);\n gl.setRenderTarget(null);\n count++;\n }\n });\n\n fbo.$.pipe(takeUntil(destroy$)).subscribe((fbo) => {\n depthBufferRef.nativeElement = fbo.depthTexture;\n });\n\n return depthBufferRef;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1,13 +1,13 @@
1
1
  import { NgtInjectedRef } from 'angular-three';
2
2
  import { Observable } from 'rxjs';
3
- type Api<T extends THREE.AnimationClip> = {
3
+ import * as THREE from 'three';
4
+ import { GLTF } from 'three-stdlib';
5
+ type Api = {
4
6
  ref: NgtInjectedRef<THREE.Object3D>;
5
7
  clips: THREE.AnimationClip[];
6
8
  mixer: THREE.AnimationMixer;
7
- names: T['name'][];
8
- actions: {
9
- [key in T['name']]: THREE.AnimationAction | null;
10
- };
9
+ names: string[];
10
+ actions: Record<string, THREE.AnimationAction>;
11
11
  };
12
- export declare function injectNgtsAnimations<T extends THREE.AnimationClip>(clips: T[], object?: Observable<THREE.Object3D> | THREE.Object3D | NgtInjectedRef<THREE.Object3D>): Api<T>;
12
+ export declare function injectNgtsAnimations(gltf$: Observable<GLTF>, modelSelector?: (gltf: GLTF) => THREE.Object3D): Api;
13
13
  export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "angular-three-soba",
3
- "version": "1.12.0",
3
+ "version": "1.12.2",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -115,9 +115,9 @@
115
115
  "three-mesh-bvh": "^0.5.0",
116
116
  "three-stdlib": "^2.0.0",
117
117
  "troika-three-text": "^0.47.0",
118
+ "rxjs": "~7.8.0",
118
119
  "@storybook/addons": "6.5.16",
119
- "@storybook/theming": "6.5.16",
120
- "rxjs": "~7.8.0"
120
+ "@storybook/theming": "6.5.16"
121
121
  },
122
122
  "dependencies": {
123
123
  "@nrwl/devkit": "^15.0.0",
@@ -5,5 +5,5 @@
5
5
  },
6
6
  "main": "./src/index.js",
7
7
  "types": "./src/index.d.ts",
8
- "version": "1.12.0"
8
+ "version": "1.12.2"
9
9
  }