Facilino.LANG_COLOUR_MOVEMENT = '#CECE42'; Facilino.LANG_COLOUR_MOVEMENT_WALK = '#8D8D25'; Blockly.Blocks['LARS_init'] = { category: Facilino.locales.getKey('LANG_CATEGORY_MOVEMENT'), subcategory: Facilino.locales.getKey('LANG_SUBCATEGORY_WALK'), helpUrl: Facilino.getHelpUrl('LARS_init'), category_colour: Facilino.LANG_COLOUR_MOVEMENT, colour: Facilino.LANG_COLOUR_MOVEMENT_WALK, tags: [], examples: [], init: function () { this.setPreviousStatement(true,'code'); this.setNextStatement(true,'code'); this.setColour(Facilino.LANG_COLOUR_MOVEMENT_WALK); this.setTooltip(Facilino.locales.getKey('LANG_LARS_INIT_TOOLTIP')); } } Blockly.Arduino['LARS_movement'] = function() { var code=''; var movement = this.getFieldValue('MOVEMENT'); if (movement==='0') code+='lars.home();\n'; else if (movement==='1') code+='lars.hello();\n'; else if (movement==='2') code+='lars.wave('+(Blockly.Arduino.valueToCode(this, 'INP1', Blockly.Arduino.ORDER_ATOMIC) || '1')+');\n'; else if (movement==='3') code+='lars.turnL('+(Blockly.Arduino.valueToCode(this, 'INP1', Blockly.Arduino.ORDER_ATOMIC) || '1')+','+(Blockly.Arduino.valueToCode(this, 'INP2', Blockly.Arduino.ORDER_ATOMIC) || '600')+');\n'; else if (movement==='4') code+='lars.turnR('+(Blockly.Arduino.valueToCode(this, 'INP1', Blockly.Arduino.ORDER_ATOMIC) || '1')+','+(Blockly.Arduino.valueToCode(this, 'INP2', Blockly.Arduino.ORDER_ATOMIC) || '600')+');\n'; else if (movement==='5') code+='lars.moonwalk('+(Blockly.Arduino.valueToCode(this, 'INP1', Blockly.Arduino.ORDER_ATOMIC) || '1')+','+(Blockly.Arduino.valueToCode(this, 'INP2', Blockly.Arduino.ORDER_ATOMIC) || '5000')+');\n'; else if (movement==='6') code+='lars.dance('+(Blockly.Arduino.valueToCode(this, 'INP1', Blockly.Arduino.ORDER_ATOMIC) || '1')+','+(Blockly.Arduino.valueToCode(this, 'INP2', Blockly.Arduino.ORDER_ATOMIC) || '600')+');\n'; else if (movement==='7') code+='lars.upDown('+(Blockly.Arduino.valueToCode(this, 'INP1', Blockly.Arduino.ORDER_ATOMIC) || '1')+','+(Blockly.Arduino.valueToCode(this, 'INP2', Blockly.Arduino.ORDER_ATOMIC) || '5000')+');\n'; else if (movement==='8') code+='lars.pushUp('+(Blockly.Arduino.valueToCode(this, 'INP1', Blockly.Arduino.ORDER_ATOMIC) || '1')+','+(Blockly.Arduino.valueToCode(this, 'INP2', Blockly.Arduino.ORDER_ATOMIC) || '600')+');\n'; else if (movement==='9') code+='lars.walk('+this.getFieldValue('FIELD3')+','+(Blockly.Arduino.valueToCode(this, 'INP1', Blockly.Arduino.ORDER_ATOMIC) || '1')+','+(Blockly.Arduino.valueToCode(this, 'INP2', Blockly.Arduino.ORDER_ATOMIC) || '800')+');\n'; else if (movement==='10') code+='lars.omniWalk('+(Blockly.Arduino.valueToCode(this, 'INP1', Blockly.Arduino.ORDER_ATOMIC) || '1')+','+(Blockly.Arduino.valueToCode(this, 'INP2', Blockly.Arduino.ORDER_ATOMIC) || '800')+','+this.getFieldValue('FIELD3')+','+(Blockly.Arduino.valueToCode(this, 'INP4', Blockly.Arduino.ORDER_ATOMIC) || '0')+');\n'; return code; } Blockly.Blocks['LARS_movement'] = { category: Facilino.locales.getKey('LANG_CATEGORY_MOVEMENT'), subcategory: Facilino.locales.getKey('LANG_SUBCATEGORY_WALK'), tags: [], helpUrl: Facilino.getHelpUrl('LARS_movement'), examples: [], category_colour: Facilino.LANG_COLOUR_MOVEMENT, colour: Facilino.LANG_COLOUR_MOVEMENT_WALK, init: function() { this.setColour(Facilino.LANG_COLOUR_MOVEMENT_WALK); var movement = new Blockly.FieldDropdown([ [Facilino.locales.getKey('LANG_LARS_MOVEMENT_HOME'),'0'], [Facilino.locales.getKey('LANG_LARS_MOVEMENT_HELLO'),'1'], [Facilino.locales.getKey('LANG_LARS_MOVEMENT_WAVE'),'2'], [Facilino.locales.getKey('LANG_LARS_MOVEMENT_TURN_LEFT'),'3'], [Facilino.locales.getKey('LANG_LARS_MOVEMENT_TURN_RIGHT'),'4'], [Facilino.locales.getKey('LANG_LARS_MOVEMENT_MOONWALK'),'5'], [Facilino.locales.getKey('LANG_LARS_MOVEMENT_DANCE'),'6'], [Facilino.locales.getKey('LANG_LARS_MOVEMENT_UPDOWN'),'7'], [Facilino.locales.getKey('LANG_LARS_MOVEMENT_PUSHUP'),'8'], [Facilino.locales.getKey('LANG_LARS_MOVEMENT_WALK'),'9'], [Facilino.locales.getKey('LANG_LARS_MOVEMENT_OMNIWALK'),'10'] ]); this.appendDummyInput().appendField(new Blockly.FieldImage('img/blocks/LARS.svg', 32*options.zoom, 32*options.zoom)).appendField(Facilino.locales.getKey('LANG_LARS_MOVEMENT')); this.appendDummyInput('').appendField(Facilino.locales.getKey('LANG_LARS_MOVEMENT_MOVEMENT')).appendField(movement,'MOVEMENT').setAlign(Blockly.ALIGN_RIGHT); this.last_movement = -1; this._inp1_removed = true; this._inp2_removed = true; this._inp3_removed = true; this._inp4_removed = true; this.checkMovement(); this.last_movement = this.getFieldValue('MOVEMENT'); this.setInputsInline(false); this.setPreviousStatement(true,'code'); this.setNextStatement(true,'code'); this.setOutput(false); this.setTooltip(Facilino.locales.getKey('LANG_LARS_MOVEMENT_TOOLTIP')); }, checkMovement: function() { var _movement = this.getFieldValue('MOVEMENT'); try { if (_movement<10) { this._inp4_removed=true; this.removeInput('INP4'); } } catch (e) {} try { if (_movement<9) { this._inp3_removed=true; this.removeInput('INP3'); } } catch (e) {} try { if (_movement<3) { this._inp2_removed=true; this.removeInput('INP2'); } } catch (e) {} try { if (_movement<2) { this._inp1_removed=true; this.removeInput('INP1'); } } catch (e) {} if ( _movement === '2') { if (this._inp1_removed) { this.appendValueInput('INP1').setCheck(Number).appendField(Facilino.locales.getKey('LANG_LARS_MOVEMENT_LEG_NUMBER'),'TEXT1').setAlign(Blockly.ALIGN_RIGHT); this._inp1_removed=false; } else try{this.setFieldValue(Facilino.locales.getKey('LANG_LARS_MOVEMENT_LEG_NUMBER'),'TEXT1');}catch (e) {} } else if (( _movement >= '3')&&( _movement <= '8')) { if (this._inp1_removed) { this.appendValueInput('INP1').setCheck(Number).appendField(Facilino.locales.getKey('LANG_LARS_MOVEMENT_STEPS'),'TEXT1').setAlign(Blockly.ALIGN_RIGHT); this._inp1_removed=false; } else try{this.setFieldValue(Facilino.locales.getKey('LANG_LARS_MOVEMENT_STEPS'),'TEXT1');}catch (e) {} if (this._inp2_removed) { this.appendValueInput('INP2').setCheck(Number).appendField(Facilino.locales.getKey('LANG_LARS_MOVEMENT_PERIOD','TEXT2')).setAlign(Blockly.ALIGN_RIGHT); this._inp2_removed=false; } else try{this.setFieldValue(Facilino.locales.getKey('LANG_LARS_MOVEMENT_PERIOD'),'TEXT2');}catch (e) {} } else if ( _movement === '9') { if (this._inp1_removed) { this.appendValueInput('INP1').setCheck(Number).appendField(Facilino.locales.getKey('LANG_LARS_MOVEMENT_STEPS'),'TEXT1').setAlign(Blockly.ALIGN_RIGHT); this._inp1_removed=false; } else try{this.setFieldValue(Facilino.locales.getKey('LANG_LARS_MOVEMENT_STEPS'),'TEXT1');}catch (e) {} if (this._inp2_removed) { this.appendValueInput('INP2').setCheck(Number).appendField(Facilino.locales.getKey('LANG_LARS_MOVEMENT_PERIOD'),'TEXT2').setAlign(Blockly.ALIGN_RIGHT); this._inp2_removed=false; } else try{this.setFieldValue(Facilino.locales.getKey('LANG_LARS_MOVEMENT_PERIOD'),'TEXT2');}catch (e) {} if (this._inp3_removed) { this.appendDummyInput('INP3').appendField(Facilino.locales.getKey('LANG_LARS_MOVEMENT_DIR'),'TEXT3').appendField(new Blockly.FieldDropdown([['Forward','0'],['Backward','1']]),'FIELD3').setAlign(Blockly.ALIGN_RIGHT); this._inp3_removed=false; } else try{this.setFieldValue(Facilino.locales.getKey('LANG_LARS_MOVEMENT_DIR'),'TEXT3'); this.getInput('INP3').removeField('FIELD3'); this.getInput('INP3').appendField(new Blockly.FieldDropdown([['Forward','0'],['Backward','1']]),'FIELD3');}catch (e) {} } else if ( _movement === '10') { if (this._inp1_removed) { this.appendValueInput('INP1').setCheck(Number).appendField(Facilino.locales.getKey('LANG_LARS_MOVEMENT_STEPS'),'TEXT1').setAlign(Blockly.ALIGN_RIGHT); this._inp1_removed=false; } else try{this.setFieldValue(Facilino.locales.getKey('LANG_LARS_MOVEMENT_STEPS'),'TEXT1');}catch (e) {} if (this._inp2_removed) { this.appendValueInput('INP2').setCheck(Number).appendField(Facilino.locales.getKey('LANG_LARS_MOVEMENT_PERIOD'),'TEXT2').setAlign(Blockly.ALIGN_RIGHT); this._inp2_removed=false; } else try{this.setFieldValue(Facilino.locales.getKey('LANG_LARS_MOVEMENT_PERIOD'),'TEXT2');}catch (e) {} if (this._inp3_removed) { this.appendDummyInput('INP3').appendField(Facilino.locales.getKey('LANG_LARS_MOVEMENT_DIR'),'TEXT3').appendField(new Blockly.FieldDropdown([['Yes','true'],['No','false']]),'FIELD3').setAlign(Blockly.ALIGN_RIGHT); this._inp3_removed=false; } else try{this.setFieldValue(Facilino.locales.getKey('LANG_LARS_MOVEMENT_SIDE'),'TEXT3'); this.getInput('INP3').removeField('FIELD3'); this.getInput('INP3').appendField(new Blockly.FieldDropdown([['Yes','true'],['No','false']]),'FIELD3');}catch (e) {} if (this._inp4_removed) { this.appendValueInput('INP4').setCheck(Number).appendField(Facilino.locales.getKey('LANG_LARS_MOVEMENT_TURN_FACTOR'),'TEXT4').setAlign(Blockly.ALIGN_RIGHT); this._inp4_removed=false; } else try{this.setFieldValue(Facilino.locales.getKey('LANG_LARS_MOVEMENT_TURN_FACTOR'),'TEXT4');}catch (e) {} } }, onchange: function() { if (this.getFieldValue('MOVEMENT') !== this.last_movement) { this.checkMovement(); this.last_movement = this.getFieldValue('MOVEMENT'); } } };