Skip to content

Commit 26e2a05

Browse files
committed
Better code structure with classes and functions
1 parent ee002c8 commit 26e2a05

File tree

2 files changed

+115
-93
lines changed

2 files changed

+115
-93
lines changed

main_server.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -108,8 +108,8 @@ function addRender(req, res) {
108108
num = "0" + num;
109109
}
110110

111-
112-
fs.writeFile("lib/renders/" + Data["user"] + "_" + num + ".png", base64Data, "base64", function(err) {
111+
let output_filename = "lib/renders/" + Data["user"] + "_" + num + ".png"
112+
fs.writeFile(output_filename, base64Data, "base64", function(err) {
113113
if (err) {
114114
return console.log(err);
115115
}
@@ -211,7 +211,7 @@ function main(req, res) {
211211
}
212212
}
213213

214-
let config = JSON.parse(fs.readFileSync('config.json'));
214+
let config = JSON.parse(fs.readFileSync("config.json"));
215215
let app = http.createServer(main);
216216
app.listen(config["port"]);
217217
console.log("Listening on " + config["port"]);

scripts/main.js

Lines changed: 112 additions & 90 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { OBJLoader } from "../lib/OBJLoader.js";
66
import { 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) {
112112
function 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

211255
window.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

Comments
 (0)