-
Notifications
You must be signed in to change notification settings - Fork 20
/
OrbitControls3.ts
59 lines (43 loc) · 2.27 KB
/
OrbitControls3.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
import {OrbitControls} from 'three/examples/jsm/controls/OrbitControls.js'
import {IUiConfigContainer, uiInput, UiObjectConfig, uiPanelContainer, uiToggle, uiVector} from 'uiconfig.js'
import {serialize} from 'ts-browser-helpers'
import {ICameraControls} from '../../core'
import {Vector3} from 'three'
export type TOrbitControlsEvents = 'change' | 'end' | 'start'
@uiPanelContainer('Orbit Controls')
export class OrbitControls3 extends OrbitControls implements IUiConfigContainer, ICameraControls<TOrbitControlsEvents> {
uiConfig?: UiObjectConfig<void, 'panel'>
@serialize() type = 'OrbitControls'
@uiToggle() enabled = true
@uiToggle() @serialize() dollyZoom = false
@uiToggle() @serialize() enableDamping = true
@uiInput() @serialize() dampingFactor = 0.08
@uiToggle() @serialize() autoRotate = false
@uiInput() @serialize() autoRotateSpeed = 2.0
@uiToggle() @serialize() enableZoom = true
@uiInput() @serialize() zoomSpeed = 0.15
@uiInput() @serialize() maxZoomSpeed = 0.20
@uiToggle() @serialize() enableRotate = true
@uiInput() @serialize() rotateSpeed = 2.0
@uiToggle() @serialize() enablePan = true
@uiInput() @serialize() panSpeed = 1.0
@uiInput() @serialize() autoPushTarget = false
@uiInput() @serialize() autoPullTarget = false
@uiInput() @serialize() minDistance = 0.35
@uiInput() @serialize() maxDistance = 1000
@uiInput() @serialize() minZoom = 0.01
@uiInput() @serialize() maxZoom = 1000
@uiInput() @serialize() minPolarAngle = 0
@uiInput() @serialize() maxPolarAngle = Math.PI
@uiInput() @serialize() minAzimuthAngle = -10000 // should be -Infinity but this breaks the UI
@uiInput() @serialize() maxAzimuthAngle = 10000 // should be Infinity but this breaks the UI
@uiVector() @serialize() clampMin = new Vector3(-10000, -10000, -10000) // should be -Infinity but this breaks the UI
@uiVector() @serialize() clampMax = new Vector3(10000, 10000, 10000) // should be Infinity but this breaks the UI
// @uiToggle()
@serialize() screenSpacePanning = true
// @uiInput()
@serialize() keyPanSpeed = 7.0
throttleUpdate = 60 // throttle to 60 updates per second (implemented in OrbitControls.js.update() method)
// todo add to three-ts-types
stopDamping!: () => void
}