From 57abf443a51d8d3c59b748a5accf15801f1608c8 Mon Sep 17 00:00:00 2001
From: Rose Hirigoyen <rosehirigoyen@gmail.com>
Date: Wed, 9 Sep 2020 12:46:18 -0400
Subject: [PATCH] Simulate button!

---
 css/gui.css     | 19 ++++++-----
 index.html      |  2 +-
 js/initScene.js | 85 ++++++++++++++++++++++++++++++++-----------------
 3 files changed, 67 insertions(+), 39 deletions(-)

diff --git a/css/gui.css b/css/gui.css
index c7e5287..7ae8de4 100644
--- a/css/gui.css
+++ b/css/gui.css
@@ -1,10 +1,13 @@
-* {
-    -webkit-touch-callout: none; /* iOS Safari */
-    -webkit-user-select: none; /* Safari */
-    -khtml-user-select: none; /* Konqueror HTML */
-    -moz-user-select: none; /* Old versions of Firefox */
-    -ms-user-select: none; /* Internet Explorer/Edge */
-    user-select: none; /* Non-prefixed version, currently
-                                  supported by Chrome, Opera and Firefox */
+button {
+    position: absolute;
+    top: 100px;
+    font-size: 16px;
+    border-radius: 8px;
+    padding: 5px 12px;
+    border: 2px solid #ffd587;
 }
 
+.disabled {
+    opacity: 0.5;
+    cursor: not-allowed;
+}
diff --git a/index.html b/index.html
index ab89275..738e87b 100644
--- a/index.html
+++ b/index.html
@@ -6,7 +6,7 @@
         <title>TP6 Simulator</title>
 
         <link rel="stylesheet" type="text/css" href="css/style.css"/>
-        <!-- <link rel="stylesheet" type="text/css" href="css/gui.css"/> -->
+        <link rel="stylesheet" type="text/css" href="css/gui.css"/>
 
 
         <script src="https://preview.babylonjs.com/babylon.js"></script>
diff --git a/js/initScene.js b/js/initScene.js
index 6677102..e53e2f5 100644
--- a/js/initScene.js
+++ b/js/initScene.js
@@ -220,7 +220,7 @@ var createRaceTrack = function () {
         });
 }
 
-var placeRaceTrack = function(length) {
+var placeRaceTrack = function (length) {
         let startLinePos = -107
 
         let x = 0
@@ -242,7 +242,7 @@ var placeRaceTrack = function(length) {
         });
 }
 
-var addUI = function() {
+var addUI = function () {
         let input = document.getElementById("input");
 
         if (!input) {
@@ -257,29 +257,49 @@ var addUI = function() {
         }
 
         // Files input
-        var filesInput = new BABYLON.FilesInput(engine, null, null, null, null, null, function () { BABYLON.Tools.ClearLogCache() }, function () {}, null);
+        var filesInput = new BABYLON.FilesInput(engine, null, null, null, null, null, function () { BABYLON.Tools.ClearLogCache() }, function () { }, null);
         filesInput.onProcessFileCallback = (function (file, name, extension) {
-        if (filesInput._filesToLoad && filesInput._filesToLoad.length === 1 && extension) {
-                BABYLON.Tools.ReadFile(file, function(dataText) {
-                    var data = JSON.parse(dataText);
-                    setupSimulation(data);
-                });
-        }
-        return false;
-    }).bind(this);
-
-    input.addEventListener('change', function (event) {
-        var filestoLoad;
-        // Handling files from input files
-        if (event && event.target && event.target.files) {
-            filesToLoad = event.target.files;
+                if (filesInput._filesToLoad && filesInput._filesToLoad.length === 1 && extension) {
+                        BABYLON.Tools.ReadFile(file, function (dataText) {
+                                let simBtn = document.getElementById("simBtn")
+                                simBtn.disabled = false
+                                var data = JSON.parse(dataText);
+                                setupSimulation(data);
+                        });
+                }
+                return false;
+        }).bind(this);
+
+        input.addEventListener('change', function (event) {
+                isSimulationRunning = false
+                let simBtn = document.getElementById("simBtn")
+                simBtn.disabled = true
+                var filestoLoad;
+                // Handling files from input files
+                if (event && event.target && event.target.files) {
+                        filesToLoad = event.target.files;
+                }
+                filesInput.loadFiles(event);
+        }, false);
+
+        let simBtn = document.getElementById("simBtn")
+        if (!simBtn) {
+                simBtn = document.createElement("button");
+                simBtn.id = "simBtn"
+                simBtn.type = "button";
+                simBtn.textContent = "Simulate!"
+                simBtn.style.zIndex = "2"
+                simBtn.disabled = true
+                document.body.appendChild(simBtn);
+                simBtn.style.right = `${20 + input.getBoundingClientRect().width - simBtn.getBoundingClientRect().width}px`
         }
-        filesInput.loadFiles(event);
-    }, false);     
 
+        simBtn.addEventListener("click", function() {
+                isSimulationRunning = true
+              });
 }
 
-var setupSimulation = function(data) {
+var setupSimulation = function (data) {
         // Simulation
         let simulation = data.simulation
         if (simulation == null) {
@@ -300,12 +320,12 @@ var setupSimulation = function(data) {
                 return;
         }
 
-        if(trackLength <= 0 || isNaN(trackLength)) {
+        if (trackLength <= 0 || isNaN(trackLength)) {
                 console.log("Invalid track length! >:(")
                 return;
         }
 
-        if(trackLength > 200){
+        if (trackLength > 200) {
                 console.log("Track length max value is 200 >:(")
                 return;
         }
@@ -314,26 +334,26 @@ var setupSimulation = function(data) {
 
         // Build vehicules
         let vehiculesData = simulation.vehicules
-        if(vehiculesData == null || vehiculesData.length === 0){
+        if (vehiculesData == null || vehiculesData.length === 0) {
                 console.log("No vehicules to simulate :(")
                 return;
         }
 
-        for (const vehicule of vehiculesData){
+        for (const vehicule of vehiculesData) {
                 let name = vehicule.name
-                if (name == null){
+                if (name == null) {
                         console.log("Vehicule has no name :(")
                         continue;
                 }
 
                 let components = vehicule.components
-                if (components == null || components.length === 0){
+                if (components == null || components.length === 0) {
                         console.log(`Vehicule ${name} has no components :(`)
                         continue;
                 }
 
                 let movements = vehicule.movements
-                if (movements == null || movements.length === 0){
+                if (movements == null || movements.length === 0) {
                         console.log(`No movements found for vehicule ${name} :(`)
                         continue;
                 }
@@ -343,13 +363,18 @@ var setupSimulation = function(data) {
 
 }
 
-var runSimulation = function() {
-        if(isSimulationRunning) {
+var runSimulation = function () {
+        if (isSimulationRunning) {
                 success = false
                 vehicules.forEach(v => {
-                       success = success || v.toNextState()
+                        success = success || v.toNextState()
                 })
                 isSimulationRunning = success
+
+                if(!isSimulationRunning) {
+                        let simBtn = document.getElementById("simBtn")
+                        simBtn.disabled = true
+                }
         }
 
         setTimeout(runSimulation, updateTime);
-- 
GitLab