angular-three-soba 1.12.0 → 1.12.1

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,52 @@
1
1
  import { injectBeforeRender, injectNgtDestroy, injectNgtRef, is } from 'angular-three';
2
- import { isObservable } from 'rxjs';
3
2
  import { AnimationMixer } from 'three';
4
- export function injectNgtsAnimations(clips, object) {
3
+ export function injectNgtsAnimations() {
5
4
  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;
5
+ const mixer = new AnimationMixer(null);
6
+ const cleanUps = [];
7
+ injectNgtDestroy(() => {
8
+ cleanUps.forEach((cleanUp) => cleanUp());
9
+ });
10
+ injectBeforeRender(({ delta }) => mixer.update(delta));
11
+ const api = (clips, object) => {
12
+ let cached = {};
13
+ const actions = {};
14
+ const names = [];
15
+ if (object) {
16
+ if (is.ref(object)) {
17
+ ref = object;
18
+ }
19
+ else {
20
+ ref.nativeElement = object;
21
+ }
15
22
  }
16
- else {
17
- ref.nativeElement = object;
23
+ for (const clip of clips) {
24
+ names.push(clip.name);
25
+ Object.defineProperty(actions, clip.name, {
26
+ enumerable: true,
27
+ get: () => {
28
+ if (ref.nativeElement) {
29
+ const name = clip.name;
30
+ return cached[name] || (cached[name] = mixer.clipAction(clip, ref.nativeElement));
31
+ }
32
+ },
33
+ });
18
34
  }
19
- }
20
- const mixer = new AnimationMixer(ref.nativeElement);
21
- let cached = {};
22
- const actions = {};
23
- const names = [];
24
- for (const clip of clips) {
25
- names.push(clip.name);
26
- Object.defineProperty(actions, clip.name, {
27
- enumerable: true,
28
- get: () => {
35
+ cleanUps.push(() => {
36
+ cached = {};
37
+ Object.values(actions).forEach((action) => {
29
38
  if (ref.nativeElement) {
30
- const name = clip.name;
31
- return cached[name] || (cached[name] = mixer.clipAction(clip, ref.nativeElement));
39
+ mixer.uncacheAction(action, ref.nativeElement);
32
40
  }
33
- },
34
- });
35
- }
36
- const api = { ref, clips, actions, names, mixer };
37
- injectNgtDestroy(() => {
38
- if (sub)
39
- sub.unsubscribe();
40
- cached = {};
41
- Object.values(api.actions).forEach((action) => {
42
- if (ref.nativeElement) {
43
- mixer.uncacheAction(action, ref.nativeElement);
44
- }
41
+ });
42
+ mixer.stopAllAction();
45
43
  });
46
- mixer.stopAllAction();
47
- });
48
- injectBeforeRender(({ delta }) => mixer.update(delta));
44
+ api.clips = clips;
45
+ api.actions = actions;
46
+ api.names = names;
47
+ };
48
+ api.ref = ref;
49
+ api.mixer = mixer;
49
50
  return api;
50
51
  }
51
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5pbWF0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci10aHJlZS1zb2JhL21pc2Mvc3JjL2xpYi9hbmltYXRpb25zL2FuaW1hdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLFlBQVksRUFBRSxFQUFFLEVBQWtCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZHLE9BQU8sRUFBRSxZQUFZLEVBQTRCLE1BQU0sTUFBTSxDQUFDO0FBQzlELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFVdkMsTUFBTSxVQUFVLG9CQUFvQixDQUNoQyxLQUFVLEVBQ1YsTUFBcUY7SUFFckYsSUFBSSxHQUFHLEdBQUcsWUFBWSxFQUFrQixDQUFDO0lBRXpDLElBQUksR0FBaUIsQ0FBQztJQUV0QixJQUFJLE1BQU0sRUFBRTtRQUNSLElBQUksWUFBWSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3RCLEdBQUcsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQzNCLEdBQUcsQ0FBQyxhQUFhLEdBQUcsR0FBRyxDQUFDO1lBQzVCLENBQUMsQ0FBQyxDQUFDO1NBQ047YUFBTSxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDdkIsR0FBRyxHQUFHLE1BQU0sQ0FBQztTQUNoQjthQUFNO1lBQ0gsR0FBRyxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUM7U0FDOUI7S0FDSjtJQUVELE1BQU0sS0FBSyxHQUFHLElBQUksY0FBYyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUVwRCxJQUFJLE1BQU0sR0FBRyxFQUEwRCxDQUFDO0lBQ3hFLE1BQU0sT0FBTyxHQUFHLEVBQTBELENBQUM7SUFDM0UsTUFBTSxLQUFLLEdBQUcsRUFBaUIsQ0FBQztJQUVoQyxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRTtRQUN0QixLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QixNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ3RDLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLEdBQUcsRUFBRSxHQUFHLEVBQUU7Z0JBQ04sSUFBSSxHQUFHLENBQUMsYUFBYSxFQUFFO29CQUNuQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBMkIsQ0FBQztvQkFDOUMsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7aUJBQ3JGO1lBQ0wsQ0FBQztTQUNKLENBQUMsQ0FBQztLQUNOO0lBRUQsTUFBTSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFFbEQsZ0JBQWdCLENBQUMsR0FBRyxFQUFFO1FBQ2xCLElBQUksR0FBRztZQUFFLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMzQixNQUFNLEdBQUcsRUFBMEQsQ0FBQztRQUNwRSxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUMxQyxJQUFJLEdBQUcsQ0FBQyxhQUFhLEVBQUU7Z0JBQ25CLEtBQUssQ0FBQyxhQUFhLENBQUMsTUFBNkIsRUFBRSxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7YUFDekU7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUNILEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUMxQixDQUFDLENBQUMsQ0FBQztJQUVILGtCQUFrQixDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBRXZELE9BQU8sR0FBRyxDQUFDO0FBQ2YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdEJlZm9yZVJlbmRlciwgaW5qZWN0Tmd0RGVzdHJveSwgaW5qZWN0Tmd0UmVmLCBpcywgTmd0SW5qZWN0ZWRSZWYgfSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IGlzT2JzZXJ2YWJsZSwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBbmltYXRpb25NaXhlciB9IGZyb20gJ3RocmVlJztcblxudHlwZSBBcGk8VCBleHRlbmRzIFRIUkVFLkFuaW1hdGlvbkNsaXA+ID0ge1xuICAgIHJlZjogTmd0SW5qZWN0ZWRSZWY8VEhSRUUuT2JqZWN0M0Q+O1xuICAgIGNsaXBzOiBUSFJFRS5BbmltYXRpb25DbGlwW107XG4gICAgbWl4ZXI6IFRIUkVFLkFuaW1hdGlvbk1peGVyO1xuICAgIG5hbWVzOiBUWyduYW1lJ11bXTtcbiAgICBhY3Rpb25zOiB7IFtrZXkgaW4gVFsnbmFtZSddXTogVEhSRUUuQW5pbWF0aW9uQWN0aW9uIHwgbnVsbCB9O1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGluamVjdE5ndHNBbmltYXRpb25zPFQgZXh0ZW5kcyBUSFJFRS5BbmltYXRpb25DbGlwPihcbiAgICBjbGlwczogVFtdLFxuICAgIG9iamVjdD86IE9ic2VydmFibGU8VEhSRUUuT2JqZWN0M0Q+IHwgVEhSRUUuT2JqZWN0M0QgfCBOZ3RJbmplY3RlZFJlZjxUSFJFRS5PYmplY3QzRD5cbik6IEFwaTxUPiB7XG4gICAgbGV0IHJlZiA9IGluamVjdE5ndFJlZjxUSFJFRS5PYmplY3QzRD4oKTtcblxuICAgIGxldCBzdWI6IFN1YnNjcmlwdGlvbjtcblxuICAgIGlmIChvYmplY3QpIHtcbiAgICAgICAgaWYgKGlzT2JzZXJ2YWJsZShvYmplY3QpKSB7XG4gICAgICAgICAgICBzdWIgPSBvYmplY3Quc3Vic2NyaWJlKCh2YWwpID0+IHtcbiAgICAgICAgICAgICAgICByZWYubmF0aXZlRWxlbWVudCA9IHZhbDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKGlzLnJlZihvYmplY3QpKSB7XG4gICAgICAgICAgICByZWYgPSBvYmplY3Q7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZWYubmF0aXZlRWxlbWVudCA9IG9iamVjdDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG1peGVyID0gbmV3IEFuaW1hdGlvbk1peGVyKHJlZi5uYXRpdmVFbGVtZW50KTtcblxuICAgIGxldCBjYWNoZWQgPSB7fSBhcyB7IFtrZXkgaW4gVFsnbmFtZSddXTogVEhSRUUuQW5pbWF0aW9uQWN0aW9uIHwgbnVsbCB9O1xuICAgIGNvbnN0IGFjdGlvbnMgPSB7fSBhcyB7IFtrZXkgaW4gVFsnbmFtZSddXTogVEhSRUUuQW5pbWF0aW9uQWN0aW9uIHwgbnVsbCB9O1xuICAgIGNvbnN0IG5hbWVzID0gW10gYXMgVFsnbmFtZSddW107XG5cbiAgICBmb3IgKGNvbnN0IGNsaXAgb2YgY2xpcHMpIHtcbiAgICAgICAgbmFtZXMucHVzaChjbGlwLm5hbWUpO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoYWN0aW9ucywgY2xpcC5uYW1lLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgZ2V0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHJlZi5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5hbWUgPSBjbGlwLm5hbWUgYXMga2V5b2YgdHlwZW9mIGNhY2hlZDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFtuYW1lXSB8fCAoY2FjaGVkW25hbWVdID0gbWl4ZXIuY2xpcEFjdGlvbihjbGlwLCByZWYubmF0aXZlRWxlbWVudCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGFwaSA9IHsgcmVmLCBjbGlwcywgYWN0aW9ucywgbmFtZXMsIG1peGVyIH07XG5cbiAgICBpbmplY3ROZ3REZXN0cm95KCgpID0+IHtcbiAgICAgICAgaWYgKHN1Yikgc3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIGNhY2hlZCA9IHt9IGFzIHsgW2tleSBpbiBUWyduYW1lJ11dOiBUSFJFRS5BbmltYXRpb25BY3Rpb24gfCBudWxsIH07XG4gICAgICAgIE9iamVjdC52YWx1ZXMoYXBpLmFjdGlvbnMpLmZvckVhY2goKGFjdGlvbikgPT4ge1xuICAgICAgICAgICAgaWYgKHJlZi5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgbWl4ZXIudW5jYWNoZUFjdGlvbihhY3Rpb24gYXMgVEhSRUUuQW5pbWF0aW9uQ2xpcCwgcmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgbWl4ZXIuc3RvcEFsbEFjdGlvbigpO1xuICAgIH0pO1xuXG4gICAgaW5qZWN0QmVmb3JlUmVuZGVyKCh7IGRlbHRhIH0pID0+IG1peGVyLnVwZGF0ZShkZWx0YSkpO1xuXG4gICAgcmV0dXJuIGFwaTtcbn1cbiJdfQ==
52
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5pbWF0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci10aHJlZS1zb2JhL21pc2Mvc3JjL2xpYi9hbmltYXRpb25zL2FuaW1hdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLFlBQVksRUFBRSxFQUFFLEVBQWtCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZHLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFXdkMsTUFBTSxVQUFVLG9CQUFvQjtJQUNoQyxJQUFJLEdBQUcsR0FBRyxZQUFZLEVBQWtCLENBQUM7SUFFekMsTUFBTSxLQUFLLEdBQUcsSUFBSSxjQUFjLENBQUMsSUFBSyxDQUFDLENBQUM7SUFDeEMsTUFBTSxRQUFRLEdBQUcsRUFBb0IsQ0FBQztJQUV0QyxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUU7UUFDbEIsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUM3QyxDQUFDLENBQUMsQ0FBQztJQUVILGtCQUFrQixDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBRXZELE1BQU0sR0FBRyxHQUFHLENBQ1IsS0FBVSxFQUNWLE1BQXdELEVBQzFELEVBQUU7UUFDQSxJQUFJLE1BQU0sR0FBRyxFQUEwRCxDQUFDO1FBQ3hFLE1BQU0sT0FBTyxHQUFHLEVBQTBELENBQUM7UUFDM0UsTUFBTSxLQUFLLEdBQUcsRUFBaUIsQ0FBQztRQUVoQyxJQUFJLE1BQU0sRUFBRTtZQUNSLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFDaEIsR0FBRyxHQUFHLE1BQU0sQ0FBQzthQUNoQjtpQkFBTTtnQkFDSCxHQUFHLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQzthQUM5QjtTQUNKO1FBRUQsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUU7WUFDdEIsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdEIsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRTtnQkFDdEMsVUFBVSxFQUFFLElBQUk7Z0JBQ2hCLEdBQUcsRUFBRSxHQUFHLEVBQUU7b0JBQ04sSUFBSSxHQUFHLENBQUMsYUFBYSxFQUFFO3dCQUNuQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBMkIsQ0FBQzt3QkFDOUMsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7cUJBQ3JGO2dCQUNMLENBQUM7YUFDSixDQUFDLENBQUM7U0FDTjtRQUVELFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ2YsTUFBTSxHQUFHLEVBQTBELENBQUM7WUFDcEUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtnQkFDdEMsSUFBSSxHQUFHLENBQUMsYUFBYSxFQUFFO29CQUNuQixLQUFLLENBQUMsYUFBYSxDQUFDLE1BQTZCLEVBQUUsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO2lCQUN6RTtZQUNMLENBQUMsQ0FBQyxDQUFDO1lBQ0gsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzFCLENBQUMsQ0FBQyxDQUFDO1FBRUYsR0FBYyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDN0IsR0FBYyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDakMsR0FBYyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDbEMsQ0FBQyxDQUFDO0lBRUYsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDZCxHQUFHLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUVsQixPQUFPLEdBQWEsQ0FBQztBQUN6QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0QmVmb3JlUmVuZGVyLCBpbmplY3ROZ3REZXN0cm95LCBpbmplY3ROZ3RSZWYsIGlzLCBOZ3RJbmplY3RlZFJlZiB9IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0IHsgQW5pbWF0aW9uTWl4ZXIgfSBmcm9tICd0aHJlZSc7XG5cbnR5cGUgQXBpPFQgZXh0ZW5kcyBUSFJFRS5BbmltYXRpb25DbGlwPiA9IHtcbiAgICAoY2xpcHM6IFRbXSwgb2JqZWN0PzogVEhSRUUuT2JqZWN0M0QgfCBOZ3RJbmplY3RlZFJlZjxUSFJFRS5PYmplY3QzRD4pOiB2b2lkO1xuICAgIHJlZjogTmd0SW5qZWN0ZWRSZWY8VEhSRUUuT2JqZWN0M0Q+O1xuICAgIGNsaXBzOiBUSFJFRS5BbmltYXRpb25DbGlwW107XG4gICAgbWl4ZXI6IFRIUkVFLkFuaW1hdGlvbk1peGVyO1xuICAgIG5hbWVzOiBUWyduYW1lJ11bXTtcbiAgICBhY3Rpb25zOiB7IFtrZXkgaW4gVFsnbmFtZSddXTogVEhSRUUuQW5pbWF0aW9uQWN0aW9uIHwgbnVsbCB9O1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGluamVjdE5ndHNBbmltYXRpb25zPFQgZXh0ZW5kcyBUSFJFRS5BbmltYXRpb25DbGlwPigpIHtcbiAgICBsZXQgcmVmID0gaW5qZWN0Tmd0UmVmPFRIUkVFLk9iamVjdDNEPigpO1xuXG4gICAgY29uc3QgbWl4ZXIgPSBuZXcgQW5pbWF0aW9uTWl4ZXIobnVsbCEpO1xuICAgIGNvbnN0IGNsZWFuVXBzID0gW10gYXMgKCgpID0+IHZvaWQpW107XG5cbiAgICBpbmplY3ROZ3REZXN0cm95KCgpID0+IHtcbiAgICAgICAgY2xlYW5VcHMuZm9yRWFjaCgoY2xlYW5VcCkgPT4gY2xlYW5VcCgpKTtcbiAgICB9KTtcblxuICAgIGluamVjdEJlZm9yZVJlbmRlcigoeyBkZWx0YSB9KSA9PiBtaXhlci51cGRhdGUoZGVsdGEpKTtcblxuICAgIGNvbnN0IGFwaSA9IDxUIGV4dGVuZHMgVEhSRUUuQW5pbWF0aW9uQ2xpcD4oXG4gICAgICAgIGNsaXBzOiBUW10sXG4gICAgICAgIG9iamVjdD86IFRIUkVFLk9iamVjdDNEIHwgTmd0SW5qZWN0ZWRSZWY8VEhSRUUuT2JqZWN0M0Q+XG4gICAgKSA9PiB7XG4gICAgICAgIGxldCBjYWNoZWQgPSB7fSBhcyB7IFtrZXkgaW4gVFsnbmFtZSddXTogVEhSRUUuQW5pbWF0aW9uQWN0aW9uIHwgbnVsbCB9O1xuICAgICAgICBjb25zdCBhY3Rpb25zID0ge30gYXMgeyBba2V5IGluIFRbJ25hbWUnXV06IFRIUkVFLkFuaW1hdGlvbkFjdGlvbiB8IG51bGwgfTtcbiAgICAgICAgY29uc3QgbmFtZXMgPSBbXSBhcyBUWyduYW1lJ11bXTtcblxuICAgICAgICBpZiAob2JqZWN0KSB7XG4gICAgICAgICAgICBpZiAoaXMucmVmKG9iamVjdCkpIHtcbiAgICAgICAgICAgICAgICByZWYgPSBvYmplY3Q7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlZi5uYXRpdmVFbGVtZW50ID0gb2JqZWN0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBjbGlwIG9mIGNsaXBzKSB7XG4gICAgICAgICAgICBuYW1lcy5wdXNoKGNsaXAubmFtZSk7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoYWN0aW9ucywgY2xpcC5uYW1lLCB7XG4gICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBnZXQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlZi5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuYW1lID0gY2xpcC5uYW1lIGFzIGtleW9mIHR5cGVvZiBjYWNoZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FjaGVkW25hbWVdIHx8IChjYWNoZWRbbmFtZV0gPSBtaXhlci5jbGlwQWN0aW9uKGNsaXAsIHJlZi5uYXRpdmVFbGVtZW50KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjbGVhblVwcy5wdXNoKCgpID0+IHtcbiAgICAgICAgICAgIGNhY2hlZCA9IHt9IGFzIHsgW2tleSBpbiBUWyduYW1lJ11dOiBUSFJFRS5BbmltYXRpb25BY3Rpb24gfCBudWxsIH07XG4gICAgICAgICAgICBPYmplY3QudmFsdWVzKGFjdGlvbnMpLmZvckVhY2goKGFjdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyZWYubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICBtaXhlci51bmNhY2hlQWN0aW9uKGFjdGlvbiBhcyBUSFJFRS5BbmltYXRpb25DbGlwLCByZWYubmF0aXZlRWxlbWVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBtaXhlci5zdG9wQWxsQWN0aW9uKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIChhcGkgYXMgQXBpPFQ+KS5jbGlwcyA9IGNsaXBzO1xuICAgICAgICAoYXBpIGFzIEFwaTxUPikuYWN0aW9ucyA9IGFjdGlvbnM7XG4gICAgICAgIChhcGkgYXMgQXBpPFQ+KS5uYW1lcyA9IG5hbWVzO1xuICAgIH07XG5cbiAgICBhcGkucmVmID0gcmVmO1xuICAgIGFwaS5taXhlciA9IG1peGVyO1xuXG4gICAgcmV0dXJuIGFwaSBhcyBBcGk8VD47XG59XG4iXX0=
@@ -1,56 +1,58 @@
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, is, NgtRxStore, NgtStore, safeDetectChanges } from 'angular-three';
3
2
  import * as THREE from 'three';
4
3
  import { AnimationMixer } from 'three';
5
4
  import * as i0 from '@angular/core';
6
5
  import { inject, Directive } from '@angular/core';
6
+ import { isObservable, of, takeUntil, combineLatest, map } from 'rxjs';
7
7
  import { __rest } from 'tslib';
8
8
 
9
- function injectNgtsAnimations(clips, object) {
9
+ function injectNgtsAnimations() {
10
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;
11
+ const mixer = new AnimationMixer(null);
12
+ const cleanUps = [];
13
+ injectNgtDestroy(() => {
14
+ cleanUps.forEach((cleanUp) => cleanUp());
15
+ });
16
+ injectBeforeRender(({ delta }) => mixer.update(delta));
17
+ const api = (clips, object) => {
18
+ let cached = {};
19
+ const actions = {};
20
+ const names = [];
21
+ if (object) {
22
+ if (is.ref(object)) {
23
+ ref = object;
24
+ }
25
+ else {
26
+ ref.nativeElement = object;
27
+ }
20
28
  }
21
- else {
22
- ref.nativeElement = object;
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
+ });
23
40
  }
24
- }
25
- const mixer = new AnimationMixer(ref.nativeElement);
26
- let cached = {};
27
- const actions = {};
28
- const names = [];
29
- for (const clip of clips) {
30
- names.push(clip.name);
31
- Object.defineProperty(actions, clip.name, {
32
- enumerable: true,
33
- get: () => {
41
+ cleanUps.push(() => {
42
+ cached = {};
43
+ Object.values(actions).forEach((action) => {
34
44
  if (ref.nativeElement) {
35
- const name = clip.name;
36
- return cached[name] || (cached[name] = mixer.clipAction(clip, ref.nativeElement));
45
+ mixer.uncacheAction(action, ref.nativeElement);
37
46
  }
38
- },
39
- });
40
- }
41
- const api = { ref, clips, actions, names, mixer };
42
- injectNgtDestroy(() => {
43
- if (sub)
44
- sub.unsubscribe();
45
- cached = {};
46
- Object.values(api.actions).forEach((action) => {
47
- if (ref.nativeElement) {
48
- mixer.uncacheAction(action, ref.nativeElement);
49
- }
47
+ });
48
+ mixer.stopAllAction();
50
49
  });
51
- mixer.stopAllAction();
52
- });
53
- injectBeforeRender(({ delta }) => mixer.update(delta));
50
+ api.clips = clips;
51
+ api.actions = actions;
52
+ api.names = names;
53
+ };
54
+ api.ref = ref;
55
+ api.mixer = mixer;
54
56
  return api;
55
57
  }
56
58
 
@@ -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":";;;;;;;;AAYgB,SAAA,oBAAoB,CAChC,KAAU,EACV,MAAqF,EAAA;AAErF,IAAA,IAAI,GAAG,GAAG,YAAY,EAAkB,CAAC;AAEzC,IAAA,IAAI,GAAiB,CAAC;AAEtB,IAAA,IAAI,MAAM,EAAE;AACR,QAAA,IAAI,YAAY,CAAC,MAAM,CAAC,EAAE;YACtB,GAAG,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,KAAI;AAC3B,gBAAA,GAAG,CAAC,aAAa,GAAG,GAAG,CAAC;AAC5B,aAAC,CAAC,CAAC;AACN,SAAA;AAAM,aAAA,IAAI,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;YACvB,GAAG,GAAG,MAAM,CAAC;AAChB,SAAA;AAAM,aAAA;AACH,YAAA,GAAG,CAAC,aAAa,GAAG,MAAM,CAAC;AAC9B,SAAA;AACJ,KAAA;IAED,MAAM,KAAK,GAAG,IAAI,cAAc,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAEpD,IAAI,MAAM,GAAG,EAA0D,CAAC;IACxE,MAAM,OAAO,GAAG,EAA0D,CAAC;IAC3E,MAAM,KAAK,GAAG,EAAiB,CAAC;AAEhC,IAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACtB,QAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtB,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE;AACtC,YAAA,UAAU,EAAE,IAAI;YAChB,GAAG,EAAE,MAAK;gBACN,IAAI,GAAG,CAAC,aAAa,EAAE;AACnB,oBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAA2B,CAAC;oBAC9C,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC;AACrF,iBAAA;aACJ;AACJ,SAAA,CAAC,CAAC;AACN,KAAA;AAED,IAAA,MAAM,GAAG,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IAElD,gBAAgB,CAAC,MAAK;AAClB,QAAA,IAAI,GAAG;YAAE,GAAG,CAAC,WAAW,EAAE,CAAC;QAC3B,MAAM,GAAG,EAA0D,CAAC;AACpE,QAAA,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;YAC1C,IAAI,GAAG,CAAC,aAAa,EAAE;gBACnB,KAAK,CAAC,aAAa,CAAC,MAA6B,EAAE,GAAG,CAAC,aAAa,CAAC,CAAC;AACzE,aAAA;AACL,SAAC,CAAC,CAAC;QACH,KAAK,CAAC,aAAa,EAAE,CAAC;AAC1B,KAAC,CAAC,CAAC;AAEH,IAAA,kBAAkB,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AAEvD,IAAA,OAAO,GAAG,CAAC;AACf;;AC/DM,MAAO,eAAgB,SAAQ,UAAU,CAAA;AAD/C,IAAA,WAAA,GAAA;;AAEqB,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;KAY7C;IAVG,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,KAAI;AACxC,YAAA,EAAE,CAAC,SAAS,CAAC,UAAU,GAAG,KAAK,CAAC;AAChC,YAAA,EAAE,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC;AAEhC,YAAA,OAAO,MAAK;AACR,gBAAA,EAAE,CAAC,SAAS,CAAC,UAAU,GAAG,EAAE,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC;AAC9D,aAAC,CAAC;AACN,SAAC,CAAC,CAAC;KACN;;4GAZQ,eAAe,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;gGAAf,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;2FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B,SAAS;YAAC,IAAA,EAAA,CAAA,EAAE,QAAQ,EAAE,mBAAmB,EAAE,UAAU,EAAE,IAAI,EAAE,CAAA;;;ACexD,SAAU,aAAa,CACzB,aAAmG,EAAA;AAEnG,IAAA,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;AAC/B,IAAA,MAAM,SAAS,GAAG,YAAY,EAA2B,CAAC;IAC1D,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,gBAAgB,CAAC,MAAK;;AAC5C,QAAA,CAAA,EAAA,GAAA,SAAS,CAAC,aAAa,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,OAAO,EAAE,CAAC;AACvC,KAAC,CAAC,CAAC;AACH,IAAA,MAAM,MAAM,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC;AACjC,IAAA,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC;IAE3D,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAI;AACxE,QAAA,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;QAC3C,MAAM,MAAM,GAAG,OAAO,KAAK,KAAK,QAAQ,GAAG,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC;QAC7E,MAAM,OAAO,GAAG,OAAO,MAAM,KAAK,QAAQ,GAAG,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC;AACjF,QAAA,MAAM,SAAS,GAAG,CAAC,OAAO,KAAK,KAAK,QAAQ,GAAG,QAAQ,GAAI,KAAqB,KAAK,EAAE,CAAC;AAExF,QAAA,MAAM,EAAE,OAAO,GAAG,CAAC,EAAE,KAAK,EAAA,GAAwB,SAAS,EAA5B,cAAc,GAAK,MAAA,CAAA,SAAS,EAArD,CAAA,SAAA,EAAA,OAAA,CAAyC,CAAY,CAAC;AAE5D,QAAA,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE;AAC1B,YAAA,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,iBAAiB,CAAC,MAAM,EAAE,OAAO,kBACtD,SAAS,EAAE,KAAK,CAAC,YAAY,EAC7B,SAAS,EAAE,KAAK,CAAC,YAAY,EAC7B,QAAQ,EAAE,EAAE,CAAC,cAAc,EAC3B,IAAI,EAAE,KAAK,CAAC,aAAa,EACtB,EAAA,cAAc,EACnB,CAAC;AACH,YAAA,IAAI,KAAK;AAAE,gBAAA,MAAM,CAAC,YAAY,GAAG,IAAI,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;AAE1F,YAAA,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC;AACzB,YAAA,SAAS,CAAC,aAAa,GAAG,MAAM,CAAC;AACpC,SAAA;QAED,SAAS,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AACjD,QAAA,IAAI,OAAO;AAAE,YAAA,SAAS,CAAC,aAAa,CAAC,OAAO,GAAG,OAAO,CAAC;QACvD,iBAAiB,CAAC,GAAG,CAAC,CAAC;AAC3B,KAAC,CAAC,CAAC;AAEH,IAAA,OAAO,SAAS,CAAC;AACrB;;AC9CM,SAAU,qBAAqB,CACjC,aAAA,GAEiE,CAAC,MAAM,KAAK,MAA+B,EAAA;AAE5G,IAAA,MAAM,cAAc,GAAG,YAAY,EAAsB,CAAC;AAE1D,IAAA,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;AAC/B,IAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,gBAAgB,EAAE,CAAC;AAExC,IAAA,MAAM,MAAM,GAAG,aAAa,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;AAC9D,IAAA,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC;IAE3D,IAAI,SAAS,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;AAEhD,IAAA,MAAM,GAAG,GAAG,aAAa,CAAC,MAAK;AAC3B,QAAA,OAAO,aAAa,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CACvF,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,KAAI;YACxB,SAAS,GAAG,MAAM,CAAC;YACnB,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC;YAC1C,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC;YAC3C,MAAM,YAAY,GAAG,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAClD,YAAA,YAAY,CAAC,MAAM,GAAG,KAAK,CAAC,WAAW,CAAC;AACxC,YAAA,YAAY,CAAC,IAAI,GAAG,KAAK,CAAC,iBAAiB,CAAC;AAC5C,YAAA,MAAM,WAAW,GAAG,EAAE,YAAY,EAAE,CAAC;AAErC,YAAA,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;SACzD,CAAC,CACL,CAAC;AACN,KAAC,CAAC,CAAC;IAEH,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,kBAAkB,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAI;AACzC,QAAA,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,QAAQ,IAAI,KAAK,GAAG,SAAS,CAAC,MAAM,KAAK,GAAG,CAAC,aAAa,EAAE;AAClF,YAAA,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;AACtC,YAAA,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AACzB,YAAA,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;AACzB,YAAA,KAAK,EAAE,CAAC;AACX,SAAA;AACL,KAAC,CAAC,CAAC;AAEH,IAAA,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,GAAG,KAAI;AAC9C,QAAA,cAAc,CAAC,aAAa,GAAG,GAAG,CAAC,YAAY,CAAC;AACpD,KAAC,CAAC,CAAC;AAEH,IAAA,OAAO,cAAc,CAAC;AAC1B;;ACzDA;;AAEG;;;;"}
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 { AnimationMixer } from 'three';\n\ntype Api<T extends THREE.AnimationClip> = {\n (clips: T[], object?: THREE.Object3D | NgtInjectedRef<THREE.Object3D>): void;\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 let ref = injectNgtRef<THREE.Object3D>();\n\n const mixer = new AnimationMixer(null!);\n const cleanUps = [] as (() => void)[];\n\n injectNgtDestroy(() => {\n cleanUps.forEach((cleanUp) => cleanUp());\n });\n\n injectBeforeRender(({ delta }) => mixer.update(delta));\n\n const api = <T extends THREE.AnimationClip>(\n clips: T[],\n object?: THREE.Object3D | NgtInjectedRef<THREE.Object3D>\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 if (object) {\n if (is.ref(object)) {\n ref = object;\n } else {\n ref.nativeElement = object;\n }\n }\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 cleanUps.push(() => {\n cached = {} as { [key in T['name']]: THREE.AnimationAction | null };\n Object.values(actions).forEach((action) => {\n if (ref.nativeElement) {\n mixer.uncacheAction(action as THREE.AnimationClip, ref.nativeElement);\n }\n });\n mixer.stopAllAction();\n });\n\n (api as Api<T>).clips = clips;\n (api as Api<T>).actions = actions;\n (api as Api<T>).names = names;\n };\n\n api.ref = ref;\n api.mixer = mixer;\n\n return api as Api<T>;\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,55 +1,57 @@
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, is, NgtRxStore, NgtStore, safeDetectChanges } from 'angular-three';
3
2
  import * as THREE from 'three';
4
3
  import { AnimationMixer } from 'three';
5
4
  import * as i0 from '@angular/core';
6
5
  import { inject, Directive } from '@angular/core';
6
+ import { isObservable, of, takeUntil, combineLatest, map } from 'rxjs';
7
7
 
8
- function injectNgtsAnimations(clips, object) {
8
+ function injectNgtsAnimations() {
9
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;
10
+ const mixer = new AnimationMixer(null);
11
+ const cleanUps = [];
12
+ injectNgtDestroy(() => {
13
+ cleanUps.forEach((cleanUp) => cleanUp());
14
+ });
15
+ injectBeforeRender(({ delta }) => mixer.update(delta));
16
+ const api = (clips, object) => {
17
+ let cached = {};
18
+ const actions = {};
19
+ const names = [];
20
+ if (object) {
21
+ if (is.ref(object)) {
22
+ ref = object;
23
+ }
24
+ else {
25
+ ref.nativeElement = object;
26
+ }
19
27
  }
20
- else {
21
- ref.nativeElement = object;
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
+ });
22
39
  }
23
- }
24
- const mixer = new AnimationMixer(ref.nativeElement);
25
- let cached = {};
26
- const actions = {};
27
- const names = [];
28
- for (const clip of clips) {
29
- names.push(clip.name);
30
- Object.defineProperty(actions, clip.name, {
31
- enumerable: true,
32
- get: () => {
40
+ cleanUps.push(() => {
41
+ cached = {};
42
+ Object.values(actions).forEach((action) => {
33
43
  if (ref.nativeElement) {
34
- const name = clip.name;
35
- return cached[name] || (cached[name] = mixer.clipAction(clip, ref.nativeElement));
44
+ mixer.uncacheAction(action, ref.nativeElement);
36
45
  }
37
- },
38
- });
39
- }
40
- const api = { ref, clips, actions, names, mixer };
41
- injectNgtDestroy(() => {
42
- if (sub)
43
- sub.unsubscribe();
44
- cached = {};
45
- Object.values(api.actions).forEach((action) => {
46
- if (ref.nativeElement) {
47
- mixer.uncacheAction(action, ref.nativeElement);
48
- }
46
+ });
47
+ mixer.stopAllAction();
49
48
  });
50
- mixer.stopAllAction();
51
- });
52
- injectBeforeRender(({ delta }) => mixer.update(delta));
49
+ api.clips = clips;
50
+ api.actions = actions;
51
+ api.names = names;
52
+ };
53
+ api.ref = ref;
54
+ api.mixer = mixer;
53
55
  return api;
54
56
  }
55
57
 
@@ -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, is, NgtInjectedRef } from 'angular-three';\nimport { AnimationMixer } from 'three';\n\ntype Api<T extends THREE.AnimationClip> = {\n (clips: T[], object?: THREE.Object3D | NgtInjectedRef<THREE.Object3D>): void;\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 let ref = injectNgtRef<THREE.Object3D>();\n\n const mixer = new AnimationMixer(null!);\n const cleanUps = [] as (() => void)[];\n\n injectNgtDestroy(() => {\n cleanUps.forEach((cleanUp) => cleanUp());\n });\n\n injectBeforeRender(({ delta }) => mixer.update(delta));\n\n const api = <T extends THREE.AnimationClip>(\n clips: T[],\n object?: THREE.Object3D | NgtInjectedRef<THREE.Object3D>\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 if (object) {\n if (is.ref(object)) {\n ref = object;\n } else {\n ref.nativeElement = object;\n }\n }\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 cleanUps.push(() => {\n cached = {} as { [key in T['name']]: THREE.AnimationAction | null };\n Object.values(actions).forEach((action) => {\n if (ref.nativeElement) {\n mixer.uncacheAction(action as THREE.AnimationClip, ref.nativeElement);\n }\n });\n mixer.stopAllAction();\n });\n\n (api as Api<T>).clips = clips;\n (api as Api<T>).actions = actions;\n (api as Api<T>).names = names;\n };\n\n api.ref = ref;\n api.mixer = mixer;\n\n return api as Api<T>;\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,6 +1,6 @@
1
1
  import { NgtInjectedRef } from 'angular-three';
2
- import { Observable } from 'rxjs';
3
2
  type Api<T extends THREE.AnimationClip> = {
3
+ (clips: T[], object?: THREE.Object3D | NgtInjectedRef<THREE.Object3D>): void;
4
4
  ref: NgtInjectedRef<THREE.Object3D>;
5
5
  clips: THREE.AnimationClip[];
6
6
  mixer: THREE.AnimationMixer;
@@ -9,5 +9,5 @@ type Api<T extends THREE.AnimationClip> = {
9
9
  [key in T['name']]: THREE.AnimationAction | null;
10
10
  };
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<T extends THREE.AnimationClip>(): Api<T>;
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.1",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -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.1"
9
9
  }