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