diff --git a/public/activity_1/main-script.js b/public/activity_1/main-script.js index 8e6d880842d5634c2962d68fc0609d8c71692f5a..b99cf1423fb68b50dcafa5a215836a4c984f9a15 100644 --- a/public/activity_1/main-script.js +++ b/public/activity_1/main-script.js @@ -1,9 +1,11 @@ /* Insérer ici les fonctions spécifiques à cette activité. Elles peuvent marcher avec les fonctions et variables déjà définies dans 'activity_functions.js' du dossier 'res'.*/ -var reedsStatus = null; +var reedsStatus = {LH2 : false, LOX2 : false, RP1 : false, LOX1 : false} var catchedFull = {LH2 : false, LOX2 : false, RP1 : false, LOX1 : false} var catchTime = {LH2 : -1, LOX2 : -1, RP1 : -1, LOX1 : -1} +var stopTimeouts = {} +var circuitTemp = 5; var checkReedsInterval = setInterval(function() { if (receivedMsg.startsWith('REEDS')) { @@ -20,7 +22,7 @@ var checkReedsInterval = setInterval(function() { if (catchTime[key] != -1 && !catchedFull[key]) { if (Date.now() - catchTime[key] > 3000) { catchedFull[key] = true - alert("Aie aie aie ! Débordement non maitrisé !") + alert("Aïe Aïe Aïe ! Débordement non maitrisé !") } } } @@ -29,9 +31,18 @@ var checkReedsInterval = setInterval(function() { function init_var() { catchedFull = {LH2 : false, LOX2 : false, RP1 : false, LOX1 : false} catchTime = {LH2 : -1, LOX2 : -1, RP1 : -1, LOX1 : -1} - reedsStatus = null + reedsStatus = {LH2 : false, LOX2 : false, RP1 : false, LOX1 : false} + stopTimeouts = {} + circuitTemp = 5 } +function getCircuitTemperature() { + return circuitTemp +} + +function coolCircuit() { + circuitTemp -= 10 +} function isTankFull(tankId) { if (reedsStatus == null) return false @@ -40,7 +51,24 @@ function isTankFull(tankId) { } } +function unloadFuel(tankId) { + sendString("UNLOAD_" + tankId + ";") +} + +function loadFuel(tankId) { + sendString("LOAD_" + tankId + ";") + console.log("load", tankId) + if (stopTimeouts[tankId]) { + if (stopTimeouts[tankId] != null) + clearTimeout(stopTimeouts[tankId]) + stopTimeouts[tankId] = null + } + stopTimeouts[tankId] = setTimeout(() => {stopLoading(tankId);}, 2000) +} + function stopLoading(tankId) { + console.log("stop fuel loading on", tankId) + sendString("STOP_" + tankId + ";") if (reedsStatus[tankId]) { catchedFull[tankId] = true } diff --git a/public/activity_1/toolbox.xml b/public/activity_1/toolbox.xml index d4bc946bf4fe3a7eb4826d1a3670c79540dcc637..6a5b4149f85d7baa428b8efb166cc88fc74bab6f 100644 --- a/public/activity_1/toolbox.xml +++ b/public/activity_1/toolbox.xml @@ -36,6 +36,9 @@ <block type="logic_boolean"> <field name="BOOL">TRUE</field> </block> + <block type="math_number"> + <field name="NUM">0</field> + </block> </category> <category name="Boucles" colour="#5ba55b"> <block type="controls_whileUntil"> diff --git a/public/activity_3/toolbox.xml b/public/activity_3/toolbox.xml index ffb5a52c7967d321f71a25e43eed24730aa1bfc7..30f1f97a383c672b9fc728fc161f2255e9bbb838 100644 --- a/public/activity_3/toolbox.xml +++ b/public/activity_3/toolbox.xml @@ -18,16 +18,14 @@ <block type="logic_operation"> <field name="OP">AND</field> </block> + <block type="math_number"> + <field name="NUM">0</field> + </block> <block type="logic_negate"></block> <block type="logic_boolean"> <field name="BOOL">TRUE</field> </block> </category> - <category name="Maths" colour="#5b67a5"> - <block type="math_number"> - <field name="NUM">0</field> - </block> - </category> <category name="Boucles" colour="#5ba55b"> <block type="controls_whileUntil"> <field name="MODE">WHILE</field> diff --git a/public/res/activity_functions.js b/public/res/activity_functions.js index 391dc5d9cfe27d92baa0045678cb5024eb9d35fa..e1c02b69db1fe6db6b0ff13f18fe6415d0d0c53d 100644 --- a/public/res/activity_functions.js +++ b/public/res/activity_functions.js @@ -11,6 +11,7 @@ var receivedMsg = ""; var port; let textEncoder = new TextEncoder(); +var pid = 0; function highlightBlock(id) { workspace.highlightBlock(id); @@ -18,13 +19,14 @@ function highlightBlock(id) { //Lance le code tel que rentré par le joueur function runCode() { + if (pid != 0) clearTimeout(pid) init_var(); var code = Blockly.JavaScript.workspaceToCode(workspace); //On récupère un code javascript console.log(code) var myInterpreter = new Interpreter(code, initApi); //Intanciation d'une VM avec fonctions réécrites function nextStep() { if (myInterpreter.step()) { - setTimeout(nextStep, 10); + pid = setTimeout(nextStep, 10); } } nextStep(); @@ -77,7 +79,37 @@ function changeVar(variable, value) { //Interprétation des commandes par l'utiliseur (redéfinition des fonctions avec IO) function initApi(interpreter, scope) { - var wrapper = function(text) { + var wrapper = function(text) { + return getCircuitTemperature(); + }; + interpreter.setProperty(scope, 'getCircuitTemperature', + interpreter.createNativeFunction(wrapper)); + + var wrapper = function(text) { + return coolCircuit(); + }; + interpreter.setProperty(scope, 'coolCircuit', + interpreter.createNativeFunction(wrapper)); + + var wrapper = function(text) { + return isTankFull(arguments.length ? text : ''); + }; + interpreter.setProperty(scope, 'isTankFull', + interpreter.createNativeFunction(wrapper)); + + var wrapper = function(text) { + return loadFuel(arguments.length ? text : ''); + }; + interpreter.setProperty(scope, 'loadFuel', + interpreter.createNativeFunction(wrapper)); + + var wrapper = function(text) { + return unloadFuel(arguments.length ? text : ''); + }; + interpreter.setProperty(scope, 'unloadFuel', + interpreter.createNativeFunction(wrapper)); + + var wrapper = function(text) { return enableManual(); }; interpreter.setProperty(scope, 'enableManual', diff --git a/public/res/blocks/arduino_blocks_def.js b/public/res/blocks/arduino_blocks_def.js index ec901a10eb511c62ec894c2948ad0123341a6db4..371c85fa1cc1b781ea8274cf61956638188ab3e4 100644 --- a/public/res/blocks/arduino_blocks_def.js +++ b/public/res/blocks/arduino_blocks_def.js @@ -63,10 +63,8 @@ Blockly.Blocks['load_fuel'] = { init: function() { this.appendDummyInput() .setAlign(Blockly.ALIGN_CENTRE) - .appendField("Charger du") - .appendField(new Blockly.FieldDropdown([["RP1 (Kérosène)","0"], ["LH2 (Hydrogène)","1"], ["LOX (Oxygène)","2"]]), "fuel_type") - .appendField("dans l'étage") - .appendField(new Blockly.FieldNumber(0, 1, 3, 1), "stage"); + .appendField("Charger le") + .appendField(new Blockly.FieldDropdown([["RP1 (Kérosène) étage 1","RP1"], ["LH2 (Hydrogène) étage 2","LH2"], ["LOX (Oxygène) étage 1","LOX1"], ["LOX (Oxygène) étage 2","LOX"]]), "fuel_type") this.setPreviousStatement(true, null); this.setNextStatement(true, null); this.setColour(0); @@ -102,9 +100,8 @@ Blockly.Blocks['is_tank_full'] = { init: function() { this.appendDummyInput() .appendField("le") - .appendField(new Blockly.FieldDropdown([["RP1 (Kérosène)","0"], ["LH2 (Hydrogène)","1"], ["LOX (Oxygène)","2"]]), "fuel_type") - .appendField("est plein à l'étage") - .appendField(new Blockly.FieldNumber(0, 1, 3, 1), "stage"); + .appendField(new Blockly.FieldDropdown([["RP1 (Kérosène) étage 1","RP1"], ["LH2 (Hydrogène) étage 2","LH2"], ["LOX (Oxygène) étage 1","LOX1"], ["LOX (Oxygène) étage 2","LOX"]]), "fuel_type") + .appendField("est plein") this.setOutput(true, "Boolean"); this.setColour(230); this.setTooltip("Est-ce que ce réservoir de carburant est plein ?"); @@ -137,7 +134,7 @@ Blockly.Blocks['is_computer_ok'] = { Blockly.Blocks['fix_leak'] = { init: function() { this.appendDummyInput() - .appendField("Envoyer une équipe pour réparer la fuite"); + .appendField("Envoyer une équipe pour réparer la fuite et attendre"); this.setPreviousStatement(true, null); this.setNextStatement(true, null); this.setColour(0); diff --git a/public/res/blocks/arduino_blocks_gen.js b/public/res/blocks/arduino_blocks_gen.js index 154eb320017c854b7c532d8e734d2cbc2ec94d65..05490e6a1cdb43d01a58fa3ec6cacb9417dd9e7f 100644 --- a/public/res/blocks/arduino_blocks_gen.js +++ b/public/res/blocks/arduino_blocks_gen.js @@ -34,63 +34,61 @@ Blockly.JavaScript['turn_io'] = function(block) { Blockly.JavaScript['load_fuel'] = function(block) { var dropdown_fuel_type = block.getFieldValue('fuel_type'); - var number_stage = block.getFieldValue('stage'); // TODO: Assemble JavaScript into code variable. - var code = '...;\n'; + var code = 'loadFuel("' + dropdown_fuel_type + '"); \n'; return code; }; Blockly.JavaScript['cool_circuit'] = function(block) { // TODO: Assemble JavaScript into code variable. - var code = '...;\n'; + var code = 'coolCircuit()\n'; return code; }; Blockly.JavaScript['get_circuit_temperature'] = function(block) { // TODO: Assemble JavaScript into code variable. - var code = '...'; + var code = 'getCircuitTemperature()'; // TODO: Change ORDER_NONE to the correct strength. return [code, Blockly.JavaScript.ORDER_NONE]; }; Blockly.JavaScript['is_tank_full'] = function(block) { var dropdown_fuel_type = block.getFieldValue('fuel_type'); - var number_stage = block.getFieldValue('stage'); // TODO: Assemble JavaScript into code variable. - var code = '...'; + var code = 'isTankFull("' + dropdown_fuel_type + '")'; // TODO: Change ORDER_NONE to the correct strength. return [code, Blockly.JavaScript.ORDER_NONE]; }; Blockly.JavaScript['is_leak_detected'] = function(block) { // TODO: Assemble JavaScript into code variable. - var code = '...'; + var code = 'true'; // TODO: Change ORDER_NONE to the correct strength. return [code, Blockly.JavaScript.ORDER_NONE]; }; Blockly.JavaScript['is_computer_ok'] = function(block) { // TODO: Assemble JavaScript into code variable. - var code = '...'; + var code = 'true'; // TODO: Change ORDER_NONE to the correct strength. return [code, Blockly.JavaScript.ORDER_NONE]; }; Blockly.JavaScript['fix_leak'] = function(block) { // TODO: Assemble JavaScript into code variable. - var code = '...;\n'; + var code = 'alert("Les techniciens ont réussi à fixer la fuite, la mission peut reprendre !");\n'; return code; }; Blockly.JavaScript['pause_launch'] = function(block) { // TODO: Assemble JavaScript into code variable. - var code = '...;\n'; + var code = 'alert("Le décompte de lancement a été mis en pause !");\n'; return code; }; Blockly.JavaScript['go_lift'] = function(block) { // TODO: Assemble JavaScript into code variable. - var code = '...;\n'; + var code = 'alert("Les astronautes sont arrivés au 320e étage et vont embarquer !");\n'; return code; };