@@ -17,6 +17,7 @@ const folderSongs = gui.addFolder('songs');
1717
1818let audio = null ;
1919let loop = false ;
20+ let pauseClickTimeout = null ;
2021
2122const options = {
2223 volume : 0.500 ,
@@ -35,7 +36,10 @@ const colorSchemes = {
3536 Artwork : 2 ,
3637 Negative : 3
3738}
38- folderOptions . add ( selectedScheme , 'Color Scheme' , colorSchemes ) . onChange ( v => points . setUniform ( 'colorScheme' , v ) ) ;
39+ folderOptions . add ( selectedScheme , 'Color Scheme' , colorSchemes ) . onChange ( v => {
40+ points . setUniform ( 'colorScheme' , v )
41+ saveOption ( 'scheme' , v ) ;
42+ } ) ;
3943
4044function clickSong ( ) {
4145 playSong ( this )
@@ -231,11 +235,35 @@ songs.forEach(async (song, index) => {
231235} )
232236
233237//------------------------------------
238+ async function saveOption ( key , value ) {
239+ await db . options . put ( { key, value } ) ;
240+ }
241+
242+ async function getOption ( key ) {
243+ const option = await db . options . get ( key ) ;
244+ return option ? option . value : null ;
245+ }
246+
247+
234248
235249const db = new Dexie ( 'bhdb' ) ;
236250db . version ( 1 ) . stores ( {
237- songs : '++id, file'
251+ songs : '++id, file' ,
252+ options : 'key'
238253} ) ;
254+ const volume = await getOption ( 'volume' ) ;
255+ if ( volume ) {
256+ options . volume = volume ;
257+ }
258+
259+ const scheme = await getOption ( 'scheme' ) ;
260+ console . log ( scheme ) ;
261+
262+ if ( scheme ) {
263+ selectedScheme [ 'Color Scheme' ] = scheme ;
264+ points . setUniform ( 'colorScheme' , scheme )
265+ folderOptions . updateDisplay ( ) ;
266+ }
239267
240268const songsFromDB = await db . songs
241269 . toArray ( ) ;
@@ -269,7 +297,10 @@ Object.keys(options).forEach(key => {
269297 }
270298} )
271299
272- volumeSlider . onChange ( value => audio . volume = value ) ;
300+ volumeSlider . onChange ( value => {
301+ audio . volume = value ;
302+ saveOption ( 'volume' , value ) ;
303+ } ) ;
273304
274305folderOptions . open ( ) ;
275306folderSongs . open ( ) ;
@@ -303,7 +334,20 @@ await points.init(renderPasses);
303334
304335points . fitWindow = true ;
305336
306- document . addEventListener ( 'dblclick' , _ => points . fullscreen = ! points . fullscreen ) ;
337+ points . canvas . addEventListener ( 'click' , _ => {
338+ if ( pauseClickTimeout ) {
339+ return ;
340+ }
341+ pauseClickTimeout = setTimeout ( ( ) => {
342+ audio ?. paused ? audio ?. play ( ) : audio ?. pause ( ) ;
343+ pauseClickTimeout = null ;
344+ } , 300 ) ;
345+ } ) ;
346+ document . addEventListener ( 'dblclick' , _ => {
347+ clearTimeout ( pauseClickTimeout ) ;
348+ pauseClickTimeout = null ;
349+ points . fullscreen = ! points . fullscreen ;
350+ } ) ;
307351
308352setInterval ( _ => {
309353 console . log ( '---- 10s' ) ;
0 commit comments