@@ -41,10 +41,15 @@ export class DosInstance {
41
41
42
42
storage : Storage ;
43
43
44
+ volume : number ;
45
+
44
46
private clickToStart : boolean ;
45
47
private unbindControls : ( ) => void = ( ) => { /**/ } ;
46
48
private storedLayersConfig : LayersConfig | LegacyLayersConfig | null = null ;
47
49
private onMobileControlsChanged : ( visible : boolean ) => void ;
50
+ private onSensitivityChanged : ( ( sensitivity : number ) => void ) [ ] = [ ] ;
51
+ private onScaleChanged : ( ( scale : number ) => void ) [ ] = [ ] ;
52
+ private onVolumeChanged : ( ( scale : number ) => void ) [ ] = [ ] ;
48
53
49
54
constructor ( root : HTMLDivElement , emulatorsUi : EmulatorsUi , options : DosOptions ) {
50
55
this . options = options ;
@@ -66,6 +71,9 @@ export class DosInstance {
66
71
const sensitivityValue = Number . parseFloat ( this . storage . getItem ( "sensitivity" ) ?? "1.0" ) ;
67
72
this . sensitivity = Number . isNaN ( sensitivityValue ) ? 1.0 : sensitivityValue ;
68
73
74
+ const volumeValue = Number . parseFloat ( this . storage . getItem ( "volume" ) ?? "1.0" ) ;
75
+ this . volume = Number . isNaN ( volumeValue ) ? 1.0 : volumeValue ;
76
+
69
77
this . onMobileControlsChanged = ( ) => { /**/ } ;
70
78
71
79
if ( this . emulatorFunction === "backend" && this . createTransportLayer === undefined ) {
@@ -221,6 +229,9 @@ export class DosInstance {
221
229
if ( this . mobileControls ) {
222
230
await this . setLayersConfig ( this . layersConfig ) ;
223
231
}
232
+ for ( const next of this . onScaleChanged ) {
233
+ next ( this . scaleControls ) ;
234
+ }
224
235
}
225
236
226
237
public async setSensitivity ( sensitivity : number ) {
@@ -230,6 +241,16 @@ export class DosInstance {
230
241
this . sensitivity = sensitivity ;
231
242
this . storage . setItem ( "sensitivity" , sensitivity + "" ) ;
232
243
await this . setLayersConfig ( this . layersConfig ) ;
244
+ for ( const next of this . onSensitivityChanged ) {
245
+ next ( this . sensitivity ) ;
246
+ }
247
+ }
248
+
249
+ public async setVolume ( volume : number ) {
250
+ this . volume = volume ;
251
+ for ( const next of this . onVolumeChanged ) {
252
+ next ( this . volume ) ;
253
+ }
233
254
}
234
255
235
256
public async setAutolock ( autolock : boolean ) {
@@ -244,6 +265,30 @@ export class DosInstance {
244
265
this . onMobileControlsChanged = handler ;
245
266
}
246
267
268
+ public registerOnSensitivityChanged = ( handler : ( sensitivity : number ) => void ) => {
269
+ this . onSensitivityChanged . push ( handler ) ;
270
+ } ;
271
+
272
+ public removeOnSensitivityChanged = ( handler : ( sensitivity : number ) => void ) => {
273
+ this . onSensitivityChanged = this . onSensitivityChanged . filter ( ( n ) => n !== handler ) ;
274
+ } ;
275
+
276
+ public registerOnScaleChanged = ( handler : ( scale : number ) => void ) => {
277
+ this . onScaleChanged . push ( handler ) ;
278
+ } ;
279
+
280
+ public removeOnScaleChanged = ( handler : ( scale : number ) => void ) => {
281
+ this . onScaleChanged = this . onScaleChanged . filter ( ( n ) => n !== handler ) ;
282
+ } ;
283
+
284
+ public registerOnVolumeChanged = ( handler : ( volume : number ) => void ) => {
285
+ this . onVolumeChanged . push ( handler ) ;
286
+ } ;
287
+
288
+ public removeOnVolumeChanged = ( handler : ( volume : number ) => void ) => {
289
+ this . onVolumeChanged = this . onVolumeChanged . filter ( ( n ) => n !== handler ) ;
290
+ } ;
291
+
247
292
private async runBundle ( bundleUrl : string , optionalChangesUrl : string | undefined , persistKey : string ) {
248
293
const emulatorsUi = this . emulatorsUi ;
249
294
if ( this . emulatorFunction === "janus" ) {
0 commit comments