-
Notifications
You must be signed in to change notification settings - Fork 4
/
PointerSettings.ts
136 lines (91 loc) · 2.09 KB
/
PointerSettings.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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
import { EventDispatcher } from "three";
import { PointerBehaviour } from "../input/PointerBehaviour.js";
import { SettingsEventMap } from "./SettingsEventMap.js";
/**
* Pointer settings.
*
* @group Settings
*/
export class PointerSettings extends EventDispatcher<SettingsEventMap> {
/**
* Triggers when the settings are changed.
*
* @event
*/
static readonly EVENT_CHANGE = "change";
/**
* @see {@link behaviour}
*/
private _behaviour: PointerBehaviour;
/**
* @see {@link sensitivity}
*/
private _sensitivity: number;
/**
* Constructs new pointer settings.
*/
constructor() {
super();
this._behaviour = PointerBehaviour.DEFAULT;
this._sensitivity = 1e-3;
}
/**
* The pointer behaviour.
*/
get behaviour(): PointerBehaviour {
return this._behaviour;
}
set behaviour(value: PointerBehaviour) {
this._behaviour = value;
this.dispatchEvent({ type: PointerSettings.EVENT_CHANGE });
}
/**
* Sets the sensitivity.
*
* This sensitivity acts as a baseline scale for pointer movement deltas. Default is `1e-3`.
*/
get sensitivity(): number {
return this._sensitivity;
}
set sensitivity(value: number) {
this._sensitivity = value;
this.dispatchEvent({ type: PointerSettings.EVENT_CHANGE });
}
/**
* Copies the given pointer settings.
*
* @param settings - Pointer settings.
* @return This instance.
*/
copy(settings: PointerSettings): PointerSettings {
this.behaviour = settings.behaviour;
this.sensitivity = settings.sensitivity;
return this;
}
/**
* Clones this pointer settings instance.
*
* @return The cloned pointer settings.
*/
clone(): PointerSettings {
const clone = new PointerSettings();
return clone.copy(this);
}
/**
* Copies the given JSON data.
*
* @param json - The JSON data.
* @return This instance.
*/
fromJSON(json: PointerSettings): PointerSettings {
this.behaviour = json.behaviour;
this.sensitivity = json.sensitivity;
return this;
}
toJSON(): Record<string, unknown> {
return {
behaviour: this.behaviour,
sensitivity: this.sensitivity
};
}
}