@@ -6,7 +6,7 @@ import { OBJLoader } from "../lib/OBJLoader.js";
66import { FlyControls } from "../lib/FlyControls.js" ;
77
88
9- let scene , orbitControls , camera , renderer , gui , poly_loaded = false ;
9+ let scene , orbitControls , camera , renderer , gui , polyLoaded = false ;
1010
1111/**
1212 * Sends a request to the url and returns parsed response
@@ -112,7 +112,7 @@ function renderPoints(frame, fizzyText, arrayOfPoints) {
112112function addPolyhedron ( scene , data ) {
113113 let verticesOfCube = [ ] ;
114114 if ( data !== undefined ) {
115- poly_loaded = true ;
115+ polyLoaded = true ;
116116
117117 for ( let vert of data ) {
118118 verticesOfCube . push ( new THREE . Vector3 ( vert [ 0 ] , vert [ 1 ] , vert [ 2 ] ) )
@@ -125,12 +125,12 @@ function addPolyhedron(scene, data) {
125125
126126 scene . add ( mesh ) ;
127127 } else {
128- poly_loaded = false ;
128+ polyLoaded = false ;
129129 }
130130}
131131
132132
133- function remove_points_from_scene ( ) {
133+ function removePointsFromScene ( ) {
134134 while ( scene . getObjectByName ( "point" ) !== undefined ) {
135135 scene . remove ( scene . getObjectByName ( "point" ) ) ;
136136 }
@@ -206,6 +206,50 @@ function init() {
206206}
207207
208208
209+ function process_online ( playback , fizzyText ) {
210+ let status = httpGet ( "/get_status" ) [ "status" ] ;
211+ playback . data = httpGet ( "/get_frame" ) ;
212+ if ( status && playback . data . length !== 0 ) {
213+ // New frame received from simulator
214+ fizzyText . numParticles = playback . data [ "x" ] . length ;
215+ playback . arrayOfPoints = renderPoints ( playback . data , fizzyText , playback . arrayOfPoints ) ;
216+ }
217+
218+ if ( status ) {
219+ playback . newFrame = true ;
220+
221+ if ( ! polyLoaded ) {
222+ addPolyhedron ( scene , httpGet ( "/get_poly" ) ) ;
223+ }
224+ }
225+
226+ return playback ;
227+ }
228+
229+
230+ function process_offline ( playback , fizzyText ) {
231+ if ( Math . round ( playback . frameId ) < 1 ) {
232+ playback . direction = 1 ;
233+ fizzyText . play = true ;
234+ playback . arrayOfPoints = [ ] ;
235+ removePointsFromScene ( )
236+ }
237+ if ( playback . frameId >= playback . data . length - 1 ) {
238+ playback . direction = - 1 ;
239+ }
240+
241+ if ( fizzyText . play ) {
242+ playback . frameId += playback . direction * parseFloat ( fizzyText . speedMode ) ;
243+ fizzyText . time = ( playback . frameId + 1 ) / playback . data . length ;
244+ }
245+
246+ if ( playback . data . length - 1 > Math . round ( playback . frameId ) && Math . round ( playback . frameId ) >= 1 ) {
247+ fizzyText . numParticles = playback . data [ Math . round ( playback . frameId ) ] [ "x" ] . length ;
248+ playback . arrayOfPoints = renderPoints ( playback . data [ Math . round ( playback . frameId ) ] , fizzyText , playback . arrayOfPoints ) ;
249+ }
250+
251+ return playback ;
252+ }
209253
210254
211255window . onload = function ( ) {
@@ -227,42 +271,55 @@ window.onload = function() {
227271 this . play = true ;
228272 this . turnOn = false ;
229273
230- if ( ! FilesMissing ) {
274+ if ( ! playback . filesMissing ) {
231275 let jsonDictionary = fileGet ( "/lib/saves/names.json" , false ) ;
232276 this . currentSave = jsonDictionary [ "default_name" ] ;
233277 } else {
234278 this . currentSave = "None" ;
235279 }
236280
237- this . reset_defaults = function ( ) {
281+ this . reset_defaults = function ( ) {
238282 for ( let i = 0 ; i < gui . __controllers . length ; i ++ ) {
239283 gui . __controllers [ i ] . setValue ( gui . __controllers [ i ] . initialValue ) ;
240284 }
285+ speed_drop_down . setValue ( "1.00" ) ;
241286 } ;
242287
243- this . restart = function ( ) {
288+ this . restart = function ( ) {
244289 if ( fizzyText . mode === "online" ) {
245290 return 0 ;
246291 }
247292
248- FrameId = 2 ;
249- direction = 1 ;
293+ playback . frameId = 2 ;
294+ playback . direction = 1 ;
250295 fizzyText . play = true ;
251- arrayOfPoints = [ ] ;
296+ playback . arrayOfPoints = [ ] ;
252297
253298 // clear scene from points
254- remove_points_from_scene ( )
299+ removePointsFromScene ( ) ;
255300 } ;
256301 } ;
257302
258- let FrameId = 1 , direction = 1 , arrayOfPoints = [ ] , data , FilesMissing = false , userId , newFrame = true ;
303+ class PlaybackInfo {
304+ constructor ( ) {
305+ this . frameId = 1 ;
306+ this . direction = 1 ;
307+ this . arrayOfPoints = [ ] ;
308+ this . data ;
309+ this . filesMissing = false ;
310+ this . userId ;
311+ this . newFrame = true ;
312+ }
313+ }
314+ let playback = new PlaybackInfo ( ) ;
259315 window . default_size = 0.007 ;
260316
317+ let allSaves ;
261318 try {
262- var allSaves = fileGet ( "/lib/saves/names.json" , false ) [ "names" ] ;
319+ allSaves = fileGet ( "/lib/saves/names.json" , false ) [ "names" ] ;
263320 } catch ( error ) {
264321 console . log ( "You have no growth saves in the lib/saves/" ) ;
265- FilesMissing = true ;
322+ playback . filesMissing = true ;
266323 }
267324
268325 let stats = initStats ( Stats ) ;
@@ -283,30 +340,27 @@ window.onload = function() {
283340 let controlsModeChooser = gui . add ( fizzyText , "mode" , [ "offline" , "online" ] ) . name ( "Mode" ) ;
284341 gui . add ( fizzyText , "reset_defaults" ) . name ( "Reset defaults" ) ;
285342
286- let playback = gui . addFolder ( "Playback" ) ;
287- playback . add ( fizzyText , "play" ) . name ( "Play (Space Bar)" ) . listen ( ) ;
288- playback . add ( fizzyText , "restart" ) . name ( "Restart" ) ;
289- playback . add ( fizzyText , "speedMode" , [ "0.25" , "0.5" , "0.75" , "1.00" , "1.25" , "1.5" , "1.75" , "2.00" , "5.00" , "10.0" ] ) . name ( "Playback Speed" ) ;
343+ let playback_folder = gui . addFolder ( "Playback" ) ;
344+ playback_folder . add ( fizzyText , "play" ) . name ( "Play (Space Bar)" ) . listen ( ) ;
345+ playback_folder . add ( fizzyText , "restart" ) . name ( "Restart" ) ;
346+ let speed_drop_down = playback_folder . add ( fizzyText , "speedMode" , [ "0.25" , "0.5" , "0.75" , "1.00" , "1.25" , "1.5" , "1.75" , "2.00" , "5.00" , "10.0" ] ) . name ( "Playback Speed" ) ;
290347
291- let controlsTimeline = playback . add ( fizzyText , "time" , 0 , 1 ) . step ( 0.01 ) . name ( "Timeline" ) . listen ( ) ;
292- let controlsChooser = playback . add ( fizzyText , "currentSave" , allSaves ) . name ( "Choose save" ) ;
293- playback . open ( ) ;
348+ let controlsTimeline = playback_folder . add ( fizzyText , "time" , 0 , 1 ) . step ( 0.01 ) . name ( "Timeline" ) . listen ( ) ;
349+ let controlsChooser = playback_folder . add ( fizzyText , "currentSave" , allSaves ) . name ( "Choose save" ) ;
350+ playback_folder . open ( ) ;
294351
295352 let renderFolder = gui . addFolder ( "Render" ) ;
296353 let controlsRotate = renderFolder . add ( fizzyText , "rotate" ) . name ( "Autorotate" ) ;
297354 let controlsRender = renderFolder . add ( fizzyText , "dorender" ) . name ( "Start render" ) ;
298-
299- // let author = gui.add(fizzyText, "name").name("Made by:");
300- // author.domElement.style.pointerEvents = "none";
301355
302356
303357 let download = function ( ) {
304- while ( ! httpGet ( "/get_render_status" ) [ "status" ] [ parseInt ( userId , 10 ) ] ) {
358+ while ( ! httpGet ( "/get_render_status" ) [ "status" ] [ parseInt ( playback . userId , 10 ) ] ) {
305359 console . log ( "Working" ) ;
306360 }
307361 console . log ( "Done!" ) ;
308362
309- let url = "lib/movies/" + userId + ".mp4" ;
363+ let url = "lib/movies/" + playback . userId + ".mp4" ;
310364 let a = document . createElement ( "a" ) ;
311365 a . href = url ;
312366 a . download = url . split ( "/" ) . pop ( ) ;
@@ -331,11 +385,11 @@ window.onload = function() {
331385 let element = document . getElementById ( "preloader" ) ;
332386 element . appendChild ( div ) ;
333387
334- httpSend ( "/add_render" , { "img" : "" , "user" : userId , "update" : true } ) ;
388+ httpSend ( "/add_render" , { "img" : "" , "user" : playback . userId , "update" : true } ) ;
335389
336390 setTimeout ( download , 100 ) ;
337391 } else {
338- userId = httpGet ( "/get_id" ) [ "id" ] ;
392+ playback . userId = httpGet ( "/get_id" ) [ "id" ] ;
339393 }
340394 } ) ;
341395
@@ -344,44 +398,47 @@ window.onload = function() {
344398 } ) ;
345399
346400 controlsTimeline . onChange ( function ( value ) {
347- FrameId = ( data . length ) * ( value ) ;
401+ playback . frameId = ( playback . data . length ) * ( value ) ;
348402 } ) ;
349403
350404 controlsModeChooser . onChange ( function ( value ) {
351- if ( value === "offline" ) { data = fileGet ( "lib/saves/" + fizzyText . currentSave + ".json" , FilesMissing ) ; }
352- FrameId = 2 ;
405+ if ( value === "offline" ) {
406+ playback . data = fileGet ( "lib/saves/" + fizzyText . currentSave + ".json" , playback . filesMissing ) ;
407+ }
408+ playback . frameId = 2 ;
353409 fizzyText . play = true ;
354- poly_loaded = false ;
355- remove_points_from_scene ( )
410+ polyLoaded = false ;
411+ removePointsFromScene ( )
356412 scene . remove ( scene . getObjectByName ( "poly" ) ) ;
357413
358414 if ( value === "online" ) {
359- playback . close ( ) ;
415+ playback_folder . close ( ) ;
360416 let obj = httpGet ( "/get_poly" ) ;
361417 if ( obj . length === 0 ) {
362418 console . log ( "No Polyhedron data. Run simulator process or contact admins." ) ;
363419 } else {
364420 addPolyhedron ( scene , httpGet ( "/get_poly" ) ) ;
365421 }
366422 } else {
367- playback . open ( ) ;
368- addPolyhedron ( scene , undefined ) ;
423+ playback_folder . open ( ) ;
424+ addPolyhedron ( scene , [ [ - 1 , - 1 , - 1 ] , [ 1 , - 1 , - 1 ] , [ 1 , 1 , - 1 ] , [ - 1 , 1 , - 1 ] , [ - 1 , - 1 , 1 ] ,
425+ [ 1 , - 1 , 1 ] , [ 1 , 1 , 1 ] , [ - 1 , 1 , 1 ] ] ) ;
369426 }
370427
371- arrayOfPoints = [ ] ;
428+ playback . arrayOfPoints = [ ] ;
372429
373430 } ) ;
374431
375432 let loadSave = function ( ) {
376433 if ( fizzyText . mode === "online" ) {
377434 return 0 ;
378435 }
379- FrameId = 2 ;
436+ playback . frameId = 2 ;
380437 fizzyText . play = true ;
381- remove_points_from_scene ( )
382- arrayOfPoints = [ ] ;
438+ removePointsFromScene ( )
439+ playback . arrayOfPoints = [ ] ;
383440
384- data = fileGet ( "lib/saves/" + fizzyText . currentSave + ".json" , FilesMissing ) ;
441+ playback . data = fileGet ( "lib/saves/" + fizzyText . currentSave + ".json" , playback . filesMissing ) ;
385442
386443 let elmnt = document . getElementById ( "preloader" ) ;
387444 elmnt . remove ( ) ;
@@ -402,14 +459,14 @@ window.onload = function() {
402459 } ) ;
403460
404461 controlsSize . onChange ( function ( value ) {
405- refreshArrayOfPoints ( fizzyText , arrayOfPoints ) ;
462+ refreshArrayOfPoints ( fizzyText , playback . arrayOfPoints ) ;
406463 } ) ;
407464
408465 particlesColor . onChange ( function ( value ) {
409466 fizzyText . color [ 0 ] = value [ 0 ] ;
410467 fizzyText . color [ 1 ] = value [ 1 ] ;
411468 fizzyText . color [ 2 ] = value [ 2 ] ;
412- refreshArrayOfPoints ( fizzyText , arrayOfPoints ) ;
469+ refreshArrayOfPoints ( fizzyText , playback . arrayOfPoints ) ;
413470 } ) ;
414471
415472
@@ -418,75 +475,40 @@ window.onload = function() {
418475 let keyCode = event . which ;
419476 if ( keyCode === 32 ) { // Space
420477 fizzyText . play = ! fizzyText . play ;
421- } else if ( keyCode === 39 && FrameId < data . length ) { // Right arrow
422- FrameId += 5 ;
423- fizzyText . time = ( FrameId + 1 ) / data . length ;
478+ } else if ( keyCode === 39 && playback . frameId < playback . data . length ) { // Right arrow
479+ playback . frameId += 5 ;
480+ fizzyText . time = ( playback . frameId + 1 ) / playback . data . length ;
424481 } else if ( keyCode === 37 ) { // Left arrow
425- FrameId = Math . max ( 1 , FrameId - 5 ) ;
426- fizzyText . time = ( FrameId + 1 ) / data . length ;
482+ playback . frameId = Math . max ( 1 , playback . frameId - 5 ) ;
483+ fizzyText . time = ( playback . frameId + 1 ) / playback . data . length ;
427484 return false ;
428485 }
429486 }
430487
431488 init ( ) ;
432489
433- // Run game loop (update, render, repeat)
434-
435- data = fileGet ( "/lib/saves/" + fizzyText . currentSave + ".json" , FilesMissing ) ;
490+ playback . data = fileGet ( "/lib/saves/" + fizzyText . currentSave + ".json" , playback . filesMissing ) ;
436491
492+ // Run game loop (update, render, repeat)
437493 let GameLoop = function ( ) {
438494 requestAnimationFrame ( GameLoop ) ;
439495 stats . begin ( ) ;
440496 orbitControls . update ( ) ;
441497
442498 if ( fizzyText . mode === "online" ) {
443-
444- let status = httpGet ( "/get_status" ) [ "status" ] ;
445- data = httpGet ( "/get_frame" ) ;
446- if ( status && data . length !== 0 ) {
447- // New frame received from simulator
448- fizzyText . numParticles = data [ "x" ] . length ;
449- arrayOfPoints = renderPoints ( data , fizzyText , arrayOfPoints ) ;
450- }
451-
452- if ( status ) {
453- newFrame = true ;
454-
455- if ( ! poly_loaded ) {
456- addPolyhedron ( scene , httpGet ( "/get_poly" ) ) ;
457- }
458- }
499+ playback = process_online ( playback , fizzyText ) ;
459500 } else {
460-
461- if ( Math . round ( FrameId ) < 1 ) {
462- direction = 1 ;
463- fizzyText . play = true ;
464- arrayOfPoints = [ ] ;
465- remove_points_from_scene ( )
466- }
467- if ( FrameId >= data . length - 1 ) {
468- direction = - 1 ;
469- }
470-
471- if ( fizzyText . play ) {
472- FrameId += direction * parseFloat ( fizzyText . speedMode ) ;
473- fizzyText . time = ( FrameId + 1 ) / data . length ;
474- }
475-
476- if ( data . length - 1 > Math . round ( FrameId ) && Math . round ( FrameId ) >= 1 ) {
477- fizzyText . numParticles = data [ Math . round ( FrameId ) ] [ "x" ] . length ;
478- arrayOfPoints = renderPoints ( data [ Math . round ( FrameId ) ] , fizzyText , arrayOfPoints ) ;
479- }
501+ playback = process_offline ( playback , fizzyText ) ;
480502 }
481503
482504 renderer . render ( scene , camera ) ;
483505
484506 if ( ( fizzyText . mode === "offline" && fizzyText . dorender && fizzyText . play )
485- || ( fizzyText . mode === "online" && fizzyText . dorender && newFrame ) ) {
507+ || ( fizzyText . mode === "online" && fizzyText . dorender && playback . newFrame ) ) {
486508 // Capture currect screen and send to server
487509 let image = renderer . domElement . toDataURL ( "image/png" , 1 ) ;
488- httpSend ( "/add_render" , { "img" : image , "user" : userId , "update" : false } ) ;
489- newFrame = false ;
510+ httpSend ( "/add_render" , { "img" : image , "user" : playback . userId , "update" : false } ) ;
511+ playback . newFrame = false ;
490512 }
491513
492514 stats . end ( ) ;
0 commit comments