Skip to content

Commit 4bf8934

Browse files
committed
fix(soba/controls): adjust orbit controls
1 parent 73bd8cb commit 4bf8934

File tree

1 file changed

+41
-28
lines changed

1 file changed

+41
-28
lines changed

libs/soba/controls/src/lib/orbit-controls.ts

Lines changed: 41 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,42 @@
11
import { Component, computed, CUSTOM_ELEMENTS_SCHEMA, effect, input, output } from '@angular/core';
2-
import { injectBeforeRender, injectStore, NgtArgs, NgtCamera, NgtVector3, omit, pick } from 'angular-three';
2+
import {
3+
injectBeforeRender,
4+
injectStore,
5+
NgtArgs,
6+
NgtCamera,
7+
NgtOverwrite,
8+
NgtThreeElement,
9+
NgtVector3,
10+
omit,
11+
pick,
12+
} from 'angular-three';
313
import { mergeInputs } from 'ngxtension/inject-inputs';
414
import * as THREE from 'three';
515
import { OrbitControls } from 'three-stdlib';
616

7-
export interface NgtsOrbitControlsOptions {
8-
camera?: THREE.Camera;
9-
domElement?: HTMLElement;
10-
target?: NgtVector3;
11-
makeDefault: boolean;
12-
regress: boolean;
13-
enableDamping: boolean;
14-
keyEvents: boolean | HTMLElement;
15-
}
16-
17-
const defaultOptions: Partial<Omit<OrbitControls, 'target' | 'enableDamping' | 'domElement'>> &
18-
NgtsOrbitControlsOptions = {
17+
type ExtractCallback<T, E extends string> = T extends { addEventListener(event: E, callback: infer C): void }
18+
? C
19+
: never;
20+
21+
export type OrbitControlsChangeEvent = Parameters<ExtractCallback<OrbitControls, 'change'>>[0];
22+
23+
export type NgtsOrbitControlsOptions = Omit<
24+
NgtOverwrite<
25+
NgtThreeElement<typeof OrbitControls>,
26+
{
27+
camera?: THREE.Camera;
28+
domElement?: HTMLElement;
29+
target?: NgtVector3;
30+
makeDefault: boolean;
31+
regress: boolean;
32+
enableDamping: boolean;
33+
keyEvents: boolean | HTMLElement;
34+
}
35+
>,
36+
'attach' | 'addEventListener' | 'removeEventListener' | 'parameters' | '___ngt_args__' | '_domElementKeyEvents'
37+
>;
38+
39+
const defaultOptions: NgtsOrbitControlsOptions = {
1940
enableDamping: true,
2041
regress: false,
2142
makeDefault: false,
@@ -43,7 +64,7 @@ export class NgtsOrbitControls {
4364
'enableDamping',
4465
]);
4566

46-
changed = output<THREE.Event>();
67+
changed = output<OrbitControlsChangeEvent>();
4768
started = output<THREE.Event>();
4869
ended = output<THREE.Event>();
4970

@@ -67,9 +88,7 @@ export class NgtsOrbitControls {
6788
injectBeforeRender(
6889
() => {
6990
const controls = this.controls();
70-
if (controls?.enabled) {
71-
controls.update();
72-
}
91+
if (controls.enabled) controls.update();
7392
},
7493
{ priority: -1 },
7594
);
@@ -79,18 +98,14 @@ export class NgtsOrbitControls {
7998
if (!makeDefault) return;
8099

81100
const controls = this.controls();
82-
if (!controls) return;
83-
84101
const oldControls = this.store.snapshot.controls;
85102
this.store.update({ controls });
86103
onCleanup(() => void this.store.update({ controls: oldControls }));
87104
});
88105

89106
effect((onCleanup) => {
90-
const controls = this.controls();
91-
if (!controls) return;
92-
93-
const [keyEvents, domElement] = [
107+
const [controls, keyEvents, domElement] = [
108+
this.controls(),
94109
this.keyEvents(),
95110
this.domElement() || this.store.snapshot.events.connected || this.store.gl.domElement(),
96111
this.store.invalidate(),
@@ -106,16 +121,14 @@ export class NgtsOrbitControls {
106121
});
107122

108123
effect((onCleanup) => {
109-
const controls = this.controls();
110-
if (!controls) return;
111-
112-
const [invalidate, performanceRegress, regress] = [
124+
const [controls, invalidate, performanceRegress, regress] = [
125+
this.controls(),
113126
this.store.invalidate(),
114127
this.store.performance.regress(),
115128
this.regress(),
116129
];
117130

118-
const changeCallback: (e: THREE.Event) => void = (e) => {
131+
const changeCallback: (e: OrbitControlsChangeEvent) => void = (e) => {
119132
invalidate();
120133
if (regress) performanceRegress();
121134
this.changed.emit(e);

0 commit comments

Comments
 (0)