122 lines
2.8 KiB
JavaScript
122 lines
2.8 KiB
JavaScript
import { Range } from './Range.js';
|
|
|
|
class Preferences {
|
|
|
|
constructor( game ) {
|
|
|
|
this.game = game;
|
|
|
|
}
|
|
|
|
init() {
|
|
|
|
const getProgressInRange = ( value, start, end ) => {
|
|
|
|
return Math.min( Math.max( (value - start) / (end - start), 0 ), 1 );
|
|
|
|
}
|
|
|
|
this.ranges = {
|
|
|
|
size: new Range( 'size', {
|
|
value: this.game.cube.size,
|
|
range: [ 2, 5 ],
|
|
step: 1,
|
|
onUpdate: value => {
|
|
|
|
this.game.cube.size = value;
|
|
|
|
this.game.preferences.ranges.scramble.list.forEach( ( item, i ) => {
|
|
|
|
item.innerHTML = this.game.scrambler.scrambleLength[ this.game.cube.size ][ i ];
|
|
|
|
} );
|
|
|
|
},
|
|
onComplete: () => this.game.storage.savePreferences(),
|
|
} ),
|
|
|
|
flip: new Range( 'flip', {
|
|
value: this.game.controls.flipConfig,
|
|
range: [ 0, 2 ],
|
|
step: 1,
|
|
onUpdate: value => {
|
|
|
|
this.game.controls.flipConfig = value;
|
|
|
|
},
|
|
onComplete: () => this.game.storage.savePreferences(),
|
|
} ),
|
|
|
|
scramble: new Range( 'scramble', {
|
|
value: this.game.scrambler.dificulty,
|
|
range: [ 0, 2 ],
|
|
step: 1,
|
|
onUpdate: value => {
|
|
|
|
this.game.scrambler.dificulty = value;
|
|
|
|
},
|
|
onComplete: () => this.game.storage.savePreferences()
|
|
} ),
|
|
|
|
fov: new Range( 'fov', {
|
|
value: this.game.world.fov,
|
|
range: [ 2, 45 ],
|
|
onUpdate: value => {
|
|
|
|
this.game.world.fov = value;
|
|
this.game.world.resize();
|
|
|
|
},
|
|
onComplete: () => this.game.storage.savePreferences()
|
|
} ),
|
|
|
|
theme: new Range( 'theme', {
|
|
value: { cube: 0, erno: 1, dust: 2, camo: 3, rain: 4 }[ this.game.themes.theme ],
|
|
range: [ 0, 4 ],
|
|
step: 1,
|
|
onUpdate: value => {
|
|
|
|
const theme = [ 'cube', 'erno', 'dust', 'camo', 'rain' ][ value ]
|
|
this.game.themes.setTheme( theme );
|
|
|
|
},
|
|
onComplete: () => this.game.storage.savePreferences()
|
|
} ),
|
|
|
|
hue: new Range( 'hue', {
|
|
value: 0,
|
|
range: [ 0, 360 ],
|
|
onUpdate: value => this.game.themeEditor.updateHSL(),
|
|
onComplete: () => this.game.storage.savePreferences(),
|
|
} ),
|
|
|
|
saturation: new Range( 'saturation', {
|
|
value: 100,
|
|
range: [ 0, 100 ],
|
|
onUpdate: value => this.game.themeEditor.updateHSL(),
|
|
onComplete: () => this.game.storage.savePreferences(),
|
|
} ),
|
|
|
|
lightness: new Range( 'lightness', {
|
|
value: 50,
|
|
range: [ 0, 100 ],
|
|
onUpdate: value => this.game.themeEditor.updateHSL(),
|
|
onComplete: () => this.game.storage.savePreferences(),
|
|
} ),
|
|
|
|
};
|
|
|
|
this.ranges.scramble.list.forEach( ( item, i ) => {
|
|
|
|
item.innerHTML = this.game.scrambler.scrambleLength[ this.game.cube.size ][ i ];
|
|
|
|
} );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
export { Preferences };
|