From 3a6ff782c5f766c52404f9c2e5de5128c0e6e3c2 Mon Sep 17 00:00:00 2001
From: Antoine Rochebois <antoine.rochebois@insa-lyon.fr>
Date: Sun, 8 Nov 2020 21:34:47 +0000
Subject: [PATCH] debug + finition acti 2

---
 activity_2/img/r0.png            | Bin 0 -> 10750 bytes
 activity_2/main-script.js        | 237 +++++++++++++++----------------
 activity_2/toolbox.xml           |   1 +
 res/activity_functions.js        |   6 +
 res/blocks/arduino_blocks_def.js |  11 ++
 res/blocks/arduino_blocks_gen.js |   7 +
 6 files changed, 140 insertions(+), 122 deletions(-)
 create mode 100644 activity_2/img/r0.png

diff --git a/activity_2/img/r0.png b/activity_2/img/r0.png
new file mode 100644
index 0000000000000000000000000000000000000000..ede692f25240af718f3511b3d703988e0870699d
GIT binary patch
literal 10750
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
V$5Y0t;m;NTO;tUWBBd)q{{#2DgAo7#

literal 0
HcmV?d00001

diff --git a/activity_2/main-script.js b/activity_2/main-script.js
index 911c24d..fa3fe07 100644
--- a/activity_2/main-script.js
+++ b/activity_2/main-script.js
@@ -2,20 +2,17 @@
 avec les fonctions et variables déjà définies dans 'activity_functions.js' du
 dossier 'res'.*/
 
-// Gets the modal (intiated as the intro_modal at first)
 var modal = document.getElementById("intro_modal");
-// Get the <span> element that closes the modal
 var span = document.getElementsByClassName("close")[0];
 
-// Displays the modal when DOM is Loaded
 document.addEventListener('DOMContentLoaded', event => {
   modal.style.display = "block";
+  canvas = SVG().addTo('#animationArea').size(660, 510)
+  initCanvas();
 });
-// When the user clicks on <span> (x), close the modal
 span.onclick = function() {
   modal.style.display = "none";
 }
-// When the user clicks anywhere outside of the modal, close it
 window.onclick = function(event) {
   if (event.target == modal) {
     modal.style.display = "none";
@@ -25,7 +22,7 @@ window.onclick = function(event) {
 
 
 
-
+var canvas;
 var firstTime;
 var curSpeed;
 var curPos;
@@ -36,87 +33,31 @@ var rocketLaunched;
 var simu_timeouts = [];
 var manual_enabled;
 
-var sky_rect
-var maxq_rect
-var maxq_text
-var path
-var rocket
-var length
-
-var fuel_rect
-var fuel_box
-var fuel_text
-
-var power_rect
-var power_box
-var power_text
-
-var rocket_img
+var sky_rect;
+var maxq_rect;
+var maxq_text;
+var path;
+var rocket;
+var length;
 
+var fuel_rect;
+var fuel_box;
+var fuel_text;
 
+var power_rect;
+var power_box;
+var power_text;
 
+var rocket_img;
 
 
-var canvas = SVG().addTo('#animationArea').size(660, 510)
 
-var fuel_gradient = canvas.gradient('linear', function(add) {
-  add.stop(0, '#ff2e27')
-  add.stop(1, '#ffde00')
-})
-var power_gradient = canvas.gradient('linear', function(add) {
-  add.stop(0, '#3c8001')
-  add.stop(1, '#93f45e')
-})
-var sky_gradient = canvas.gradient('linear', function(add) {
-  add.stop(0, '#4cdaff')
-  add.stop(1, '#001b91')
-}).from(0, 1).to(0, 0)
-sky_rect = canvas.rect(500, 350).fill(sky_gradient).stroke({ width: 3, color: '#333' }).attr({x: 5, y: 5})
-maxq_rect = canvas.rect(500, 30).stroke({ width: 3, color: '#555' }).attr({x: 5, y: 220, fill:'#FFA343', })
-maxq_text = canvas.text("Zone de max Q").attr({x: 350, y:220})
-path = canvas.path("M40,353 C40,70 300,48 503,41").fill('none').stroke({width:5, color: '#ff0000'})
-rocket = canvas.image('img/r1.png').size(30, 1000).center(40,353)
-length = path.length()
 
-fuel_rect = canvas.rect(490, 50).attr({x: 160, y: 450, fill: fuel_gradient})
-fuel_box = canvas.rect(490, 50).fill('none').stroke({ width: 3, color: '#333' }).attr({x: 160, y: 450})
-fuel_text = canvas.text("Carburant de l'étage :").attr({x: 0, y: 460})
-
-power_rect = canvas.rect(490, 50).attr({x: 160, y: 395, fill: power_gradient})
-power_box = canvas.rect(490, 50).fill('none').stroke({ width: 3, color: '#333' }).attr({x: 160, y: 395})
-power_text = canvas.text("Puissance moteurs :").attr({x: 0, y: 405})
-
-rocket_img = canvas.image('img/r1.png').attr({x: 550, y : 0})
-
-function enableManual() {
-  manual_enabled = true;
-  document.addEventListener('keydown', function(event) {
-      if(event.keyCode == 38) {
-          changePower(power_ratio+0.01)
-      }
-      else if(event.keyCode == 40) {
-          changePower(power_ratio-0.01)
-      } else if (event.keyCode == 32) {
-        if (rocketLaunched) changeRocketStage()
-        else launchRocket()
-      }
-  });
-}
+/*Fonctions liées à l'animation, la simu et à sa gestion */
 
 
 
-function init_var() {
-  for (var i=0; i<simu_timeouts.length; i++) {
-  clearTimeout(simu_timeouts[i]);
-  }
-  console.log("Initialisation de la simulation")
-  firstTime = (new Date()).getTime()
-  manual_enabled = false;
-  curPos = 0;
-  curSpeed = 0;
-  curStage = 1;
-  rocketLaunched = false;
-  canvas.clear()
+function initCanvas() {
   var fuel_gradient = canvas.gradient('linear', function(add) {
     add.stop(0, '#ff2e27')
     add.stop(1, '#ffde00')
@@ -133,35 +74,108 @@ function init_var() {
   maxq_rect = canvas.rect(500, 30).stroke({ width: 3, color: '#555' }).attr({x: 5, y: 220, fill:'#FFA343', })
   maxq_text = canvas.text("Zone de max Q").attr({x: 350, y:220})
   path = canvas.path("M40,353 C40,70 300,48 503,41").fill('none').stroke({width:5, color: '#ff0000'})
-  rocket = canvas.image('img/r1.png').size(30, 1000).center(40,353)
+  rocket = canvas.image('img/r0.png').size(30, 1000).center(40,353)
   length = path.length()
-
+  
   fuel_rect = canvas.rect(490, 50).attr({x: 160, y: 450, fill: fuel_gradient})
   fuel_box = canvas.rect(490, 50).fill('none').stroke({ width: 3, color: '#333' }).attr({x: 160, y: 450})
   fuel_text = canvas.text("Carburant de l'étage :").attr({x: 0, y: 460})
-
+  
   power_rect = canvas.rect(490, 50).attr({x: 160, y: 395, fill: power_gradient})
   power_box = canvas.rect(490, 50).fill('none').stroke({ width: 3, color: '#333' }).attr({x: 160, y: 395})
   power_text = canvas.text("Puissance moteurs :").attr({x: 0, y: 405})
+  
+  rocket_img = canvas.image('img/r0.png').attr({x: 550, y : 0})
+}
+
+/**
+ * Fonction appelée à chaque lancement du code.
+ */
 
-  rocket_img = canvas.image('img/r1.png').attr({x: 550, y : 0})
+function init_var() {
+  for (var i=0; i<simu_timeouts.length; i++) {
+  clearTimeout(simu_timeouts[i]);
+  }
+  console.log("Initialisation de la simulation")
+  firstTime = (new Date()).getTime()
+  manual_enabled = false;
+  curPos = 0;
+  curSpeed = 0;
+  curStage = 1;
+  rocketLaunched = false;
+  canvas.clear();
+  initCanvas();
   changeFuel(1, 0)
   changePower(0, 0)
   stepSimulation(getCurTime())
 }
 
+function enableManual() {
+  manual_enabled = true;
+  document.addEventListener('keydown', function(event) {
+    console.log("c")
+    if (manual_enabled) {
+      if(event.keyCode == 38) {
+        changePower(power_ratio+0.02)
+    }
+      else if(event.keyCode == 40) {
+          changePower(power_ratio-0.02)
+      } else if (event.keyCode == 32) {
+        if (rocketLaunched) changeRocketStage()
+        else launchRocket()
+      }
+    }
+      
+  });
+}
+
 function launchRocket() {
   rocketLaunched = true;
+  changeRocketImg(1);
 }
 
-function getCurTime() {
-  return(new Date()).getTime() - firstTime;
+
+function changeRocketStage() {
+  curStage = (curStage < 4)?(curStage+1):4;
+  changeRocketImg(curStage)
+  if (curStage < 4) changeFuel(1, 200)
+}
+
+function changeFuel(ratio, duration) {
+  fuel_ratio = Math.max(ratio, 0);
+  if (duration <= 0 ) {
+    fuel_rect.width(fuel_box.width()*fuel_ratio);
+  } else {
+    fuel_rect.animate(duration, 0, 'now').width(fuel_box.width()*fuel_ratio);
+  }
+}
+
+function changePower(ratio, duration) {
+  if (rocketLaunched || ratio == 0) {
+    power_ratio =  Math.max(ratio, 0);
+    power_ratio = Math.min(power_ratio, 1);
+    power_rect.animate(duration, 0, 'now').width(power_box.width()*power_ratio);
+  }
+}
+
+function isFuelEmpty() {
+  return fuel_ratio <= 0;
 }
 
+function isInMaxQ() {
+  return curPos>0.14 && curPos<0.23
+}
+
+function isInOrbit() {
+  return curPos>=1;
+}
+
+
 function update_speed(deltaT) {
   if (curPos <= 0 && curSpeed < 0 && power_ratio<=0.5) curSpeed = 0
   else if (!rocketLaunched) curSpeed = 0
-  else curSpeed = curSpeed + (power_ratio-0.5)*deltaT*0.01
+  else if (fuel_ratio > 0) curSpeed = curSpeed + (power_ratio-0.5)*deltaT*0.01
+  else curSpeed = curSpeed + (0-0.5)*deltaT*0.01
 
 }
 
@@ -171,19 +185,18 @@ function update_pos(deltaT) {
 }
 
 function update_fuel(deltaT) {
-  changeFuel(fuel_ratio - power_ratio*deltaT*0.12, 0)
-  if (fuel_ratio <= 0) {
-    changePower(0, 200)
+  if (fuel_ratio >= 0) {
+    changeFuel(fuel_ratio - power_ratio*deltaT*0.12, 0)
+  } else {
+    changeFuel(0, 0);
   }
 }
 
-function isFuelEmpty() {
-  return fuel_ratio <= 0;
+function getCurTime() {
+  return(new Date()).getTime() - firstTime;
 }
 
-function isInMaxQ() {
-  return curPos>0.14 && curPos<0.23
-}
+
 
 function stepSimulation(prevTime) {
   var t = getCurTime()
@@ -194,8 +207,8 @@ function stepSimulation(prevTime) {
   var p = path.pointAt(curPos*length)
   rocket.center(p.x, p.y)
   //console.log('pos' + curPos + 'speed' + curSpeed)
-  if (curPos>0.17 && curPos<0.20 && power_ratio > 0.6)  {
-    changeRocketImg('img/explosion.png')
+  if (curPos>0.17 && curPos<0.20 && power_ratio > 0.6 && fuel_ratio > 0)  {
+    changeRocketImgExplosion()
     alert("Explosion ! Trop de puissance au point max Q !")
   }
   else if (curPos >= 1) {
@@ -212,33 +225,13 @@ function stepSimulation(prevTime) {
   }
 }
 
-
-
-
-function changeFuel(ratio, duration) {
-  fuel_ratio = Math.max(ratio, 0);
-  if (duration <= 0 ) {
-    fuel_rect.width(fuel_box.width()*fuel_ratio);
-  } else {
-    fuel_rect.animate(duration, 0, 'now').width(fuel_box.width()*fuel_ratio);
-  }
-}
-
-function changePower(ratio, duration) {
-  power_ratio =  Math.max(ratio, 0);
-  power_ratio = Math.min(ratio, 1);
-  power_rect.animate(duration, 0, 'now').width(power_box.width()*power_ratio);
-}
-
-function changeRocketImg(imgPath) {
- rocket_img.load(imgPath)
- rocket.load(imgPath)
+function changeRocketImg(curStage) {
+ let p = 'img/r' + curStage +'.png';
+ rocket_img.load(p)
+ rocket.load(p)
 }
+function changeRocketImgExplosion() {
+  rocket_img.load('img/explosion.png')
+  rocket.load('img/explosion.png')
+ }
 
-
-
-function changeRocketStage() {
-  curStage = (curStage < 4)?(curStage+1):4;
-  changeRocketImg('img/r' + curStage +'.png')
-  if (curStage < 4) changeFuel(1, 200)
-}
diff --git a/activity_2/toolbox.xml b/activity_2/toolbox.xml
index bf2db3a..09ca349 100644
--- a/activity_2/toolbox.xml
+++ b/activity_2/toolbox.xml
@@ -10,6 +10,7 @@
   <category name="Conditions" colour="#5b67a5">
     <block type="is_fuel_empty"></block>
     <block type="is_in_max_q"></block>
+    <block type="is_in_orbit"></block>
   </category>
   <category name="Boucles" colour="#5ba55b">
     <block type="controls_whileUntil">
diff --git a/res/activity_functions.js b/res/activity_functions.js
index 24178e3..cc2fccb 100644
--- a/res/activity_functions.js
+++ b/res/activity_functions.js
@@ -102,6 +102,12 @@ function initApi(interpreter, scope) {
 	};
 	interpreter.setProperty(scope, 'isInMaxQ',
 	interpreter.createNativeFunction(wrapper));
+	
+	var wrapper = function(text) {
+		return isInOrbit();
+	};
+	interpreter.setProperty(scope, 'isInOrbit',
+	interpreter.createNativeFunction(wrapper));
 
 	var wrapper = function(text) {
 		return isFuelEmpty();
diff --git a/res/blocks/arduino_blocks_def.js b/res/blocks/arduino_blocks_def.js
index 092d8e8..5ce4de8 100644
--- a/res/blocks/arduino_blocks_def.js
+++ b/res/blocks/arduino_blocks_def.js
@@ -120,6 +120,17 @@ Blockly.Blocks['is_in_max_q'] = {
   }
 };
 
+Blockly.Blocks['is_in_orbit'] = {
+  init: function() {
+    this.appendDummyInput()
+        .appendField("on est en orbite");
+    this.setOutput(true, "Boolean");
+    this.setColour(230);
+ this.setTooltip("Vérifie si la fusée est en orbite.");
+ this.setHelpUrl("");
+  }
+};
+
 Blockly.Blocks['enable_manual_mode'] = {
   init: function() {
     this.appendDummyInput()
diff --git a/res/blocks/arduino_blocks_gen.js b/res/blocks/arduino_blocks_gen.js
index 291df2d..288295e 100644
--- a/res/blocks/arduino_blocks_gen.js
+++ b/res/blocks/arduino_blocks_gen.js
@@ -66,6 +66,13 @@ Blockly.JavaScript['is_in_max_q'] = function(block) {
   return [code, Blockly.JavaScript.ORDER_NONE];
 };
 
+Blockly.JavaScript['is_in_orbit'] = function(block) {
+  // TODO: Assemble JavaScript into code variable.
+  var code = 'isInOrbit()';
+  // TODO: Change ORDER_NONE to the correct strength.
+  return [code, Blockly.JavaScript.ORDER_NONE];
+};
+
 Blockly.JavaScript['enable_manual_mode'] = function(block) {
   // TODO: Assemble JavaScript into code variable.
 
-- 
GitLab