sound_blocks.js 3.7 KB
Blockly.common.defineBlocksWithJsonArray([
    {
      "type": "play_sound",
      "message0": "Play %1",
      "args0": [ 
        {
          "type": "field_dropdown", // 下拉框
          "name": "VALUE",
          "options": [    // 声音选项
            ["C4", "sounds/c4.m4a"],
            ["D4", "sounds/d4.m4a"],
            ["E4", "sounds/e4.m4a"],
            ["F4", "sounds/f4.m4a"],
            ["G4", "sounds/g4.m4a"]
          ]
        }
      ],
      "previousStatement": null,
      "nextStatement": null,
      "colour": 355
    }
]);

javascript.javascriptGenerator.forBlock['play_sound'] = function(block) {
    let value = '\'' + block.getFieldValue('VALUE') + '\'';
    return 'MusicMaker.queueSound(' + value + ');\n'; // 调用MusicMaker.queueSound函数

  };


  Blockly.Blocks['ZE3P_led'] = {
    init: function () {
      this.jsonInit({
        "message0": "%1",
        "args0": [
          {
            "type": "field_icon_dropdown",
            "name": "COLOR",
            "options": [
              {
                src: Blockly.mainWorkspace.options.pathToMedia + 'icons/set-led_coral.svg',
                width: 48,
                height: 48,
                value: 'Red'
              },
              {
                src: Blockly.mainWorkspace.options.pathToMedia + 'icons/set-led_green.svg',
                width: 48,
                height: 48,
                value: 'Green'
              },
              {
                src: Blockly.mainWorkspace.options.pathToMedia + 'icons/set-led_blue.svg',
                width: 48,
                height: 48,
                value: 'Blue'
              },
              {
                src: Blockly.mainWorkspace.options.pathToMedia + 'icons/set-led_orange.svg',
                width: 48,
                height: 48,
                value: 'Orange'
              },
              {
                src: Blockly.mainWorkspace.options.pathToMedia + 'icons/set-led_yellow.svg',
                width: 48,
                height: 48,
                value: 'Yellow'
              },
              {
                src: Blockly.mainWorkspace.options.pathToMedia + 'icons/set-led_white.svg',
                width: 48,
                height: 48,
                value: 'White'
              },
            ],
          }
        ],
        "outputShape": Blockly.OUTPUT_SHAPE_ROUND,
        "output": "String",
        "extensions": ["colours_looks"]
      });
    }
  }
  
  // ZE3P LED显示颜色
Blockly.Blocks['ZE3P_led_set_color'] = {
  init: function () {
    this.jsonInit({
      "message0": "%1%2",
      "args0": [
        {
          "type": "field_image",
          "src": Blockly.mainWorkspace.options.pathToMedia + "/extensions/ZE3P.png",
          "width": 24,
          "height": 24
        },
        {
          "type": "field_vertical_separator"
        }
      ],
      "message1": "设置彩灯 %1 显示 %2 ",
      "args1": [
        {
          "type": "field_pin_dropdown",
          "name": "INTERFACE",
          "options": Blockly.Blocks.ZE3PInterfaceOptions,
        },
        {
          "type": "input_value",
          "name": "COLOR",
        }
      ],
      "category": Blockly.Categories.looks,
      "extensions": ["colours_looks", "shape_statement"]
    });
  }
};

// LED颜色
Blockly.Python['ZE3P_led'] = function (block) {
  let color = block.getFieldValue('COLOR') || 0;
  const code = "LedColor." + color;
  return [code, Blockly.Python.ORDER_ATOMIC];
};

// LED显示颜色
Blockly.Python['ZE3P_led_set_color'] = function (block) {
  const pin = block.getFieldValue('INTERFACE') || "";
  const color = Blockly.Python.valueToCode(block, 'COLOR', Blockly.Python.ORDER_ATOMIC) || "";
  return `led.set_color(Interface.${pin}, ${color})\n`;
};